[STM32] PWM

이채윤·2022년 4월 25일
1

임베디드

목록 보기
18/70
post-thumbnail

[PWM이란?]

  • 통신에서 사용하는 변조 방식 중의 하나이다. 즉, 정보에 따라 펄스의 폭을 변화시켜 전달하는 방식이다.
  • 예를 들어 신호의 크기가 크면 펄스 폭을 크게 하고 신호의 크기가 작으면 펄스 폭을 작게 하여 정보를 전달한다.
  • 하지만, 마이크로 프로세서 응용분야에서는 PWM신호는 모터를 제어하는 분야에 주로 사용된다.
    펄스 폭의 크기에 따라 평균 파워를 변화시킬 수 있기 때문에 이를 이용하여 DC모터의 회전 속도를 제어할 수 있다.
  • 이 외에도 LED를 단지 ON/OFF 제어가 아닌 밝기 제어가 필요한 경우에는 PWM 신호를 이용할 수 있으며, DC 서보 모터 등을 제어하는 곳에서도 사용된다.
  • PWM 신호는 주기(period)와 펄스 폭(펄스에서 ‘on’인 시간)으로 표시할 수 있다.
    펄스 폭은 듀티 사이클(duty cycle)로 표현되기도 한다.

[Datasheete를 살펴본 PWM 설정]

  • Datasheet를 살펴보면, PB8에서 TIM4, Channel3을 사용하면 된다고 적혀있다.
    (TIM4_CH3말고 적혀있는것 중에서 다른 것을 사용해도 된다.)

[PWM 설정]

<Prescaler이란>

  • 클럭을 나누는것.
  • 48Whz는 48x10^6이므로 매우 주파수가 높다.  육안으로 PWM제어하는 것을 보고 싶다면 속도를 느리게 해줄 필요가 있다. 그래서 48000으로 나누어 1000hz로 동작하게 설정하였다.

<CounterPeriod란>

  • 카운터의 주기를 정하는 것.
  • 1000hz를 1초에 1주기로 돌게 하고 싶다면 1000으로 설정하고, 1초에 10번 주기를 돌게하고 싶다면, 100을 입력.

<Pluse란>

  • 듀티를 설정할 수 있다.

<duty(듀티)란>

  • 일반적으로 디지털신호는 0과 1로 표현됩니다. 0과 1이 반복되는 한주기 신호중 0의 지속시간과 1의 지속시간의 비율을 나타내는 단어입니다.
  • 예를 들면(디지털신호의 한주기의 시간을 100이라고 가정할때) 0의 지속시간이 딱 절반(50)이고 1의 지속시간이 딱 절반(50)이라면 (50/100)x100=50% 듀티는 50%가 되는 것입니다.


  • Pulse설정값을 크게 하면, 펄스에서 on인 시간이 커지게 되며 신호의 크기가 커지게 된다.
    만약 작게 설정하면 신호의 크기가 작아지게 된다.

[코드 작성]

  • main안에 위처럼 작성해주면 PWM이 출력된다.
  • duty값을 적절히 변경하여 LED의 밝기 및 모터의 속도등을 조절할 수 있다.

0개의 댓글