Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 아두이노 구조
- 아두이노 레퍼런스
- PLA
- 3D프린터
- Arduino
- 아두이노 소프트웨어
- ender3
- 아두이노 문법
- 3D 프린트
- Arduino IDE
- ENDER-3
- 3D 프린터
- 3d printer
- printer
- 필라멘트
- 임베디드시스템
- 3d print
- STM32
- 임베디드개발
- 3d
- 아두이노 IDE
- 엔더3
- reference
- 엔더
- 3D프린트
- 아두이노
- STM32CubeIDE
- nucleo-f446re
- Arduino Reference
Archives
- Today
- Total
키위백과의 잡동사니
STM32CubeIDE 예제: TIM2을 이용한 PWM으로 LD2 LED 깜빡이기 본문
리밸런싱 로봇을 만들기 위해 익혀야 할 개념은 모터 제어이며, 그 핵심이 바로 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" 탭으로 돌아와 TIM2의 Parameter 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을 설정하고 동작시키는 기본 흐름을 익혔습니다. 이는 모터 제어나 로봇 자세 제어에서 핵심이 되는 기술입니다.
'프로젝트 > 밸런싱 로봇' 카테고리의 다른 글
리밸런싱 로봇 프로젝트 잠시 중단 안내 (0) | 2025.07.25 |
---|---|
HAL vs LL - 무엇이 다를까? (0) | 2025.07.22 |
PWM이란? (0) | 2025.07.20 |
STM32CubeIDE 예제: 외부 인터럽트(External Interrupt) (0) | 2025.07.19 |
인터럽트(Interrupt)란? - 사고가 났을 때 에어백이 펴지는 이유 (0) | 2025.07.19 |
Comments