안녕하세요?
오늘은 Timer를 통하여 PWM을 제어하는것을 알아보겠습니다.
PWM은 Pulse Width Modulation의 약자로 일정한 주기 내에 Duty비를 변경하여 평균전압을 제어하는 방법입니다.
PWM은 LED조명제품의 광량이나 DC모터의 속도제어를 할 때 많이 사용합니다.
PWM의 Duty비를 제어하기 위해서는 Caputure Compare Register를 이용해야 합니다.
Pescaler와 Auto Reload Register에서 대해 잘 모르신다면 앞에 Basic Timer에서 확인하시기 바랍니다.
타이머를 통해 0.01초 마다 Auto Reload Register가 초기화 되는것을 볼 수 있습니다.
Capture Compare Register를 0부터 Auto Reload Register 범위 안에 숫자를 입력하여 Duty비를 제어 할 수 있습니다.
현재 Capture Compare Register를 21000으로 두어 50%의 Duty비를 설정한 것을 볼 수 있습니다.
먼저 타이머3을 설정하여 Channel1에 PWM Generation CH1을 설정합니다.
그 다음 100Hz를 만들기 위해 Prescaler를 159, Auto Reload Register를 999로 설정합니다.(현재 APB TIMER CLOCK이 16MHz로 설정)
그다은 Capure Compare Register를 설정하기 위해 Pulse를 0을 입력했고 현재 Duty비를 0으로 만듭니다.
HAL_TIM 함수를 통해 현재 설정한 CCR값과 Auto Reload Register의 값을 받아옵니다.
__HAL_TIM_SET_COMPARE를 통해 현재 원하는 타이머의 연결된 채널에 Duty비를 변경할 수 있습니다.
처음에 Duty비가 0이므로 시간이 지남에 따라 Duty비가 상승하여 LED밝기가 밝아집니다.
CCR이 Auto Reload Register와 같게 되면 다시 duty비를 0이 될 때까지 낮추어 led의 밝기를 어둡게 합니다.