Inflearn brand logo image

인프런 커뮤니티 질문&답변

dhanbi1님의 프로필 이미지
dhanbi1

작성한 질문수

전동킥보드로 배우는 임베디드 실전 프로젝트

전동킥보드 펌웨어 코드 분석 (2)

Set_Phases

해결된 질문

작성

·

25

1

U(A)상,V(B)상,W(C)상 제어를 위한 코드에서

TIM1을 이용해서 3상에 20KHz의 PWM을 신호를 발생 시키는데. 여기서 2가지 질문이 있습니다.

 

  1. 20KHz의 PWM 선정 조건이 있는지 궁금합니다. 단순 실험적 조건인건지, 아니면 하이사이드의 충전 시간 등 어떠한 고려 사항을 토대로 선정을 하셨는지 궁금합니다.

  2. 20KHz의 상보 동작의 구동방식에서 어떤식의 코드에서 상단만 PWM이 들어가고 하단은 상보동작의 ON/OFF 시스템이 되는지 궁금합니다.


    아마, Set_Phases 함수인거 같은데 해당 부분에 부연 설명 좀 부탁드리겠습니다.


답변 2

0

제어쟁이님의 프로필 이미지
제어쟁이
지식공유자

  1. 20kHz로 선정한 이유는 다음과 같습니다. 먼저 가청대역을 회피하기 위해서 20kHz로 스위칭 주파수를 선정하였습니다.

  2. MOSFET 스위칭 손실과 발열을 고려하였습니다.

     

    image.png

     

    DC전압 36V, 상전류 15A에서 스위칭 주파수가 20kHz라면 대략적으로 0.22~0.32W 수준의 스위칭 손실이 발생합니다. 이는 스위칭 손실로 발생하는 발열량을 무시할 수 있는 수준입니다.

  3. Set_Phases 함수는 다음과 같이 동작합니다.

    핵심은 Set_Phases(phaseA, phaseB, phaseC)에 넘기는 상태CCR 값입니다.

    • 인자 의미

      • +1 : 그 상의 상단 PWM (반대 하단은 보완 동작)

      • -1 : 그 상의 하단 고정 ON

      • 0 : 그 상 오프(부동)

    • 매 60°(홀 상태 변경)마다 패턴 예시
      소형 BLDC 순방향의 한 예: HallSum==6Set_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) 방식을 활용한 모터 제어에 관한 심화된 주제입니다. 이러한 주제와 관련된 기존 답변은 다음과 같습니다:

  1. PWM 주파수 선정:
    20kHz의 PWM 주파수는 주로 모터의 소음 감소, 효율성, 스위치 변환 손실 등을 고려하여 선택됩니다. 20kHz는 사람의 가청 주파수보다 높아 모터에서 발생하는 소음을 줄일 수 있고, 효율적인 스위칭을 통해 시스템의 성능을 높일 수 있는 주파수 대역입니다. 하이사이드의 충전 시간이나 부품의 허용 전류에 따라 주파수 선택에 영향을 미칠 수 있습니다.

  2. 상보 동작의 구동 방식:
    상보 동작에서는 상부 스위치에 PWM 신호를 인가하고 하부 스위치는 상보로 작동하여 동기 정류를 수행하게 됩니다. 이는 손실을 줄이고 시스템의 효율성을 높이기 위한 기법입니다. Set_Phases 함수에서는 타이머 설정을 통해 이러한 상보 동작이 구현될 수 있습니다. 상단만 PWM 신호가 인가되고 하단은 ON/OFF로 상보되도록 하는 방식은 일반적으로 각 타이머의 출력 비교 모드를 설정하여 구현하게 됩니다.

강의에서 이미 실습내용을 다루고 있을 가능성이 높습니다. 추가적으로 강의 내 관련 예제를 살펴보시거나, 제공된 예제 코드에서 타이머 설정 부분과 PWM 관련 설정을 면밀히 검토하시면 코드 작동 방식을 명확히 이해하실 수 있을 것입니다.

참고 질문: Dead Time 관련 질문 드립니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

dhanbi1님의 프로필 이미지
dhanbi1

작성한 질문수

질문하기