hoverboard-firmware-hack-FOC 接线指南:平衡车 FOC 固件的引脚、烧录与首次上电
本文带你从零完成 hoverboard-firmware-hack-FOC 的硬件接线与首次上手。这是一套给普通平衡车主板换脑的 FOC(磁场定向控制)固件,能显著降低电机噪音、提升扭矩平顺性,还支持弱磁扩速。读完后,你能独立完成主板供电、电机动力线、控制信号线和调试口的接线,并把固件解锁烧录进去、通过串口观察电机指令是否正常。
认识硬件清单:你手上需要什么 📦
这套固件直接刷在平衡车主板的 MCU 里,主控通常是 STM32F103RCT6,部分主板是 GD32F103RCT6,两者都支持。主板两侧插着两块副板(sideboard),原厂的陀螺仪和显示就在副板上。你需要的硬件如下:
| 硬件 | 说明 | | -- | -- | | 平衡车主板 | 含 STM32F103 主控与左右两套三相桥 | | 10S 锂电池组 | 标称约 36V~42V,经 XT60 接口供电 | | 左右电机 | 轮毂内置,三根相线 + 霍尔信号,由主板直接驱动 | | 左/右副板线 | 4 针线:GND、12/15V、TX、RX,是外接控制设备的入口 | | 输入设备(三选一) | 电位器/踏板(ADC)、RC 遥控器(PPM/PWM/iBUS)或 Nunchuk | | 3.3V USB-TTL 适配器 | 接调试串口,115200 波特率 | | ST-Link 调试器 | 首次解锁与烧录用,接 SWD 口 |
主板所有引脚以 PCB 丝印标注,上图为官方引脚定义图。接线前对照实物把每组线的位置确认一遍,比任何文字描述都可靠。
接线前先把安全做到位 🔒
平衡车主板直接扛几十伏高压,接线顺序错了代价很大:
- 全程断电操作。接任何线之前先拆电池 XT60 插头,接完检查再通电。
- 认清那根红线。副板 4 针线里有一根是 12/15V 供电,官方文档原话:15V 会让 3.3V 器件"destroy everything"。接适配器、电位器、踏板时,只用 GND 和信号线。
- 左边线不是 5V 耐压的。左侧长接线对应 USART2,不支持 5V 电平;右侧短接线对应 USART3,才是 5V tolerant。
- 裸线做绝缘。热缩管或电工胶布包好每个节点,主板上电容密集,一处短路可能烧掉整板。
- 条件允许的话,在电池正极串一个防反接二极管,能救命。
分步接线实操:按电流走向来 🔌
第一步:供电,先接 XT60 主电源
- 接口位置:主板边缘的 XT60 插座,标注 VDD 36V-42V 与 GND。
- 对应引脚:不是 MCU 引脚,而是整板电源输入,经板内 DC-DC 给逻辑电路供电。
- 连接对象:10S 锂电池组的 XT60 插头,注意极性。
- 易错点:主板默认按 10 节电池校准(config.h 里
BAT_CELLS 10),别拿 12S 或更低电压的包上电,欠压保护和电量提示都会失准。
第二步:动力,电机相线与霍尔信号
- 接口位置:主板两组三相输出端子,分别接左右轮毂电机。
- 对应引脚:左电机走 TIM8,高边 PC6/PC7/PC8、低边 PA7/PB0/PB1;右电机走 TIM1,高边 PA8/PA9/PA10、低边 PB13/PB14/PB15。相电流采样在 ADC 上:左侧 PC0、PA0、PC3,右侧 PC1、PC4、PC5。霍尔信号读入 PB5/PB6/PB7(左)和 PC10/PC11/PC12(右),这些映射已固化在
Inc/defines.h,无需改动。 - 连接对象:每根电机相线对应一个 U/V/W 端子,霍尔三线加 5V、GND。
- 易错点:FOC 不依赖霍尔换相,但换相方向错了电机可能反转或抖动。上电后若方向不对,交换任意两根相线,或在 config.h 里打开
INVERT_L_DIRECTION/INVERT_R_DIRECTION。
第三步:信号,通过副板线接你的输入设备
- 接口位置:主板左右两侧 4 针副板插座。左线(长接线)= USART2,PA2 是 TX、PA3 是 RX,兼作 ADC1/ADC2;右线(短接线)= USART3,PB10 是 TX、PB11 是 RX,兼作 I2C2。
- 对应引脚与连接对象:
- 电位器或踏板(VARIANT_ADC / VARIANT_HOVERCAR):接左线,信号 0~3.3V;
- PPM/iBUS(VARIANT_PPM / VARIANT_IBUS):接右线,PB11 收信号;
- PWM(VARIANT_PWM):右线 PB10 接通道 1(转向)、PB11 接通道 2(速度);
- Nunchuk(VARIANT_NUNCHUK):右线走 I2C,注意加上下拉/上拉电阻。
- 易错点:红线(12/15V)只用来给外接设备供电,3.3V 适配器只碰 GND 和 RX/TX 两根。左边线接 5V 设备会烧毁 PA2/PA3。
第四步:调试口,SWD 加串口
- 接口位置:MCU 的 SWD 焊盘(PA13 为 SWDIO、PA14 为 SWCLK,STM32 标准位置);调试串口复用任意一条副板线。
- 对应引脚:串口只接 GND 和 RX 两根,3.3V 电平,115200 波特率。
- 连接对象:ST-Link 接 SWD 四线;USB-TTL 适配器接副板线看调试输出。
- 易错点:官方反复强调不要用红色 15V 线接适配器,这是最容易烧板的一步。
下面是官方 hovercar 变体的完整接线示意,包括踏板、RC 接收机和 LED 的连接关系,可作对照:
解锁、烧录与首次上电验证 🔥
原厂固件开了读保护,ST-Link 连上会提示无法读取内存,这是正常现象,不是硬件故障。用 STM32 ST-LINK Utility 进 Target 菜单的 Option Bytes,把读保护级别设为 0 并应用,芯片会被整体擦除,之后即可正常烧录:
然后克隆仓库、选一个 variant 烧录:
git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
在 platformio.ini 里把对应 default_envs 取消注释(比如 VARIANT_ADC),再执行 pio run -t upload,用 ST-Link 上传。也可以用 Keil uVision 打开 MDK-ARM 工程,或在 Linux 下 make -e VARIANT=VARIANT_ADC。
关键配置都在 Inc/config.h,首次上电前建议核对三处:CTRL_TYP_SEL(默认 FOC_CTRL)、CTRL_MOD_REQ(默认 VLT_MODE,踏板类应用推荐 TORQUE 模式)、以及限流 I_MOT_MAX 15 与限速 N_MOT_MAX 1000。variant 未选或选多个会直接编译报错,这是保护机制,别绕过。
上电后的观察清单,按顺序做:
- 按住电源键开机,听蜂鸣器反馈,副板 LED 应亮。
- 打开调试串口(115200),应持续滚出
in1:xxx in2:xxx cmdL:0 cmdR:0 BatADC:xxx BatV:xxx TempADC:xxx Temp:xxx。 - 核对
BatV:它是电池电压 ×100 的校准值,拿万用表量电池端对一下,偏差大就先做电压校准(BAT_CALIB_ADC/BAT_CALIB_REAL_VOLTAGE)。 - 动一下输入设备(拨电位器或给油门),
in1/in2数值应跟随变化,松回中位cmdL/cmdR归 0。 - 让一只车轮悬空给小油门,确认转向正确、无异响;两只轮都悬空再试倒车方向。
避坑速查 ⚡
- ST-Link 提示 Can not read memory → 原厂固件开了 RDP 读保护 → 进 Option Bytes 关闭读保护后重试,注意此操作会清空 Flash,属预期行为。
- 接上 USB 适配器瞬间冒烟或无法开机 → 12/15V 红线接到了 3.3V 适配器 VCC → 断电检查,适配器只接 GND 和信号线;适配器损坏需更换。
- 左边线接 5V 设备后无响应或烧口 → USART2 引脚不耐 5V → 改用右边线(USART3,5V tolerant),或换 3.3V 电平设备。
- 上电后电机不转,串口有输出 → variant 未正确定义,或
MOTOR_LEFT_ENA/MOTOR_RIGHT_ENA被注释 → 确认只有一个 variant 生效,两个#define都在。
写在最后
到这里,你已经完成了从电池供电、电机动力线、控制信号线到调试口的完整接线,并跑通了"解锁—烧录—串口验证"全流程。电机参数校准、弱磁扩速和巡航控制都在 config.h 与 Src/BLDC_controller_data.c 里,建议先稳定跑通默认配置再逐项调整。仓库 Wiki 的 Getting Started 与 Troubleshooting 页面有更完整的细节,遇到硬件异常时优先去那里对照排查。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考






