키위백과의 잡동사니

STM32CubeIDE 예제: TIM2을 이용한 PWM으로 LD2 LED 깜빡이기 본문

프로젝트/밸런싱 로봇

STM32CubeIDE 예제: TIM2을 이용한 PWM으로 LD2 LED 깜빡이기

KiwiPedia 2025. 7. 21. 20:10

리밸런싱 로봇을 만들기 위해 익혀야 할 개념은 모터 제어이며, 그 핵심이 바로 PWM(Pulse Width Modulation)입니다.

이번 글에서는 STM32 NUCLEO-F446RE 보드를 사용하여 LD2(초록색 LED)를 1초 주기로 깜빡이는 PWM 실습을 진행합니다.

 

1. 프로젝트 생성 및 PWM Timer 설정

1-1. PWM 프로젝트 생성

STM32CubeIDE를 실행하고, 새로운 프로젝트를 생성합니다.

저는 프로젝트명을 PWM으로 만들었습니다.

1-2. TIM2 설정

"Pinout & Configuration" 탭에서 Timers > TIM2 를 클릭합니다.

방법 1: 수동 할당 변경

  • Clock Source: Internal Clock 선택
  • Channel1: PWM Generation CH1 선택

  • 기본적으로 TIM2_CH1은 PA0에 할당되어 있으므로, Ctrl + 마우스 왼쪽 버튼 드래그PA5로 이동합니다. (PA5는 LD2가 연결된 핀)

방법 2: PA5에서 직접 선택

  • PA5 핀을 클릭하고, TIM2_CH1을 선택

  • Clock Source: Internal Clock
  • Channel1: PWM Generation CH1 선택

 

2. Clock 설정

 

"Clock Configuration" 탭으로 이동하여 HCLK(System Clock)을 8MHz로 설정합니다.

  • HCLK는 CPU와 AHB 버스 클럭을 의미하며, 타이머, UART 등 주변장치의 기본 시간 기준입니다. PWM 주기를 1초로 설정하려면, 이 기준이 8MHz여야 계산이 간단해집니다.

 

3. PWM 파라미터 설정

"Pinout & Configuration" 탭으로 돌아와 TIM2Parameter Settings로 이동해 다음과 같이 설정합니다:

  • Prescaler: 127 → 8MHz / (127+1) = 62.5kHz
  • Counter Period: 62499 → 62.5kHz / 62500 = 1Hz 주기
  • Pulse: 31250 → 듀티비 50%

 

4. 코드 작성 (main.c)

main문에 HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); 추가 후 빌드 & 디버그 합니다.

  • HAL_TIM_PWM_Start 함수는 STM32 HAL 라이브러리에서 특정 타이머와 채널에 대해 PWM(Pulse Width Modulation) 신호 출력을 시작하는 함수입니다.

 

5. 결과 확인

빌드 후 디버깅을 실행하면, LD2 LED가 1초 간격으로 깜빡이는 것을 확인할 수 있습니다. 이는 TIM2의 PWM 기능으로 제어된 결과입니다.

 

6. 마무리

이번 실습을 통해 STM32CubeIDE에서 PWM을 설정하고 동작시키는 기본 흐름을 익혔습니다. 이는 모터 제어나 로봇 자세 제어에서 핵심이 되는 기술입니다.

 

Comments