해결된 질문
작성
·
25
1
U(A)상,V(B)상,W(C)상 제어를 위한 코드에서
TIM1을 이용해서 3상에 20KHz의 PWM을 신호를 발생 시키는데. 여기서 2가지 질문이 있습니다.
20KHz의 PWM 선정 조건이 있는지 궁금합니다. 단순 실험적 조건인건지, 아니면 하이사이드의 충전 시간 등 어떠한 고려 사항을 토대로 선정을 하셨는지 궁금합니다.
20KHz의 상보 동작의 구동방식에서 어떤식의 코드에서 상단만 PWM이 들어가고 하단은 상보동작의 ON/OFF 시스템이 되는지 궁금합니다.
아마, Set_Phases 함수인거 같은데 해당 부분에 부연 설명 좀 부탁드리겠습니다.
답변 2
0
20kHz로 선정한 이유는 다음과 같습니다. 먼저 가청대역을 회피하기 위해서 20kHz로 스위칭 주파수를 선정하였습니다.
MOSFET 스위칭 손실과 발열을 고려하였습니다.
DC전압 36V, 상전류 15A에서 스위칭 주파수가 20kHz라면 대략적으로 0.22~0.32W 수준의 스위칭 손실이 발생합니다. 이는 스위칭 손실로 발생하는 발열량을 무시할 수 있는 수준입니다.
Set_Phases 함수는 다음과 같이 동작합니다.
핵심은 Set_Phases(phaseA, phaseB, phaseC)
에 넘기는 상태와 CCR 값입니다.
인자 의미
+1
: 그 상의 상단 PWM (반대 하단은 보완 동작)
-1
: 그 상의 하단 고정 ON
0
: 그 상 오프(부동)
매 60°(홀 상태 변경)마다 패턴 예시
소형 BLDC 순방향의 한 예: HallSum==6
→ Set_Phases(0, -1, 1)
즉 A상 오프, B상 하단 ON, C상 상단 PWM. 이 형태가 6스텝 동안 번갈아 반복됩니다.
타이머/CCR 동작 요점Set_Phases()
내부에서
+1
(상단 PWM): TIM1->CCRn = CNT_MAX - VoltageRef;
로 듀티 부여 + 채널 언마스크
-1
(하단 ON): TIM1->CCRn = CNT_MAX;
로 보완 출력이 항상 ON이 되도록 설정 + 채널 언마스크
0
(오프): CCRn = 0
후 채널 마스크(해당 상 상·하 모두 차단)
0
안녕하세요, 인프런 AI 인턴입니다. dhanbi1님.
귀하께서 질문하신 내용은 임베디드 시스템에서 PWM(Pulse Width Modulation) 방식을 활용한 모터 제어에 관한 심화된 주제입니다. 이러한 주제와 관련된 기존 답변은 다음과 같습니다:
PWM 주파수 선정:
20kHz의 PWM 주파수는 주로 모터의 소음 감소, 효율성, 스위치 변환 손실 등을 고려하여 선택됩니다. 20kHz는 사람의 가청 주파수보다 높아 모터에서 발생하는 소음을 줄일 수 있고, 효율적인 스위칭을 통해 시스템의 성능을 높일 수 있는 주파수 대역입니다. 하이사이드의 충전 시간이나 부품의 허용 전류에 따라 주파수 선택에 영향을 미칠 수 있습니다.
상보 동작의 구동 방식:
상보 동작에서는 상부 스위치에 PWM 신호를 인가하고 하부 스위치는 상보로 작동하여 동기 정류를 수행하게 됩니다. 이는 손실을 줄이고 시스템의 효율성을 높이기 위한 기법입니다. Set_Phases
함수에서는 타이머 설정을 통해 이러한 상보 동작이 구현될 수 있습니다. 상단만 PWM 신호가 인가되고 하단은 ON/OFF로 상보되도록 하는 방식은 일반적으로 각 타이머의 출력 비교 모드를 설정하여 구현하게 됩니다.
강의에서 이미 실습내용을 다루고 있을 가능성이 높습니다. 추가적으로 강의 내 관련 예제를 살펴보시거나, 제공된 예제 코드에서 타이머 설정 부분과 PWM 관련 설정을 면밀히 검토하시면 코드 작동 방식을 명확히 이해하실 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.