# stmf302_foc **Repository Path**: voidgod103/stmf302_foc ## Basic Information - **Project Name**: stmf302_foc - **Description**: 控制板: NUCLEO-F302R8 MCU: stm32f302r8 驱动板:X-NUCLEO-IHM07M1 驱动芯片:L6230 电机: motor, BR2804-1700kV - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-29 - **Last Updated**: 2026-06-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # STM32F302 FOC 电机控制 基于 STM32F302C8 的永磁同步电机(PMSM)无感 FOC 控制方案。 ## 硬件 - **MCU**: STM32F302C8T6(Cortex-M4, 72MHz, FPU) - **驱动芯片**: L6230 - **测试电机**: BR2804-1700kV(7 对极) - **电流采样**: 双电阻采样 + 运放 - **PWM 频率**: 20kHz - **电流环频率**: 20kHz - **速度环频率**: 1kHz ## 目录结构 ``` stmf302_foc/ ├── App/ # 应用层代码 │ ├── motor_ctrl.c/h # 电机控制状态机(对齐→开环→闭环) │ ├── bemf.c/h # 反电动势 + PLL 观测器(可选) │ ├── smo.c/h # 滑膜观测器(默认) │ ├── svpwm.c/h # SVPWM 空间矢量调制 │ ├── serial_cmd.c/h # 串口命令交互 / 状态打印 │ ├── conf.h # 参数配置(电机参数、PI参数、观测器切换) │ ├── conf.c # 变量定义 │ └── common.c/h # 公共函数(foc_forward 等) ├── Core/ # HAL 库外设初始化 ├── Drivers/ # STM32 HAL 驱动 & CMSIS ├── Middlewares/ # ARM DSP 库 ├── Makefile # GCC Makefile 编译 ├── STM32F302XX_FLASH.ld # 链接脚本 └── startup_stm32f302x8.s # 启动文件 ``` ## 控制策略 | 模式 | 说明 | |:----|:----| | `CTRL_SPEED` | 速度闭环(默认) | | `CTRL_TORQUE` | 扭矩控制 + 速度墙 8000RPM | | `CTRL_POSITION_STEPPER` | 步进磁吸定位(无观测器) | | `CTRL_POSITION_SERVO` | PD 伺服位置控制(含观测器) | ## 观测器 通过 `App/conf.h` 中 `USE_SMO_OBSERVER` 宏切换: | 值 | 观测器 | 文件 | 特点 | |:-:|:------|:----|:-----| | 0 | BEMF + PLL | `bemf.c` | 简化模型(忽略 L·di/dt),计算量小 | | 1 | SMO 滑膜观测器 | `smo.c` | 鲁棒性更强,需提供相电感 L | ## 串口命令 波特率按 CubeMX 配置,格式:`命令 <参数>\r\n` | 命令 | 参数 | 说明 | 示例 | |:----|:---|:----|:-----| | `start` | — | 启动电机(对齐→开环→闭环) | `start` | | `stop` | — | 停止电机,关闭 PWM | `stop` | | `mode <类型>` | 模式名 | 切换控制模式 | `mode torque` | | `speed ` | 目标转速 | 设置闭环转速(RPM) | `speed 2000` | | `torque ` | 目标电流 | 设置扭矩控制目标电流(0~2A) | `torque 0.5` | | `pos ` | 机械角度 | 设置位置目标(0~360° 机械角) | `pos 90` | **mode 参数**: - `speed` — 速度闭环 - `torque` — 扭矩控制 - `stepper` — 步进磁吸定位 - `servo` — PD 伺服定位 ## 编译 ```bash make # 编译 make clean # 清理 ``` 需要 `arm-none-eabi-gcc` 工具链。 ## 电机参数(conf.h) | 参数 | 值 | 说明 | |:----|:--|:-----| | POLE_PAIRS | 7 | 极对数 | | MOTOR_PHASE_RESISTANCE | 0.65Ω | 相电阻(建议实测更新) | | MOTOR_PHASE_INDUCTANCE | 18μH | 相电感(SMO 需要) | | MAX_CURRENT | 2A | 最大 q 轴电流 |