news 2026/10/23 4:08:55

FOC 平衡车固件升级完整指南:hoverboard-firmware-hack-FOC 实战拆解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FOC 平衡车固件升级完整指南:hoverboard-firmware-hack-FOC 实战拆解

FOC 平衡车固件升级完整指南:hoverboard-firmware-hack-FOC 实战拆解

【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC

hoverboard-firmware-hack-FOC是一款开源平衡车固件:它把 FOC(Field Oriented Control,场定向控制)无刷电机控制搬进平衡车原装 STM32/GD32 主控板,替代原厂换向方案。本文拆解它的能力边界、一次跑通的最小路径与参数调优实战,供打算做平衡车固件升级的读者参考。

一、一句话看懂它能做什么

这套固件针对平衡车主控板原生硬件工作:主控芯片支持 STM32F103RCT6 与 GD32F103RCT6 两种,无需更换板卡即可刷入。刷入后,电机控制策略可在三类之间切换——换向 COM_CTRL、正弦 SIN_CTRL、场定向 FOC_CTRL(默认)。相对于换向方案,FOC 的收益在项目文档中归纳为三点:

  • 电机噪音与振动降低;
  • 扭矩输出更平滑,电机效率提升,能耗相应下降;
  • 支持弱磁(Field Weakening)以扩大最高转速范围。

输入侧同样有基础:USART2/USART3 可复用为 UART、PWM、PPM、iBUS,USART2 还能作为 12bit ADC,USART3 可作 I2C。这是同一套固件底座能衍生出十余种输入变体的前提。

二、三种控制能力如何分工

2.1 FOC 的三个工作模式

FOC_CTRL之下由CTRL_MOD_REQ决定工作模式:

模式行为适配场景
VLT_MODE(电压)对电机施加恒定电压,响应快机器人等需要快速响应的应用
SPD_MODE(速度)闭环控制器跟踪输入 RPM 目标,抵抗负载扰动恒速应用
TRQ_MODE(扭矩)直接跟踪输入扭矩目标,目标为 0 时电机自由滑行有人乘坐的骑行类设备

其中 SPD_MODE 与 TRQ_MODE 仅在 FOC_CTRL 下可用,正弦模式没有这两个闭环。

2.2 各控制方式的能力对照

项目 README 给出的横向对比(评级为项目方相对评价,非实测数值):

能力换向正弦FOC 电压FOC 速度FOC 扭矩
复杂度–+++++++++
效率–+++++++++++
平滑度–++++++++
弱磁不支持支持(相位提前)支持支持支持
自由滑行不支持不支持不支持不支持支持 (1)
静止保持+++ (2)+++需开启 (2)

(1) 开启ELECTRIC_BRAKE_ENABLE后,可将自由滑行替换为恒定电制动,强度由ELECTRIC_BRAKE_MAX调节;(2) 静止保持(standstill hold)通过开启STANDSTILL_HOLD_ENABLE强制获得,仅对电压/扭矩模式有意义。

2.3 弱磁:抬高转速上限

弱磁默认关闭,在Inc/config.h中设FIELD_WEAK_ENA = 1启用。其作用方式是线性插值:输入从FIELD_WEAK_LO(默认 750)开始起效,到FIELD_WEAK_HI(默认 1000)达到最大值FIELD_WEAK_MAX(默认 5 A,config.h 注释称 10 寸轮组上测试过 10 A)。

图中三种校准形态对应FIELD_WEAK_LO/FIELD_WEAK_HI的不同取法。项目方同时给出明确警示:重新校准弱磁后电机可能转得极快,功耗显著上升,并可能触发电池保护板(BMS)的过压保护——操作前必须先固定设备、清空周围环境。

三、从选型到落地:一次跑通的最小路径

3.1 硬件与接线

需要:一块平衡车主控板(STM32F103RCT6 或 GD32F103RCT6)、ST-Link 调试器、一台电脑。通过板上的 SWD 接口(PA13/SWDIO、PA14/SWCLK)连接即可刷写,板级引脚定义见下图:

3.2 变体选择:platformio.ini 里的一次注释

输入方式由「变体」决定,构建目标在 platformio.ini 中通过取消default_envs对应行的注释来选择,共 10 种:

变体输入来源
VARIANT_ADC两个电位器(左侧传感线)
VARIANT_USART串口协议(右侧线缆 USART3,可接 Arduino)
VARIANT_NUNCHUKWii Nunchuk,单手油门/制动/转向
VARIANT_PPM遥控 PPM 和信号
VARIANT_PWM遥控 PWM 信号
VARIANT_IBUSFlysky iBUS(左侧线缆)
VARIANT_HOVERCAR油门/制动双踏板,静止时双击制动踏板倒车
VARIANT_HOVERBOARD读取两块侧板数据(需侧板同刷固件)
VARIANT_TRANSPOTTERTranspOtter 运载系统构建
VARIANT_SKATEBOARDPWM 遥控信号(右侧线缆)

若选 USART 变体做串口控制,仓库内的 Arduino/hoverserial/hoverserial.ino 是一份现成的上位机示例,可作为接入自研控制器的起点。

3.3 编译与烧录

获取源码:git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC

仓库提供三条构建路线,可按工具链习惯任选其一:

  • PlatformIO:各 env 已配好platform = ststm32、framework = stm32cube、board = genericSTM32F103RC,烧录协议为 stlink,执行pio run -t upload即完成构建加烧录;
  • MDK-ARM:工程文件 MDK-ARM/mainboard-hack.uvprojx 随仓库提供;
  • GCC + Makefile:Makefile,目标名hover。

刷写后如需查看日志,把配置里的monitor_port(默认COM5,Windows 示例)改为本地实际串口,波特率为monitor_speed指定的 115200。

3.4 参数基线

仓库附带一份已校准的电机参数(定点数格式),刷入后即可直接运行,不需要先标定;调优方式见下一节。

四、参数调优实战

参数调整集中在两个文件:

  1. Inc/config.h——控制策略层,逐项对应上文的能力:
    • CTRL_TYP_SEL:控制类型,COM_CTRL / SIN_CTRL / FOC_CTRL(默认 FOC_CTRL);
    • CTRL_MOD_REQ:控制模式,OPEN_MODE / VLT_MODE / SPD_MODE / TRQ_MODE(默认 VLT_MODE);
    • FIELD_WEAK_ENA、FIELD_WEAK_MAX、FIELD_WEAK_LO、FIELD_WEAK_HI:弱磁开关与校准区间;
    • STANDSTILL_HOLD_ENABLE:强制静止保持(电压/扭矩模式);
    • ELECTRIC_BRAKE_ENABLE/ELECTRIC_BRAKE_MAX/ELECTRIC_BRAKE_THRES:扭矩模式电制动,默认最大制动 100、起始阈值 120。
    • 各变体有各自的模式默认值:HOVERCAR 段默认 VLT_MODE(config.h 注释说明 HOVERCAR 更适合扭矩模式,选电压模式是为避免松油门时自由滑行);SKATEBOARD 段默认 TRQ_MODE。
  2. Src/BLDC_controller_data.c——电机参数层: 该文件由 Simulink 控制器模型生成,参数以定点数存放(文件开头即是正弦/余弦查表数据)。README 建议用 Fixed-Point Viewer 工具换算定点参数。调参对应的是电机真实物理量,下图是一份 FOC 参数检测结果的参照样例:

图中检测结果显示:14 对极、绕组电阻 380.60 mΩ、电感 292.36 μH、磁通 1.00 mWb——校准 BLDC_controller_data.c 时可以此为量级对照。

调参顺序建议:先确认模式与用途匹配(骑行类选扭矩模式,恒速选速度模式);确有必要提高最高转速时,小步上调FIELD_WEAK_MAX并同步关注功耗与温度;最后再按实机电机微调 BLDC_controller_data.c 中的电机参数。

五、哪些设备都能受益

变体体系本质是「同一 FOC 电机底座 + 任意输入源」的组合,README 与衍生项目覆盖的设备形态包括:

  • 踏板 Hovercar:油门/制动双踏板,静止时双击制动踏板倒车(VARIANT_HOVERCAR);
  • 电动滑板:PWM 遥控信号接入(VARIANT_SKATEBOARD);
  • 运载小车:TranspOtter 类平衡车底盘运输系统(VARIANT_TRANSPOTTER);
  • 机器人:电压模式快响应适合伺服类任务,速度模式适合恒速输送;
  • 座椅类车辆:Wii Nunchuk 单手操作,是最早用于电动座椅/轮椅类构建的输入方式(VARIANT_NUNCHUK);
  • 遥控类设备:PPM / PWM / iBUS 遥控直接兼容常见遥控器材。

六、先避坑再上路

刷写与调参过程中的高频问题,按出现频率排列:

  1. MCU 未解锁:主控 SWD 被锁定时 ST-Link 无法直接烧录,需先完成解锁。仓库内置了分步操作截图(docs/pictures/wiki_unlock/目录):

  1. VARIANT_HOVERBOARD 的平衡控制尚未实现:该变体读取两块侧板数据,且侧板必须同样刷入 hacked 版本固件;主控板必须是整板方案,不支持 splitboard。若目标是「可站立骑行的平衡车」,当前版本不建议以此为终点。
  2. 5V 耐压在两侧线缆上不对称:左侧线缆(USART2)不耐 5V,右侧线缆(USART3)耐 5V。外接信号源前先确认电平标准,左侧接 5V 信号有损坏风险。
  3. 弱磁的安全边界:电机转速可能远超预期,功耗明显上升,可能触发 BMS 过压保护;重新校准弱磁必须做好物理防护。
  4. 串口配置:monitor_port默认值是COM5,非 Windows 系统下需改成对应端口,否则看不到任何日志。

若刷入后设备无响应,建议按此顺序排查:供电与 ST-Link 连接 → 变体与模式是否和实际接线一致 → 串口(115200)是否有日志输出 → 查阅项目 wiki 的 Getting Started 与 Troubleshooting 章节。


小结:hoverboard-firmware-hack-FOC的价值,是把一套完整的 FOC 无刷电机控制栈(含电压/速度/扭矩三模式与弱磁)落在量产平衡车的主控板上,并用变体机制覆盖了从电位器到遥控器的输入需求;代价是相对陡峭的调参门槛——定点参数、非对称 5V 耐压、MCU 解锁都需要逐一处理。项目以 GPLv3 协议开源,社区讨论主要在 Matrix 群组进行,ROS 驱动、Web 串口控制、Android 遥控等衍生项目也都建立在这一固件底座上。

【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 4:08:54

Slither 与 Manticore 从零到报告:智能合约测试覆盖率避坑记

Slither 与 Manticore 从零到报告:智能合约测试覆盖率避坑记 【免费下载链接】publications Publications from Trail of Bits 项目地址: https://gitcode.com/GitHub_Trending/pu/publications 2016 年 The DAO 被一个重入漏洞掏空,事后复盘发现…

作者头像 李华
网站建设 2026/10/23 4:07:56

YimMenuV2:GTA 5增强版修改菜单,5步从零跑起来

YimMenuV2:GTA 5增强版修改菜单,5步从零跑起来 【免费下载链接】YimMenuV2 Experimental menu for GTA 5: Enhanced 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenuV2 GTA 5增强版默认启用 BattlEye 反作弊,多数旧菜单无法…

作者头像 李华
网站建设 2026/10/23 4:07:22

从一条命令到四类求解器:HiGHS 优化求解器的落地路径

从一条命令到四类求解器:HiGHS 优化求解器的落地路径 【免费下载链接】HiGHS Linear optimization software 项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS HiGHS 是一款面向大规模稀疏模型的高性能优化求解器,MIT 协议开源&#xff0…

作者头像 李华
网站建设 2026/10/23 4:06:37

【日拱一卒,三省吾身】2024.12.14随想

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华