Skip to content

fanfan142/FOC-on-STM32F103-DengFOC-AS5600

Repository files navigation

STM32F103 FOC 电机控制项目(DengFOC + AS5600)

本项目基于 STM32F103C8T6 微控制器,结合 DengFOC 驱动板(M0 通道)AS5600 磁编码器(I²C 接口)2208 无刷电机 实现完整的 FOC(Field Oriented Control) 电机控制。 适合学习、调试与算法验证使用。


📘 目录


🧭 项目概述

本项目实现了一套完整的三相无刷电机 FOC 控制流程,包含开环速度、闭环电流、闭环位置与闭环速度控制。 系统由 STM32F103C8T6 主控驱动 DengFOC 模块,使用 AS5600 磁编码器 作为位置反馈。

主要功能包括:

  • 基于 HAL 的外设初始化(PWM、ADC、I²C、USART、DMA、TIM)
  • 控制算法(Clarke、Park、PI 调节、SVPWM)
  • 串口命令交互与实时调参
  • 过流保护与电角校准机制
  • 支持 VOFA+ 波形输出

⚙️ 硬件组成

模块 型号/说明
MCU STM32F103C8T6(Blue Pill)
驱动板 DengFOC M0
电机 无刷电机 2208,7 对极
编码器 AS5600 磁编码器(I²C 接口)
电源 外部 12V
电流采样 双通道(O1_CS、O2_CS)
通信接口 USART1 与上位机交互(文本/VOFA+)

🔌 引脚与接线说明

引脚 功能 说明
PA8 电机使能(Motor_EN) 上电后拉高以启用驱动
TIM2_CH1/CH2/CH3 PWM 输出 三相驱动输出(A/B/C)
PB10 (SCL), PB11 (SDA) I²C2 AS5600 编码器通信
PB0, PB1 ADC1_IN8/IN9 电流采样输入
PA9, PA10 USART1 TX/RX 串口通信

⚠️ 确保 CubeMX 中的引脚配置与此表一致。


🧰 主要功能

  • ✅ 支持 4 种控制模式
  • 🧭 零电角自动校准
  • 🧮 实时 FOC 算法
  • 🧾 串口命令行调参系统
  • 📉 VOFA+ JustFloat 实时波形输出
  • 过流保护与电压限幅
  • 🔄 I²C 总线自动恢复
  • 🔧 运行时可在线修改 PID 参数与模式

🔄 控制模式

命令 模式 说明
c1 开环速度模式 目标速度 → 电角积分,输出固定电压
c2 电流闭环模式 dq 双 PI 控制电流
c3 位置闭环模式 目标角度 → PID 输出电压
c4 速度闭环模式 目标速度 → PID 输出电压

🕹️ 基本控制

以下为项目支持的基础串口控制命令。 所有命令均以 字母+参数 的形式输入,命令之间可以空格分隔, 以 回车(\n) 结束发送。

🔧 模式与目标值设定

命令 说明 示例
c1 切换为 开环速度模式 c1
c2 切换为 电流闭环模式 c2
c3 切换为 位置闭环模式 c3
c4 切换为 速度闭环模式 c4
t<值> 设置目标值(不同模式下含义不同) t5.0

⚙️ 位置环 PID 参数

命令 含义 示例
p<值> 设置 Kp p5.0
i<值> 设置 Ki i200
d<值> 设置 Kd d0.1

⚡ 电流环 dq 轴 PI 参数

命令 含义 示例
qr<值> 设置 q 轴 Kp qr2.0
qi<值> 设置 q 轴 Ki qi150
dr<值> 设置 d 轴 Kp dr1.5
di<值> 设置 d 轴 Ki di150
q<值> 设置 Iq_ref(电流目标) q0.5

🔄 速度环 PID 参数

命令 含义 示例
sp<值> 设置速度环 Kp sp0.3
si<值> 设置速度环 Ki si5
sd<值> 设置速度环 Kd sd0

🧭 极性与角度偏置

命令 含义 示例
y1 交换 A/B 相输入 y1
v1 翻转 q 轴方向 v1
w<角度> 设置 电角偏置角度(°) w90

🧰 校准与输出控制

命令 说明 示例
a 对齐 零电角 a
z 执行 电流偏置校准 z
u0 串口输出为 文本模式 u0
u1 串口输出为 VOFA+ 模式 u1

📤 命令返回格式

每次执行命令后,系统会通过串口返回一条确认信息:

ACK: mode=<当前模式>, Tgt=<目标值>

示例:

ACK: mode=3, Tgt=1.57

表示系统当前处于 模式 3(位置闭环),目标值为 1.57 rad

💡 命令输入提示

  • 命令区分大小写,建议使用小写;

  • 支持一次输入多个命令:

    p5 i200 d0.1
    
  • c3 模式下自动锁定当前位置为目标;

  • az 命令执行时请保持电机静止;

  • u1 模式用于实时波形输出(VOFA+ 软件)。


🕒 控制时序与任务分配

任务 频率 说明
control_step() 10 kHz(TIM4中断) 主控制算法
主循环 1 kHz 更新角度与速度
串口输出 20~100 Hz 打印状态或VOFA数据

⚡ 电流采样与保护机制

  • 使用 ADC1+DMA 采样两相电流;

  • 转换公式:

    电流(A) = (ADC * 3.3 / 4095 - offset) / (R_shunt * AMP_gain)
    
  • 默认参数:R_shunt = 0.01Ω, AMP_gain = 50

  • 命令 z 自动校准电流零偏;

  • 超过 2A 触发过流保护并锁存。


📏 角度与速度测量

  • 读取 AS5600 寄存器 0x0E/0x0F

  • 12-bit 精度(0~4095) → 弧度;

  • 连续读取判断稳定;

  • 解缠绕算法保持机械角连续;

  • 电角计算:

    电角 = norm2pi(机械角 * 极对数 * Dir - 零电角)
    
  • 速度滤波:

    vel = α * raw + (1-α) * last_vel (α=0.15)
    

📡 VOFA+ 数据输出

命令:u1 开启 VOFA+ 输出模式。

通道 含义
CH0 目标值
CH1 机械角(rad)
CH2 机械速度(rad/s)
CH3 电角(rad)
CH4~5 相电流
CH6~7 Id/Iq
CH8~10 Ud/Uq/电压幅值
CH11 饱和标志
CH12 过流标志
CH13 模式编号

帧尾:00 00 80 7F


🚀 快速上手

  1. 上电并连接串口;
  2. 发送 z 校准电流偏置;
  3. 执行 a 对齐零电角;
  4. 开环测试:c1t5
  5. 位置闭环:c3t1.57
  6. 速度闭环:c4t10
  7. u1 开启 VOFA+ 输出查看波形。

⚙️ 调参建议

  • 电流环:先调 q 轴,保持 d=0;
  • 位置环:从 Kp 开始,小幅调整 Ki;
  • 速度环:调节滤波系数 α 和 Kd 抑制震荡;
  • 注意观察 sat_flagfault_latched 状态。

📄 开源协议

推荐使用 MIT License:

MIT License
Copyright (c) 2025 <Your Name>
Permission is hereby granted, free of charge, to any person obtaining a copy...

🙌 致谢

  • ST HAL 库
  • AS5600 官方文档
  • DengFOC 社区资源
  • VOFA+ 调试工具

About

stm32无刷电机控制

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages