首页 / 资讯中心 / 文章详情

平衡车FOC固件改造指南:用场定向控制让普通平衡车变安静、变平顺

平衡车FOC固件改造指南:用场定向控制让普通平衡车变安静、变平顺 ★ FEATURED ARTICLE
平衡车FOC固件改造指南用场定向控制让普通平衡车变安静、变平顺【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC推下油门两个轮子安静地转起来松手之后车轮平顺地滑行到停。没有电钻般的尖啸没有让人手麻的震动满载加速时电机也不容易失速——这是把 hoverboard-firmware-hack-FOC 刷进一台普通平衡车主板之后的状态。这个开源固件以下简称 FOC 固件把原厂固件里的六步换向一种轮流给三相绕组通电、推一下停一下的粗暴控制方式替换成了场定向控制FOCField Oriented Control它实时计算转子位置把三相电流分解成产生转矩和建立磁场两个分量分别控制让电机始终工作在效率最高的角度上。副作用是好处噪音大幅下降、扭矩输出平滑、能耗更低还额外提供了**场削弱Field Weakening**能力来突破原厂的转速上限。先看你的平衡车是否适合这套 FOC 固件适合的人群手里有闲置平衡车主板想单轮驱动、做机器人底盘、电动滑板、卡丁车或者单纯想学习 FOC 完整工程从 ADC 采样、FOC 环路到串口协议都齐的人。固件同时支持最常见的 STM32F103RCT6 和 GD32F103RCT6 两款主控datasheet 都放在 docs/literature/ 目录里备查。可以先跳过的人**分体式主板splitboards**的平衡车——那种把功率器件拆到独立板卡的新款主板引脚定义不同对应的是另一个固件分支别刷这套必须保留两轮自平衡功能的人——VARIANT_HOVERBOARD变体的平衡控制环路尚未实现刷了之后它不能像原厂那样站立骑行完全不能焊接、不会接调试线的人。这个改造虽然不复杂但离不开基本的手工能力。平衡车FOC固件刷机准备硬件、工具链与接线动手前把东西凑齐物品用途ST-Link V2 编程器通过 SWD 接口烧录固件二三十元USB 转串口模块3.3V调试串口观察电机状态万用表接线前核对电压防短路电烙铁焊接 SWD 与调试引线可以飞线主板上的关键接点对照官方引脚图看SWD 编程口PA14SWCLK、PA13SWDIO、GND供电用3.3V板上标注 30mA 上限不要直接喂 5V两条侧板排线左、右 4 针引出 GND、12/15V 和 USART2/USART3。左线对应 USART2长排线右线对应 USART3短排线。接线时先断电万用表确认后再上电。主板原理图有社区逆向的版本可参考 docs/20150722_hoverboard_sch.pdf。构建与变体选择三种方式编译 hoverboard 固件先拿到代码git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC cd hoverboard-firmware-hack-FOC仓库自带三套构建入口选你最顺手的一个PlatformIO对新手最友好在 platformio.ini 里把default_envs指向你要的变体或命令行指定-e VARIANT_XXX工具链自动下载Keil MDK打开 MDK-ARM/ 下的.uvprojx工程在 Target 下拉菜单里切换变体烧录用 ST-Link 插件命令行 Makefile需要arm-none-eabi工具链Makefile 里已经写好了make flashst-flash 写入0x8000000和make unlockopenocd 解锁读保护两个目标make -e VARIANTVARIANT_ADC # 编译指定变体 make flash # 写入芯片变体Variant决定输入从哪来共 10 种VARIANT_ADC两个电位器接左侧排线、VARIANT_USART串口协议控制配 Arduino/hoverserial/hoverserial.ino 示例可用 Arduino 发指令适合机器人、VARIANT_NUNCHUKWii 扭扭棒单手操控适合电动座椅、VARIANT_PPM/VARIANT_PWM/VARIANT_IBUS遥控接收机信号、VARIANT_HOVERCAR油门刹车踏板静止时双击刹车进入倒车、VARIANT_SKATEBOARD电动滑板RC PWM 输入、VARIANT_TRANSPOTTER运输小车、VARIANT_HOVERBOARD保留双轮见上文限制。没有明确目标时从VARIANT_ADC最易上手或VARIANT_USART保留最大扩展性开始。注意编译前必须选定且只选一个变体不选会直接报Variant not defined!编译错误这是仓库故意设置的保护。如何选择控制模式电压、速度还是扭矩控制类型和模式都在 Inc/config.h 里用两个宏表达#define CTRL_TYP_SEL FOC_CTRL // COM_CTRL 换向 / SIN_CTRL 正弦 / FOC_CTRL 场定向 #define CTRL_MOD_REQ VLT_MODE // OPEN / VLT_MODE / SPD_MODE / TRQ_MODE控制类型三选一换向还原原厂行为便于对比、正弦波、FOC。后两者都支持场削弱FOC 另多出速度/扭矩闭环。速度模式和扭矩模式只在 FOC 类型下可用。三种 FOC 模式的取舍模式指令含义松开输入后典型场景VLT_MODE电压直接施加目标电压响应最快自由滑行机器人、要求快速响应的底盘SPD_MODE速度闭环跟踪目标转速能抵抗负载扰动自由滑行恒速巡航类应用TRQ_MODE扭矩施加目标扭矩手感最自然自由滑行有人乘坐的车辆默认推荐两个可选扩展扭矩模式下可开ELECTRIC_BRAKE_ENABLE把滑行换成松油门时的恒定电刹车电压或扭矩模式下可开STANDSTILL_HOLD_ENABLE让车在停稳后锁住位置不溜车。变体也会替你预设模式比如VARIANT_SKATEBOARD默认TRQ_MODEVARIANT_HOVERCAR默认VLT_MODE松开油门时不希望车继续滑行。平衡车固件烧录与首次上电验证编译成功后写入芯片PlatformIO 里是platformio run -e VARIANT_ADC -t uploadMakefile 用make flash。首次上电的验证流程断电状态下接好 SWD 与供电烧录完成后断开调试线用电池或 15V 电源给主板正常上电轮子应保持静止、蜂鸣器按变体逻辑提示状态任何上电自转都说明接线或配置有问题立即断电检查接调试串口验证把 3.3V USB 转串口的GND 和 RX接到左或右侧板排线上记得在 config.h 里打开对应的DEBUG_SERIAL_USART2/3用 115200 波特率打开终端你会看到一行滚动数据in1 / in2原始输入、cmdL / cmdR左右电机指令范围 -1000 到 1000、BatV电池电压×100 显示等。推动油门cmdL/cmdR应该跟随变化这就是一条最小闭环验证。两个电压细节务必记住侧板排线里的红色线是15V碰错一次就会烧模块USART2左排线不耐 5V只有 USART3右排线支持 5V 电平——5V 的 USB 转串口模块请只接右排线。深入一层FOC 为什么安静以及速度还能推多高噪音从哪里来换向控制是60 度一段地切换通电扇区电流波形是阶梯状转矩随之脉动——这就是电钻声和振动的来源。FOC 每个 PWM 周期本固件为 16kHz都在根据转子实时角度重新合成三相电流转矩脉动被压得很低所以声音和手感同时变好。仓库里保留了换向模式COM_CTRL你刷完 FOC 之后可以随时切回去对比这是体验差距最直接的方式。如何启用场削弱并调整阈值电机转速升高后反电动势逼近母线电压继续加速就只能空转。场削弱的做法是往 D 轴磁场轴注入反向电流削弱气隙磁场从而换出更高的转速上限。本固件默认关闭参数关系是一条线性插值曲线FIELD_WEAK_ENA默认 0关闭改为 1 启用FIELD_WEAK_LO默认 750油门指令达到该值时开始介入FIELD_WEAK_HI默认 1000达到该值时场削弱电流拉满FIELD_WEAK_MAX默认 5A最大削弱电流电流越大上限转速越高。调整前务必知道代价转速会冲到远超日常骑行的水平功耗显著上升可能触发电池 BMS 的过压保护。建议在开阔场地、轮子可空转的条件下小步调整。参数在哪里、怎么微调所有可标定的电机参数集中在 Src/BLDC_controller_data.c以定点数整数表示小数的编码方式运算更快存储config.h 里的宏会覆盖其中的默认值。常用的保护上限默认是单电机I_MOT_MAX15A、直流母线I_DC_MAX17A、转速N_MOT_MAX1000rpm。想精细标定绕组参数时可以先用 VESC 等工具实测电机的电感、电阻等物理参数作为参照一般用户不需要动定点参数——先用默认值骑起来再按需小幅调整电流上限和转速上限即可。平衡车FOC改造常见坑位与安全边界三个最常见的坑1. 芯片有读保护ST-Link 连上却读不了。很多平衡车主板的出厂固件开启了 Flash 读保护连接时会在 STM32 ST-LINK Utility 里看到 Can not read memory! Disable Read Out Protection and retry. 的警告处理方式是先解锁再烧录Makefile 的make unlock会调 openocd 执行stm32f1x unlock或在 ST-LINK Utility 的 Target → Option Bytes 里解除。如果读保护能读解锁前先备份原厂固件刷坏了还能回去。2. 侧板排线的电压等级记混。红线 15V、左排线USART2不耐 5V、SWD 供电要 3.3V——这三条是烧模块的高发点接线前用万用表逐根确认。3. 一上来就激进调参。直接开大场削弱、把I_MOT_MAX拉到极限再上路是绝大多数翻车场景的起点。正确顺序默认参数 → 验证基本功能 → 小步调电流 → 最后才碰场削弱。固件内置的保护机制输入连续 20 次错误或缺失即进入紧急关闭TIMEOUT单电机与直流母线双重电流上限超限触发斩波限流电池电压分级报警蜂鸣LED 闪烁欠压自动关机默认 10S 电池、单节 3.37V 断电静止 8 分钟INACTIVITY_TIMEOUT自动关机主板芯片内温传感器支持过热报警与断电但必须先校准再启用未校准时误差可达 45°C。周边工具与社区围绕这套固件还有一批社区项目可以顺手用网页版串口控制界面浏览器里直接监控和调参、在线编译器不用本地装环境、平衡车 breakout 扩展板Nunchuk/LCD/按键转接、ROS 电机驱动以及基于 Matrix 的社区群组。仓库 README 的 Projects 部分列了索引需要时再去找。刷机前检查清单按顺序逐条过一遍全部打勾再上电芯片确认为 STM32F103RCT6 或 GD32F103RCT6非分体式主板原厂固件可读取时已备份到文件读保护已处理make unlock或 Option BytesST-Link 能正常通信SWD 接线核对3.3V 供电、GND、PA14/SWCLK、PA13/SWDIO变体已选定且唯一platformio.ini/ Keil Target /VARIANT三处一致首次烧录用保守配置FIELD_WEAK_ENA 0、I_MOT_MAX≤ 15、N_MOT_MAX≤ 1000侧板排线红线15V未接任何 3.3V/5V 信号5V 电平只接右排线USART3上电后轮子不自转调试串口能看到cmdL/cmdR随输入变化在空旷平整场地完成低速试跑确认转向与刹车方向正确刷完之后如果觉得还不够再回到 config.h 逐项微调——这套固件的边界基本由你的好奇心决定。【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站