Electrical Study

STM32CubeIDE에서 PWM 설정하고 출력하기

Torrance 2025. 2. 24. 15:51

STM32CubeIDE에서 NUCLEO-F103RB 보드를 컨트롤해 파형을 출력하고 해당 파형을 찍어봤습니다.

ioc(input/output configuration)에서 PWM 설정해 파형을 관측하고 설정한 값에 대한 분석을 합니다.

제가 참고한 자료들의 링크를 첨부하니 참고하시길 바랍니다.

 

목차

  • 하드웨어 및 개발 환경
  • PWM 세팅
  • PWM 분석
  • PWM 조절

하드웨어 및 개발 환경

2025.02.18 - [Electrical Study] - STM Project 사용된 하드웨어 및 개발 환경

 

STM Project 사용된 하드웨어 및 개발 환경

개발 보드 : NUCLEO-F103RB (내돈내산)https://smartstore.naver.com/muwonkorea/products/10807059000?nl-query=stm32+nucleo-64&nl-ts-pid=iI2r6wqVN8oss6q76kGssssstUw-516721&NaPm=ct%3Dm732kqqo%7Cci%3Dd457cba2010db1ab1f95e32278f0c7d6b24d79ad%7Ctr%3Dsls%7C

semiconwide.tistory.com


PWM 세팅

저는 PC8번에 출력할 것입니다. 저기가 Logic Analyzer 선과 연결하기 가장 편하기 때문입니다.

ioc에서 PC8번을 보면 TIM3_CH3이 있습니다.

TIMER 3번과 Channel 3번이므로 아래와 같이 설정해 주고 code를 generate 합니다.

 

main.c에 아래 구문을 써줍니다. TIM3이라 &htim3이고 CH3이라 TIM_CHANNEL_3은 모두 아실 것입니다.

// main.c line 102
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);


PC8에 해당하는 Pin을 Logic Analyzer에 연결한다면


아래와 같은 파형을 확인할 수 있습니다.


PWM 분석

STM32로 PWM 설정할 때 다음과 같이 세팅을 진행했습니다.


Prescaler : 타이머의 카운터가 얼마나 빨리 증가할지를 결정하는 값으로 클럭을 조절할 때 사용됩니다.

기본적으로 타이머는 시스템 클럭을 기준으로 카운터 값을 증가시킵니다.

시스템 클럭이 1hz면 1초마다 카운터를 증가시키는데 이때 Prescaler를 10으로 설정하면 타이머는 10번의 클럭 신호를 받았을 때 카운터를 한 번 증가시키게 됩니다. 즉, Prescaler는 주파수를 분할하는 값입니다.

 

Counter Period : 타이머 카운터가 최댓값에 도달할 때까지 카운트되는 값을 설정하는 파라미터

 

Coutner Period가 999면 0부터 999까지 카운트하고 다시 0으로 돌아갑니다.

Pulse : PWM에서 on 상태의 길이를 Counter Period에서 차지하는 비율로 설정하는 값입니다.

Counter Period가 1000 (0~999)이고 Pulse가 500이므로 50%가 on 되고 50%가 off가 됩니다. 

현재 시스템에서 해당 설정 값을 확인해 보겠습니다.



RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI에서

HSI는 STM32 내부에 기본적으로 탑재된 8 MHz 크리스탈을 사용하는 클럭 소스입니다.

RCC_PLLSOURCE_HSI_DIV2는 HSI 클럭을 2로 나누어서 PLL 입력 클럭으로 사용한다는 의미이며,

RCC_PLL_MUL16은 PLL 배수를 16으로 설정해,

최종적으로 8 MHz / 2 = 4 MHz를 16배 증폭시켜 64 MHz 시스템 클럭을 만듭니다.

즉, 현재 시스템 클럭은 64 Mhz입니다.

여기서 Prescaler = 64000 - 1이므로 타이머는 64000번의 클럭 신호를 받았을 때 카운터를 한 번 증가시키게 됩니다.

64 Mhz /  64000 = 1000이므로 1Khz인 초당 1000번 카운터 하고,

Counter Period는 1000(0~999)이므로 1초마다 Counter가 0으로 리셋됩니다.

이 1000개 중 Period 500이 On 이므로 50%만큼 on이 되는 것입니다.


PWM 조절

위에서 구현한 PWM은 주기가 1 초고 Duty Ratio(듀티비)가 50%입니다.

다음과 같은 2가지 활동을 해보겠습니다.

1. Prescaler를 조절해 주파수를 2배로 올리기

2. Pulse를 조절해 Duty Ration가 7:3로 만들기

Prescaler를 조절해 주파수를 2배로 올리기 (Counter Period, Pulse 값 동일)


Pulse를 조절해 Duty Ration가 7:3로 만들기


2025/02/24 ver 0