[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의 밝기 및 모터의 속도등을 조절할 수 있다.