# BLDC-FOC-Reference-Solution **Repository Path**: tom-embedded/embedded-bldc-foc-note ## Basic Information - **Project Name**: BLDC-FOC-Reference-Solution - **Description**: 无刷电机驱动应用解决方案 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2026-09-16 - **Last Updated**: 2026-09-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 嵌入式无刷电机驱动与FOC控制学习项目 本项目是一个专注于无刷直流电机(BLDC)驱动与永磁同步电机(PMSM)磁场定向控制(FOC)的开源代码仓库。项目收集并实现了基于不同主流MCU平台(STM32、GD32、APM32、CW32)的电机控制例程,旨在帮助开发者学习从底层驱动到复杂电机控制算法的完整流程。 ## 项目特点 1. **多平台支持**:涵盖了ARM Cortex-M0+(如CW32F030, APM32F035)和Cortex-M4(如STM32F407, GD32F407)架构的代码实现。 2. **双重控制策略**: * **BLDC (六步换相)**:基于霍尔传感器(Hall Sensor)的梯形波控制方案,实现简单,适用于成本敏感型应用。 * **FOC (磁场定向控制)**:基于SVPWM(空间矢量脉宽调制)和Clark/Park变换的正弦波控制方案,提供低噪音、高效率和平滑的动态响应。部分代码利用了APM32的M0CP数学协处理器进行高速运算。 3. **模块化设计**: * **驱动层 (BSP/Driver)**:封装了定时器PWM输出、ADC电流采样、霍尔信号读取、通信接口(UART/CAN)等底层硬件操作。 * **算法层**:包含PID速度/电流调节、斜坡处理、滤波器设计等核心电机控制算法。 * **应用层**:实现了状态机控制(Fault/Init/Stop/Run),确保系统运行的稳定性和安全性。 ## 代码目录结构 项目代码位于 `bldc-foc-code` 目录下,包含以下独立子项目: ### 1. APM32 系列 * **`apm32f035_hall_bldc`**:基于 **APM32F035** (Cortex-M0+) 的BLDC电机驱动实现。使用了Geehy官方库,包含完整的Hall接口驱动、PWM控制及电机状态管理。 * **`apm32f035_hall_foc`**:基于 **APM32F035** 的FOC电机驱动实现。集成了Geehy MCLIB库,利用内置的M0CP协处理器高效执行三角函数和开方运算(用于Park/Clark变换及SVPWM)。 ### 2. STM32 系列 * **`atk-stm32-hall-bldc`**:基于 **STM32F407** (Cortex-M4) 的BLDC电机驱动。使用STM32 HAL库,配套LCD显示和按键交互,适合作为通用学习模板。 ### 3. CW32 系列 * **`cw32f030_hall_bldc`**:基于 **CW32F030** (Cortex-M0+) 的无感/有感BLDC驱动。包含OLED屏幕显示驱动和电机控制核心逻辑。 ### 4. GD32 系列 * **`gd32f407-bldc-hall`**:基于 **GD32F407** (Cortex-M4) 的BLDC电机驱动。提供了标准的固件库(STD)实现,包含H桥驱动逻辑、霍尔传感器读取及定时器配置。 ## 核心功能模块 * **电机驱动 (Motor Drive)**: * `MotorDrive` / `Motor_Start` / `Motor_Stop`:核心电机控制函数。 * `Commutation`:六步换向逻辑。 * `current_ctrl`:FOC中的电流闭环控制。 * **信号处理 (Signal Processing)**: * `HALL_ReadHallPorts`:读取霍尔传感器状态。 * `MovingAvgCal`:滑动平均滤波,用于平滑速度反馈。 * `Math_I32FilterTime`:低通滤波器。 * **控制算法**: * `PID_Adjust`:增量式/位置式PID控制器。 * `ramp_s16`:斜坡函数,用于平滑加减速。 * `sin_cos_cal`:正余弦计算。 * **通信与外设**: * `drv_uart.c`:支持RS485/UART通信。 * `drv_can.c`:CAN总线通信支持。 * `drv_wdt.c`:独立看门狗,防止程序跑飞。 ## 使用说明 1. **硬件准备**:根据子项目名称,准备对应的开发板和功率驱动板(如DRV8313、IR2104等H桥方案)。 2. **软件开发环境**: * **Keil MDK-ARM**:适用于大部分STM32、GD32、APM32项目。 * **IAR Embedded Workbench**:APM32项目通常提供IAR工程。 3. **编译与烧录**: * 打开对应文件夹下的工程文件(如 `*.uvprojx` 或 `*.eww`)。 * 配置好J-Link或DAP-Link等调试器。 * 编译并烧录代码到MCU。 4. **配置参数**:在 `parameter.h` 或 `main.c` 中根据实际电机参数(极对数、额定电压、霍尔相位等)调整配置。 ## 参考资料 本项目参考了以下优秀的开源资源与文档: * **野火电机应用开发实战指南**:[文档链接](https://doc.embedfire.com/motor/motor_tutorial/zh/latest/index.html) * **STM32MotorControl 开发实战指南**:ST Wiki [STM32MotorControl](https://wiki.st.com/stm32mcu/wiki/STM32MotorControl:Introduction_to_Motor_Control_with_STM32) ## 许可证 本项目中的代码遵循开源协议,具体协议请参考各子项目中的 `LICENSE` 文件或项目归属方的说明。