Skip to content

Hanyangsaja/bldc_6-step_f401

Repository files navigation

bldc_6-step_f401 — STM32F401 6-Step 센서리스 BLDC 모터 제어

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) 폴트 표시

빌드 및 플래시

  1. STM32CubeIDE 에서 File → Open Projects from File System... 으로 본 디렉토리 import
  2. 좌측 Project Explorer 에서 bldc_6-step_f401 우클릭 → Build Project
  3. 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 버튼으로 모터를 기동한 뒤 일정 속도로 회전하는 테스트 영상

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 속도 필터 깊이

알려진 이슈 / TODO

  • 6Step_Lib.c::MC_Speed_Filter 들여쓰기 워닝 (-Wmisleading-indentation) — 동작 정상, ST 원본 코드라 보존 중
  • 모터 파라미터 자동 식별 (motor profiling) 미구현
  • 폴트 처리 확장 (overcurrent / overtemp 시 동작)
  • 다양한 모터 사양 (폴페어, 정격 속도) 에 대한 검증 매트릭스 정리

개발자

안의찬 (Ahn Euichan)


참고 자료


라이선스

본 저장소에는 출처가 다른 코드가 함께 들어있으며, 각 출처의 라이선스를 따릅니다.

영역 출처 라이선스
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 파일을 참조하세요.

About

STM32F401 (NUCLEO-F401RE) 와 X-NUCLEO-IHM07M1 쉴드를 이용한 6-Step BEMF 센서리스 BLDC 모터 제어. ST 예제를 최신 STM32CubeIDE / CubeMX 6.17 에 맞춰 포팅.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages