안녕하세요. 오늘은 STM32 PWM TIMER에 대해 알아보겠습니다.
PWM은 Pulse width modulation의 줄임말이고 디지털신호를 아날로그신호를 사용하는걸 의미합니다.
DC모터의 제어나 LED 밝기조절할때 사용합니다.
이 글에서는 PWM을 사용하여 주파수값에 따라서 LED밝기가 어떻게 변하는지 알아보겠습니다
먼저 PWM을 사용하기위해 클럭을 설정해줍니다
데이터시트 RCC쪽에서 어떤 타이머가 어떤 버스를 사용하는지 확인 가능합니다
이 글에서는 TIM1,2를 사용할거고 사용할 클럭은 48MHz로 설정했습니다
48MHz를 분주하기위해서 prescale이라는걸 사용합니다.
Period를 설정해기위해 auto-reload register를 설정합니다.
100을 설정했다고하면 CNT값이 0->1->2->3...->99->100->0이런식으로 됩니다
TIM1과 TIM2를 설정했습니다.
TIM1은 prescale 48이고 arr은 100입니다 (설정은 1씩 작게해야합니다)
48000000/48 = 1000000Hz
1000000/100 = 10000Hz
이므로 1/10000 = 0.0001s (100us) 마다 주기적인 파형이 찍히게 됩니다
TIM2는 prescale 48000이고 arr은 100입니다 (설정은 1씩 작게해야합니다)
48000000/48000 = 1000Hz
1000/100 = 10Hz
이므로 1/10 = 0.1s (100ms) 마다 주기적인 파형이 찍히게 됩니다
코드제너레이터를하면 기본적인 설정은 해주고 HAL_TIM_PWM_Start를 사용하여 타이머를 시작해야합니다.
CCR1레지스터는 듀티비 설정과 비슷한 레지스터입니다. ARR을 100으로 설정했으므로 CCR1을 50으로 설정하면 듀티비는 50%가 됩니다.
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
htim1.Instance->CCR1 = 50;
htim2.Instance->CCR1 = 50;
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
타이머1의 출력파형입니다. 듀티비가 50%이고 Freq가 10kHz가 찍혔습니다
타이머2의 출력파형입니다. 듀티비가 50%이고 Freq가 10Hz가 찍혔습니다.
이제 두 곳의 PWM출력포트에 LED를 연결해서 밝기를 보겠습니다
왼쪽은 타이머1이고 오른쪽은 타이머2입니다. 실제로 보면 타이머1은 약간 어둡게 보이고 타이머2는 빠른속도로 점멸하는거처럼 보입니다. 빠른속도로 점멸하는것처럼 보이지않기위해 freq를 120Hz이상 설정해야한다고합니다.
이제 CCR1값을 0~100까지 변화시키면서 LED의 밝기를 조절해보겠습니다
/* USER CODE BEGIN 2 */
int i=0;
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
htim1.Instance->CCR1 = i;
htim2.Instance->CCR1 = i;
HAL_Delay(10);
i++;
if(i>100)
i=0;
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
'STM32 > 이론' 카테고리의 다른 글
STM32 외부인터럽트 알아보기 (0) | 2024.11.09 |
---|---|
STM32 GPIO제어하기 INPUT MODE (1) | 2023.11.18 |
STM32 GPIO제어하기OUTPUT_3편(MX_GPIO_Init함수 분석) (1) | 2023.10.22 |
STM32 GPIO제어하기OUTPUT_2편(컨피규레이션 설정) (1) | 2023.10.14 |
STM32 GPIO제어하기 OTUPUT_1편(LED깜빡이기) (0) | 2023.10.02 |