Maintainer: Ahn Euichan Last updated: 2026-05-15
STMicroelectronics 의 X-NUCLEO-IHM07M1 6-Step BLDC 예제를 최신 STM32CubeIDE / CubeMX 환경에 맞춰 포팅하고, 실제 모터 구동을 검증하기 위한 프로젝트입니다.
원본 예제는 STM32CubeMX 구버전 (단일
main_F401.c) 기반이라 현재 도구체인에서 그대로 빌드되지 않습니다. 본 저장소는 CubeMX 6.17 이 생성하는 모듈식 구조 (adc.c,tim.c,usart.c,gpio.c분리) 위에서 동일 동작을 재현합니다.
| 항목 | 사양 |
|---|---|
| MCU 보드 | NUCLEO-F401RE (STM32F401RET6, Cortex-M4F @ 84 MHz) |
| 모터 드라이버 쉴드 | X-NUCLEO-IHM07M1 (L6230 3상 하프브리지 게이트 드라이버) |
| 모터 | 3상 BLDC 모터 (기본 파라미터: 7 폴페어) |
| 통신 | ST-LINK 가상 COM 포트 (USART2, 115200 baud) |
| 도구 | 버전 |
|---|---|
| STM32CubeIDE | 1.20.x 이상 (GCC arm-none-eabi 14.3 포함) |
| STM32CubeMX | 6.17.0 |
| STM32Cube FW_F4 | V1.28.3 |
- ✅ 6-Step 센서리스 BLDC 제어 — BEMF 제로크로싱 검출 기반
- ✅ PWM 생성 — TIM1 (3상 complementary, 84 MHz 베이스)
- ✅ ADC 동기 샘플링 — TIM1 트리거로 BEMF / 모터 전류 / 버스 전압 / 온도 측정
- ✅ 속도 피드백 필터링 —
MC_Speed_Filter()이동평균 - ✅ 개루프 → 폐루프 전환 — 시동 후 자동 폐루프 진입
- ✅ 사용자 버튼 시동/정지 — Nucleo B1 (PC13) EXTI
- ✅ UART CLI — ST-LINK VCP 통한 시리얼 명령 인터페이스
STARTM모터 시동STOPMT모터 정지HELP메뉴 표시INIREF시동 전류 레퍼런스 설정 (0–4095)
- ✅ 상태 LED — LD2 (PA5) 동작 표시, RED_LED (PB2) 폴트 표시
- STM32CubeIDE 에서 File → Open Projects from File System... 으로 본 디렉토리 import
- 좌측 Project Explorer 에서
bldc_6-step_f401우클릭 → Build Project - NUCLEO 보드를 USB 로 연결 → Run As → STM32 C/C++ Application
빌드 시
Middlewares폴더가 Source Location 에 포함되어 있어야 합니다. 누락 시MC_TIMx_SixStep_timebase등 undefined reference 가 발생합니다 (Project Properties → C/C++ General → Paths and Symbols → Source Location → Add Folder).
bldc_6-step_f401/
├── Core/
│ ├── Inc/ # CubeMX 생성 헤더 (peripheral handles, pin defines)
│ ├── Src/ # CubeMX 생성 소스 (main.c, adc.c, tim.c, usart.c, gpio.c, ...)
│ └── Startup/ # 부팅 어셈블리
├── Drivers/
│ ├── BSP/
│ │ ├── Components/l6230/ # L6230 게이트 드라이버 인터페이스
│ │ ├── STM32F4xx-Nucleo/ # Nucleo + IHM07M1 보드 어댑터 (HAL 콜백 디스패처)
│ │ └── X-NUCLEO-IHM07M1/ # 쉴드 핀 매핑
│ ├── CMSIS/ # ARM Cortex-M 코어 헤더
│ └── STM32F4xx_HAL_Driver/ # ST HAL
├── Middlewares/ST/
│ ├── MC_6Step_Lib/ # ★ 6-Step 알고리즘 본체
│ │ ├── Inc/MC_SixStep_param.h # ★ 모터/제어 파라미터 (튜닝 시 손대는 곳)
│ │ ├── Inc/6Step_Lib.h
│ │ └── Src/6Step_Lib.c
│ └── UART_serial_com/ # UART CLI (UART_UI.c)
├── STM32F401RETX_FLASH.ld # 링커 스크립트
└── bldc_6-step_f401.ioc # CubeMX 프로젝트 설정
| 테스트 날짜 | 테스트 내용 | 결과 |
|---|---|---|
| 2026-05-15 | B1 버튼 입력으로 6-Step 라이브러리 초기화 이후 모터 출력 활성화, 고정 속도 구동 상태 확인 | 모터 회전 확인. 6-step commutation 특성상 저속/기동 구간에서 회전이 완전히 부드럽지는 않음 |
B1 버튼으로 모터를 기동한 뒤 일정 속도로 회전하는 동작 확인
본 프로젝트는 인터럽트 기반 으로 동작하며, main() 의 while(1) 루프는 거의 비어 있습니다. 실제 제어는 다음 콜백 체인에서 이루어집니다.
TIM4 Update IRQ ─→ HAL_TIM_PeriodElapsedCallback
└─→ MC_TIMx_SixStep_timebase() # 상태기계, commutation 진행
ADC1 EOC IRQ ─→ HAL_ADC_ConvCpltCallback
└─→ MC_ADCx_SixStep_Bemf() # BEMF 제로크로싱 검출
EXTI13 (B1) ─→ HAL_GPIO_EXTI_Callback
└─→ MC_EXT_button_SixStep() # 시동/정지 토글
콜백 어댑터: Drivers/BSP/STM32F4xx-Nucleo/stm32F401_nucleo_ihm07m1.c 알고리즘 본체: Middlewares/ST/MC_6Step_Lib/Src/6Step_Lib.c
다른 모터를 사용하거나 동작 조건을 변경하려면 Middlewares/ST/MC_6Step_Lib/Inc/MC_SixStep_param.h 의 매크로를 수정하십시오. 주요 항목:
| 매크로 | 기본값 | 설명 |
|---|---|---|
NUM_POLE_PAIRS |
7 | 모터 폴페어 수 |
TARGET_SPEED |
3000 | 폐루프 목표 속도 (RPM) |
ACCEL |
— | 가속률 |
STARTUP_CURRENT_REFERENCE |
— | 시동 전류 레퍼런스 (DAC) |
BEMF_THRSLD_DOWN / _UP |
— | BEMF 필터링 임계 |
FILTER_DEEP |
— | 속도 필터 깊이 |
-
6Step_Lib.c::MC_Speed_Filter들여쓰기 워닝 (-Wmisleading-indentation) — 동작 정상, ST 원본 코드라 보존 중 - 모터 파라미터 자동 식별 (motor profiling) 미구현
- 폴트 처리 확장 (overcurrent / overtemp 시 동작)
- 다양한 모터 사양 (폴페어, 정격 속도) 에 대한 검증 매트릭스 정리
안의찬 (Ahn Euichan)
- UM2152 — Getting started with X-NUCLEO-IHM07M1
- AN4220 — STM32 6-step BLDC sensorless
- X-CUBE-SPN7 expansion software
본 저장소에는 출처가 다른 코드가 함께 들어있으며, 각 출처의 라이선스를 따릅니다.
| 영역 | 출처 | 라이선스 |
|---|---|---|
Drivers/STM32F4xx_HAL_Driver/ |
ST HAL | BSD-3-Clause (LICENSE.txt 참조) |
Drivers/CMSIS/ |
ARM + ST | Apache-2.0 (ARM) / BSD-3-Clause (ST) |
Drivers/BSP/ |
ST X-CUBE-SPN7 | BSD-3-Clause 와 동등한 ST 3-clause 라이선스 (각 파일 헤더 참조) |
Middlewares/ST/MC_6Step_Lib/ |
ST X-CUBE-SPN7 | BSD-3-Clause 와 동등한 ST 3-clause 라이선스 |
Middlewares/ST/UART_serial_com/ |
ST X-CUBE-SPN7 | BSD-3-Clause 와 동등한 ST 3-clause 라이선스 |
Core/ (CubeMX 생성분) |
ST CubeMX | BSD-3-Clause |
| 본 프로젝트 포팅 변경분 / 신규 파일 | © 2026 Ahn Euichan | BSD-3-Clause (LICENSE) |
ST 가 배포한 코드의 라이선스 조건은 각 파일 상단 헤더에 명시되어 있으며, 재배포 시 저작권 표시 보존 / 이름·상표 명시적 사용 금지 등의 조항을 준수해야 합니다. 자세한 내용은 Drivers/STM32F4xx_HAL_Driver/LICENSE.txt 와 각 소스 파일 헤더를 확인하세요.
본 프로젝트의 포팅 변경분 및 신규 파일에 대한 BSD-3-Clause 라이선스 전문은 루트의 LICENSE 파일을 참조하세요.
