Timer (General Purpose - PWM)

유명현·2021년 6월 28일
0

안녕하세요?

오늘은 Timer를 통하여 PWM을 제어하는것을 알아보겠습니다.

< PWM 개념 >

PWM은 Pulse Width Modulation의 약자로 일정한 주기 내에 Duty비를 변경하여 평균전압을 제어하는 방법입니다.

PWM은 LED조명제품의 광량이나 DC모터의 속도제어를 할 때 많이 사용합니다.

< PWM의 동작 방법 >

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비를 설정한 것을 볼 수 있습니다.

< STM32CubeMX 설정 >

먼저 타이머3을 설정하여 Channel1에 PWM Generation CH1을 설정합니다.

그 다음 100Hz를 만들기 위해 Prescaler를 159, Auto Reload Register를 999로 설정합니다.(현재 APB TIMER CLOCK이 16MHz로 설정)

그다은 Capure Compare Register를 설정하기 위해 Pulse를 0을 입력했고 현재 Duty비를 0으로 만듭니다.

< PWM Coding 1 >

HAL_TIM 함수를 통해 현재 설정한 CCR값과 Auto Reload Register의 값을 받아옵니다.

< PWM Coding 2 >

__HAL_TIM_SET_COMPARE를 통해 현재 원하는 타이머의 연결된 채널에 Duty비를 변경할 수 있습니다.

< PWM Coding 3 >

처음에 Duty비가 0이므로 시간이 지남에 따라 Duty비가 상승하여 LED밝기가 밝아집니다.

CCR이 Auto Reload Register와 같게 되면 다시 duty비를 0이 될 때까지 낮추어 led의 밝기를 어둡게 합니다.

profile
기억보다 기록을

0개의 댓글