ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

把闲置平衡车改造成安静的FOC电机平台:hoverboard-firmware-hack-FOC上手指南

把闲置平衡车改造成安静的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

把 ST-Link 夹到老平衡车主板上,刷入新固件,再拧动油门——两个电机平稳地转了起来,噪音降成一阵嗡嗡声,原来那种“电钻感”消失了。hoverboard-firmware-hack-FOC 是一个面向平衡车的开源固件,它把场定向控制(FOC)写进原厂 STM32F103 主板,并附带适配不同输入方式的多个控制变体。

平衡车FOC固件解决的问题

原厂平衡车固件用换向方式驱动电机:三相绕组按六步顺序切换,起步顿挫、高速时噪声明显,转速上限也被反电动势早早封顶。刷入这套固件之后,同一对电机改用 FOC 驱动,转矩输出变得连续平滑,噪声和振动都降了下来,还多了场削弱(field weakening)这个手段把最高转速再往上推。固件同时保留了实用保护:单电机限流、电池低压报警与欠压断电、主板过热检测和输入信号超时急停,改车时不用自己从头造这些轮子。

平衡车FOC固件的典型应用场景:踏板、遥控与串口

踏板卡丁车

选VARIANT_HOVERCAR,把刹车和油门两个电位器踏板接到左侧传感器排线,就能坐在车上用脚控制加减速。静止状态下双击刹车踏板可以挂倒车,还有一套多档驾驶模式(新手/进阶/高手)在开机时由踏板组合选择,限定了各自的最高转速和电流。

遥控滑板与RC车辆

VARIANT_SKATEBOARD配合 RC 接收机的 PWM 信号(也有VARIANT_PPM、VARIANT_IBUS对应不同协议),站在板上用遥控器控制方向和速度。该变体默认使用扭矩模式,松手后电机接近自由滑行,脚感更接近真滑板。

单手代步工具

VARIANT_NUNCHUK用 Wii 体感手柄做单手输入,摇杆管油门和转向,常被用在电动轮椅和运货车这类单人低速代步车上。

串口控制的机器人底盘

VARIANT_USART把主板变成一块“双轮电机驱动板”:串口发一条命令就能设定左右轮转速,仓库里还附了 Arduino 示例工程Arduino/hoverserial/,树莓派、单片机都能接。

动手前需要准备什么

  • 一块基于 STM32F103RCT6 或 GD32F103RCT6 的平衡车主板(拆轮即可取用)
  • ST-Link V2 编程器,接主板上标注 SWD 的四个焊点(PA13/PA14/GND/3.3V)
  • 3.3V 的 USB 转串口模块,用于串口调试(非必需,但强烈建议)
  • 电脑装好 PlatformIO(VS Code 插件)或 Keil MDK 任一开发环境
  • 按所选变体准备输入设备:踏板、RC 接收机或 Nunchuk 等

最快跑通路径:刷固件并验证

下面这条路线目标是十分钟内让电机转起来,不碰任何高级选项。

git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC cd hoverboard-firmware-hack-FOC pio run -e VARIANT_ADC pio run -e VARIANT_ADC -t upload
  1. 在platformio.ini里把default_envs指向一个变体,新手推荐VARIANT_ADC(两个电位器当输入,最直观)。
  2. 先用 ST-Link Utility 解锁 MCU:原厂芯片开了读保护,不做这一步无法烧录,具体操作见 docs/pictures/wiki_unlock/ 里的截图。
  3. pio run -e VARIANT_ADC编译,-t upload烧录,再断开电池重新上电。
  4. 用 3.3V 串口模块接右侧排线(只用 GND 和 RX 两根线),115200 波特率打开串口监视器,看到in1 / cmdL / cmdR一行行刷出来,说明固件已经跑起来了。

FOC原理速览

换向控制像用拨档杆一档一档往前顶:每一步都有明显推力切换。FOC 则把三相电流拆成两个互不相干的量——转矩分量(顶多猛)和励磁分量(磁场多强),每个 PWM 周期根据霍尔传感器读出的转子角度重新算一遍三相电流,电机就被连续地“推”在最优方向上。开关动作隐藏在 16kHz 的 PWM 里,所以听上去只是一片均匀的嗡嗡声。

#define CTRL_TYP_SEL FOC_CTRL // 控制方式:FOC #define CTRL_MOD_REQ VLT_MODE // 控制模式:电压/速度/扭矩 #define I_MOT_MAX 15 // 单电机限流 [A] #define N_MOT_MAX 1000 // 单电机限速 [rpm]

config.h配置与进阶调参

所有用户可见的参数集中在Inc/config.h,按变体和功能分块,改完重编即可。值得先动的三个地方:

  • CTRL_TYP_SEL/CTRL_MOD_REQ:决定控制方式和模式。载人应用建议扭矩模式(TRQ_MODE,松手接近滑行),需要恒速的场合用SPD_MODE,响应优先用VLT_MODE。
  • I_MOT_MAX/N_MOT_MAX:单电机电流与转速上限,是安全边界,第一次刷车不要动,熟悉手感后再按电机实际能力收紧或放开。
  • FIELD_WEAK_ENA/FIELD_WEAK_LO/FIELD_WEAK_HI:场削弱开关和起效区间,能抬高极速,但代价是转速更高、耗电量更大,可能触发电池 BMS 的过压保护——调它之前务必做好电机脱轮测试的准备。

更深一层的电机本体参数(电感、电阻、磁链等)以定点数存放在Src/BLDC_controller_data.c,出厂已校准好;想微调需要用定点数查看工具换算,仓库 README 里附了工具链接。

常见坑与排错

现象:ST-Link 报Read Out Protection is activated,烧录失败。原因:原厂给 STM32F103 开了读保护(RDP),任何调试器都读不到芯片。解决:ST-Link Utility 里 Target → Option Bytes 关闭 RDP,再执行 Erase Chip 全片擦除,然后重新烧录。

现象:刷完后电机转向反了。原因:左右电机的绕线方向与固件默认假设不一致。解决:在Inc/config.h对应变体段落里定义INVERT_L_DIRECTION或INVERT_R_DIRECTION翻转单个电机方向。

现象:串口调试时收不到数据,甚至烧坏 USB 转串口模块。原因:传感器排线里的红细线是 15V 电源而非 3.3V,且左侧排线的 USART2 不耐 5V。解决:只接 GND 和 RX 两根线,适配器选 3.3V 电平型号;右侧排线(USART3)支持 5V 容忍,接 5V 模块问题较小。

现象:编译直接报错Variant not defined。原因:PlatformIO、Keil 和控制台 make 三种方式选变体的入口不同,漏选就会触发Inc/config.h里的编译期检查。解决:在platformio.ini取消注释default_envs,或在 Keil 的目标下拉菜单里选对变体。

社区与生态扩展

仓库 README 的 Projects 部分维护着一份生态清单:Web 串口控制页面、ROS 驱动、在线编译器、分体主板固件和平衡车扩展板等,改车前值得扫一遍。项目讨论社区从 Telegram 迁移到了 Matrix 群,历史消息也一并导入了。固件本身以 Pull Request 方式接受贡献,编译问题也可以直接在仓库里提 issue。


不管目标是卡丁车、遥控板还是机器人底盘,这套固件要解决的都是同一件事:让原厂平衡车的电机以更平滑的方式被驱动。如果手边正好有闲置车和一支 ST-Link,最快的第一步就是克隆仓库,按上面的最小路线刷一个VARIANT_ADC版本,先确认主板和电机都活着,再谈其余配置。

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

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

返回列表