STM32_PWM

less than 1 minute read

PWM

PWM : Pulse Width Modulation
특정 시간 내에 평균 전압을 조절하여 Peripheral의 속도, 밝기 등을 조절한다.

필요한 상수

Clock
prescale
period

Clock Configuration


image
Timer5를 사용할 예정이고 Tim5가 연결되어있는 APB1 Timer Clocks은 72 MHz

Set Pin, Channel, Prescale, Period


image


prescale이나 period는 0부터 시작 예를 들어 1024개를 표현하면 0~1023처럼 적용되기 때문에 정확하게 결과를 출력하려면 계산값에서 -1을 해줘야한다.

Prescale 값 : 720 - 1
72 MHz / 720 (prescale) = 1 MHz
1MHz = 1,000,000 Hz => 주기 (T) = 0.000001 초

0.01 초 마다 한 번 타이머 인터럽트를 발생하게 하고 싶다면
0.01 / 0.000001 = 10000
period 값 : 10000 - 1


현재 사용하는 보드는 16 bit 이라서 한번에 처리 가능한 숫자는 2^16 = 65536 이다.
그러므로 period 값은 항상 65535 이하여야한다.

Code


타이머를 사용하여 외부 장치를 작동 시킨 후 duty ratio를 설정해준다.

HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim5, TIM_CHANNEL_1);
__HAL_TIM_SET_COMPARE(&htim5, TIM_CHANNEL_1, 5000);


각 줄은

  1. 일반 PWM 시작
  2. CMOS 와 같이 빠른 속도로 ON OFF를 교차적으로 바꾸는 상황의 PWM 시작
  3. 5000이라는 숫자는 Period와 비교하여 5000/10000 x 100 = 50% 라는 결과를 낼 수 있다.


Go to top

Leave a comment