平衡车为什么高速会啸叫?FOC固件 hoverboard-firmware-hack-FOC 完整解析
【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
你有没有遇到过这种情况:平衡车一蹬出去就嗡嗡作响,提速后噪音还一阵一阵地跳。这是梯形换相"一次倒相 60 度"驱动的固有结果。hoverboard-firmware-hack-FOC 是一套写给原厂主板的 FOC 固件,用场定向控制(Field Oriented Control)连续地控制无刷电机的相电流,平衡车改装不需要换任何硬件就能完成。
这是标准 8 寸平衡车拆出来的轮毂电机:外圈铜线是定子绕组,中间的 PCB 是提供角度信息的霍尔传感器板。FOC 固件不改动电机和主板的任何硬件,只改变相电流的驱动方式。
原厂的嗡嗡声从哪来
原厂固件走的是梯形换相:根据霍尔信号在 6 个固定导通状态里选一个,被选中的两相直接灌满电压,相电流接近方波。方波电流和旋转磁场对不齐,转矩被周期性地拉扯,这就是低速嗡声、高速啸叫的来源,也是顿挫感的物理原因。
换成 FOC 之后,电流相位平滑地跟踪转子,转矩不再一跳一跳。项目自带的对比表(README 中的 comparison table)里,梯形换相在效率和平顺度两栏都是最低档,且没有 field weakening 能力;FOC 各项基本拉满。这不是主观评价,是控制结构决定的:方波驱动本身就有转矩脉动,而连续电流矢量没有。
16 kHz 电流环在做什么
FOC 的数据流可以一句话概括:输入 = 电流采样 + 霍尔角度 → 处理 = 坐标变换 + 双轴 PI 电流环 → 输出 = 三相 PWM 占空比。
- 输入:DMA 中断按 16 kHz 节拍触发,每次采两相相电流和直流母线电流,同时读 3 路霍尔信号,见
Src/bldc.c。 - 处理:调用
BLDC_controller_step(Simulink 生成的控制器代码),先做 Clarke 变换,再 Park 变换把电流拆到转子坐标系的 Id/Iq 两轴,两个 PI 电流调节器各出一路电压指令,限幅后反变换回三相。 - 输出:三个占空比直接写入定时器比较寄存器(
LEFT_TIM_U/V/W),下一 PWM 周期桥臂立刻执行。
这张图把平衡车电机的结构摊开了看:27 槽 30 极、三相绕组星形连接,Hall A/B/C 相隔 120 度排布。固件里所有坐标变换的起点,就是这几路霍尔信号给出的转子角度。
三种控制模式怎么选
你得到:电机特性可以按使用场景切换——要恒定巡航就锁转速,要直接动力感就下扭矩指令,要快速响应就开电压模式,全程不换硬件。
靠什么实现:config.h里的CTRL_MOD_REQ一个参数切换,前提是CTRL_TYP_SEL设为 FOC:
VLT_MODE(电压模式):直接给电压指令,响应最快,适合机器人等需要快速启停的应用;SPD_MODE(速度模式):闭环锁定目标 RPM,坡道等阻力扰动会被控制器自动补偿,适合恒速巡航;TRQ_MODE(扭矩模式):直接给扭矩指令,目标为 0 时电机自由滑行,适合有人骑乘、松手即减速的场景。
注意:SPEED 和 TORQUE 两种模式是 FOC 独有,梯形换相和正弦控制都没有。
自带的保护机制有哪些
你得到:参数调得激进也不会炸管,过流和超速有两层兜底,电池和板温也有底线。
靠什么实现:
- 第一层:
I_MOT_MAX(默认 15 A)在控制器内部限制电机相电流,N_MOT_MAX(默认 1000 rpm)限制最高转速; - 第二层:直流母线电流超过
I_DC_MAX时直接关闭 PWM 输出(current chopping),物理上断流; - 其余:电池欠压逐级报警直至关断(
BAT_DEAD)、板载过温保护(需先校准传感器)、输入信号超时 20 个错误周期即紧急停机。
用 field weakening 拉高极速
你得到:不换电机、不换驱动板,把极速上限往上顶一截。
靠什么实现:电机转速升高时反电动势吃掉了大部分母线电压,电压不够用。开启FIELD_WEAK_ENA后,当输入目标超过FIELD_WEAK_LO,固件在 d 轴注入去磁电流,随输入线性增大到FIELD_WEAK_HI处达到FIELD_WEAK_MAX(默认 5 A,10 寸轮实测到 10 A),压低反电动势、腾出电压裕量。
三条曲线对应不同的 Lo/Hi 标定:左边从低输入就开始削弱(最激进),右边接近满输入才启用(最保守)。
注意:项目方明确警告,重新标定 field weakening 时电机可能转得极快,功耗大幅上升,可能触发电池 BMS 的过压保护。务必有人看管、低速环境里做。
平衡车改装上手三步:刷 FOC 固件
准备什么
- 一块标准平衡车主板:STM32F103RCT6 或兼容的 GD32F103RCT6,两种都支持;
- 一个 ST-Link(项目 PlatformIO 配置里
upload_protocol就是stlink),或者直接用仓库自带的 Keil 工程(MDK-ARM 目录)。
这是原厂主板的引脚图:右侧标有 SWD 刷写口(SWCLK/SWIO,只允许 3.3 V),电机相电流采样、霍尔接口也都有标注,改线时可以直接对照。
怎么刷
- 获取源码:
git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC - 选输入 variant:在 platformio.ini 中放开对应
[env:...](电位器 ADC、串口 USART、遥控器 PPM/PWM/iBUS、踏板 HOVERCAR 等),Keil 用户则在 Target 下拉框里选; pio run -t upload写入,上电后电机即按默认配置以 FOC 电压模式运行。
怎么调
- 编译期:改 Inc/config.h 里的
CTRL_TYP_SEL(默认已是 FOC)、CTRL_MOD_REQ、I_MOT_MAX、N_MOT_MAX、FIELD_WEAK_ENA; - 运行期:接串口协议可在线读改参数,Src/comms.c 里有完整的参数表(I_MOT_MAX、N_MOT_MAX、CTRL_MOD 等)。建议先用串口终端把参数验证到合理,再固化进 config.h 重新编译。
适合谁,不适合谁
这是一套少数能直接刷进原厂平衡车主板、控制环完整、保护齐备、参数支持运行期在线读写的 FOC 固件,适合做 hovercar、电动滑板、TranspOtter 这类平衡车改装项目,也适合想低成本摸一遍无刷电机闭环控制的人。不适合两类人:想"刷完直接当普通平衡车骑"的人——VARIANT_HOVERBOARDvariant 的平衡控制环目前尚未实现;以及不愿意自己刷机和调参的人。
【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考