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
'Electrical Study' 카테고리의 다른 글
STM32CubeIDE로 UART 파형 관측 및 Protocol 파악하기 (0) | 2025.03.14 |
---|---|
STM32CubeIDE로 UART Interrupt Debugging 하기 (4) | 2025.02.26 |
STM32CubeIDE에서 RTC 설정하고 UART와 printrf로 출력하기 (2) | 2025.02.21 |
STM32CubeIDE UART사용해 printf 출력 세팅 파헤치기 (0) | 2025.02.20 |
STM32CubeIDE UART 사용해 printf 출력하기 (0) | 2025.02.18 |