一次接对: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 的硬件:把主板上的电机相电流采样、霍尔、PWM 桥、控制输入和 SWD 烧录口逐一讲清楚,再给出一条按顺序往下走的接线流程和常见症状的排查思路,目标是你第一次通电就能让电机听话。
动手之前:先把清单列齐
开始接线前,桌上最好摆齐这几样东西,缺一样都可能让你白跑一趟:
- 平衡车主板一块(核心芯片通常是 STM32F103RCT6,也有部分主板用 GD32F103RCT6,这套固件两种都认)
- 原车两块副板(sideboard)和 4 芯侧板线缆,或者你打算自己接的遥控接收机 / 电位器
- 10S 锂电池组:标称 36V、满电 42V,配套充电器
- 万用表(量电压、查通断、找短路)
- SWD 烧录器(DAPLink / ST-Link 均可)和 USB 转 TTL 串口模块(3.3V 电平)
- 烙铁、热缩管、扎带,以及一把合适的内六角(拆轮子和电池仓要用)
安全红线先说死三句:接任何线之前先把电池插头拔下来;红线(12/15V)只认设备标注能吃的电压,3.3V 逻辑口碰到 15V 直接烧板;大电流线(电池、电机相线)裸露端一律套热缩管,防止碰到螺丝和车架短路。
这张总览图可以先混个脸熟:主板上挂两块副板、各一个轮电机、电池和充电口,控制信号从侧板线进来。下面按区域把引脚拆开看。
看懂主板引脚:hoverboard-firmware-hack-FOC 引脚映射表
这张官方标注图建议放大看,后面接线和排障基本都靠它对照。
主板上的引脚功能可以在固件里查到原始定义:Inc/defines.h 里集中放了霍尔、PWM、ADC 引脚,Src/setup.c 文件头部的注释则记录了 ADC 通道和电机线颜色的对应关系。按用途分成四组:
电源与状态类引脚
| 功能 | 引脚 | 说明 |
|---|---|---|
| 电池电压采样 | PC2 | 接 DC 母线分压后的 BAT 信号,对应 ADC 通道 12 |
| 充电检测 | PA12 | 识别充电器是否插入(板型 0) |
| 电源锁存输入 | PA5 | OFF 信号,断电复位相关 |
| 电源按键 | PA1 | 长按触发校准、双击等动作 |
| 状态 LED | PB2 | 电池等级、报警闪烁都走这颗灯 |
| 蜂鸣器 | PA4 | 起步提示、低电量报警音 |
电池方面,默认按 10S 配置(Inc/config.h 里BAT_CELLS 10),低电量告警在 36V 附近,35V 左右快闪提醒,低于约 33.7V 直接断电保护。所以你的电池组落在36V~42V这个区间才算正常工况,明显偏低就先充电。
电机相电流采样引脚
FOC 靠相电流反馈做定向控制,每个电机的 U/V 两相电流各占一个 ADC 通道,另有一路采 DC 母线电流:
| 信号 | 引脚 | ADC 通道 | 对应电机线颜色 |
|---|---|---|---|
| 左电机 U 相电流 | PA0 | ADC1 CH01 | 左线绿 |
| 左电机 V 相电流 | PC3 | ADC1 CH13 | 左线蓝 |
| 左电机 DC 电流 | PC0 | ADC1 CH10 | — |
| 右电机 U 相电流 | PC4 | ADC2 CH14 | 右线蓝 |
| 右电机 V 相电流 | PC5 | ADC2 CH15 | 右线黄 |
| 右电机 DC 电流 | PC1 | ADC2 CH11 | — |
这里最容易搞混:PA0、PC3、PC0 这几个口是采样线,不是驱动电机的强电线。驱动电机的强电走的是下面这组 PWM 桥。
霍尔信号与 PWM 桥驱动引脚
六个桥臂各有一高一低两路 PWM,左电机挂在 TIM8 上,右电机挂在 TIM1 上:
- 左电机:U 相 PC6 / PA7,V 相 PC7 / PB0,W 相 PC8 / PB1
- 右电机:U 相 PA8 / PB13,V 相 PA9 / PB14,W 相 PA10 / PB15
霍尔信号是 5V 电平的数字输入:
- 左电机霍尔:PB5 / PB6 / PB7(U / V / W)
- 右电机霍尔:PC10 / PC11 / PC12(U / V / W)
每条霍尔线除了 A/B/C 三个信号,还要各接一根 GND 和一根 5V 供电,缺一根传感器就不工作,FOC 起转定位会失败。
控制输入与烧录接口
主板上原本给两块副板留了两根 4 芯线,各引出 GND、12/15V 和一路串口:
- 左侧线 → USART2(PA2 发、PA3 收),可复用为 UART、12bit ADC(电位器)、PPM,不耐 5V
- 右侧线 → USART3(PB10 发、PB11 收),可复用为 UART、PWM、PPM、iBUS,5V 容忍
遥控输入按变体走不同引脚:右侧线接 PPM/iBUS 时信号落在PB11,接双通道 PWM 时是 PB10(转向)+ PB11(油门);左侧线接 PWM 时则是 PA2 / PA3。串口调试用 3.3V USB 转 TTL 模块,只接 GND 和 RX 两根线就够了——配置注释里专门警告过,那根红线是 15V,千万别接进串口模块。
烧录口是标准 SWD:PA13 = SWCLK,PA14 = SWDIO,再加 3.3V 和 GND 四根线。
按顺序接线:建议四步走
顺序不是随便定的:先弱电后强电、先静态后动态,出问题时能立刻知道是哪一段的锅。
第一步:电池接好并量电压
电池组插头接上 XT60 主电源口之前,先断电用万用表量一下电池端子:读数应该在 36V~42V 之间,正负极性和插头方向核对一致。
做完应该看到:按下电源键,状态 LED 亮、蜂鸣器响一声提示音,说明主板已上电。如果一点反应没有,回头查电池插头是否真正插到位、保险丝是否烧断。
⚠️ 易错提醒:XT60 插头没插到底会导致接触电阻发热,插好后轻轻拽一下确认锁扣咬合。
第二步:电机相线与霍尔线
轮子拆下来单独放在地上(电机空转状态,安全第一),按上表的引脚把相线和霍尔线一一对接到主板排针上:
对照线颜色接,别凭记忆:左电机绿线对 U 相、蓝线对 V 相,右电机蓝线对 U 相、黄线对 V 相。霍尔的 A/B/C 三线如果接错顺序,电机不会炸,但转向和加减速方向会反,后面用固件里的方向反转宏就能救回来。
做完应该看到:所有强电接头用热缩管包好、扎带固定后,用手晃轮轴没有松动;用万用表蜂鸣档复查相线之间、相线与地之间没有短路。
⚠️ 易错提醒:到这一步如果后面电机嗡嗡响但不转,十有八九是相序没对——先交换 U 和 V 两相再试。
第三步:选一路控制输入
按你的玩法选一种,同一时刻只用一种,变体定义在 Inc/config.h 顶部的 VARIANT 区选,平台里也对应platformio.ini的构建选项:
- 两个电位器(最省事的验证手段):接左侧线,输入端 0~3.3V,别碰红线。上电长按电源键进自动校准,把两个电位器来回拧到底再松回中间即可。
- 遥控(PPM / PWM / iBUS):接收机接右侧线,信号落 PB11。以 Flysky i6S 这类遥控器为例,通道分工一般是 CH1 转向、CH2 油门,开关用来切控制类型、模式和弱磁开关:
- 串口协议:3.3V USB 转 TTL 接右侧线 GND + RX,波特率 115200,仓库里 Arduino/hoverserial/hoverserial.ino 给了一份现成的上位机示例工程可参考。
做完应该看到:开遥控后主板串口调试口(另一侧线接 USB 转 TTL)能滚动打出in1:xxx in2:xxx cmdL:0 cmdR:0 ...一行的数据,且 in 值随手柄动作变化。看不到数据就先查 PB11 有没有信号、接收机是否对频成功。
第四步:SWD 烧录与 MCU 解锁
新拆的主板芯片默认开了 Flash 读保护,第一次接 SWD 时大概率读不到内存。用 ST 官方的 ST-LINK Utility 连接后,如果弹窗提示 "Can not read memory",这是正常现象,不是板子坏了:走 Target 菜单 → Option Bytes,按提示解除读保护并整片擦除,之后 SWD 就能正常访问 Flash。
接线:PA13→SWCLK、PA14→SWDIO、3.3V→3V3、GND→GND,主板先上电再插 SWD。烧录固件这一步在 PlatformIO、Keil 或命令行make下操作都行,仓库提供 platformio.ini、Makefile 和 MDK-ARM/ 工程三种入口。源码仓库地址是git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC,拿到代码后选一个变体直接构建即可。
做完应该看到:烧录工具显示 verify 通过,重启后主板不再跑原厂的自检逻辑,状态 LED 的行为按 FOC 固件的节奏走(电池等级指示灯、报警声)。
上电验证:按这个顺序确认
烧完固件、装回轮子前,空载状态按顺序过一遍:
- 量电池电压显示:打开串口调试(Inc/config.h 里的 DEBUG_SERIAL 相关开关),看
BatV一栏,它显示的值乘以你万用表实测对比,偏差应在 ±1V 以内。差得远的话,把万用表读数和调试输出值 5 号项写进BAT_CALIB_*参数重新标定。 - 单侧电机空转:只使能一个电机(
MOTOR_LEFT_ENA/MOTOR_RIGHT_ENA),轻推输入,看电机是否平滑起转。FOC 的好处此刻最能体会:起步没有换相法那种顿挫和嗡嗡噪声,扭矩是平顺爬升的。 - 方向核对:两侧电机同向转才算对;哪侧反了,就在配置里启用对应方向的反转宏(
INVERT_L_DIRECTION/INVERT_R_DIRECTION),比来回拔线省事。 - 断电保护:行驶中断开控制信号(关遥控),应在数秒内触发紧急停机——这是
TIMEOUT参数在起作用,属正常行为,别当成故障。
症状对照:出问题先查这几处
| 症状 | 优先怀疑 | 怎么快速定位 |
|---|---|---|
| 电机嗡嗡响但不转 | 相序不对 / 霍尔没供电 | 交换该电机 U、V 两相;用万用表量霍尔 5V 供电脚是否有电 |
| 电机转但方向反、加速反常 | 霍尔 A/B/C 顺序或方向宏 | 固件开方向反转宏,或核对霍尔线序 |
| 遥控完全无响应 | PB11 信号没到 / 变体没选对 | 串口看 in 值是否变化;确认构建时选的 VARIANT 和实际接法一致 |
| 上电 LED 不亮、无声 | 电池电压或主电源接触 | 量 XT60 两端电压;检查电池插头锁扣和保险丝 |
| 电压读数明显偏差 | 电池电压未标定 | 按上文BAT_CALIB_*流程重新写标定值 |
| SWD 连不上、提示读不了内存 | 芯片读保护未解除 | 按第四步走 Option Bytes 解锁,再全片擦除 |
排障时养成一个习惯:每次只动一处,改完立刻验证再改下一处,否则最后会分不清是哪个改动引起的问题。
收尾:参数都藏在哪
接线和固件跑通后,剩下可折腾的就是参数了:控制类型(CTRL_TYP_SEL,默认 FOC)、控制模式(电压 / 速度 / 扭矩)、电流与转速上限、弱磁窗口,全部集中在 Inc/config.h;更细的控制器参数在 Src/BLDC_controller_data.c。改完重新构建烧录即可。提醒一句:弱磁(FIELD_WEAK_ENA)能拉高极速,但电机转速会明显飙升,开启前把轮子架离地面、人离远点再测。
按"电池 → 电机 → 控制输入 → SWD"这个顺序走下来,每一步都有明确的通过标准,第一次通电翻车的概率会小很多。
【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考