HXC 电机控制项目 — 三套工程模板 & AM32 开发 Skill
概述
综合三个电机控制项目(HXC_A_C620、HCX_A_N630、AM32)的文档和经验沉淀。涵盖基于 ESP32-S3 + PlatformIO + Arduino 的电机驱动开发全链路:C620 标准 CAN 调试、N630/VESC 扩展 CAN 位控开发、AM32 DSHOT 数字协议驱动,以及 BoardA 模块化库的使用。
前置条件
- ESP32-S3-DevKitC-1(N16R8:16MB Flash + 8MB PSRAM)
- Visual Studio Code + PlatformIO 插件
- 对应硬件:C620 电调 / N630(VESC) 电调 / AM32(FLYROUN) 电调
- USB 数据线(支持数据传输)
硬件平台共性
PlatformIO 正确配置(关键踩坑)
串口约定
Serial= USB CDC(原生 USB,无 CH340)Serial0= UART0 (GPIO43/44) — 无线烧录器/外部串口链路- 初始化:
Serial0.begin(115200, SERIAL_8N1, 44, 43); - USB CDC 枚举较慢,Python 读串口前需
time.sleep(3)
无线烧录配置
无线 DAP-Link 缺少 DTR/RTS 信号,需手动进入下载模式:pio run -t upload → 看到 Connecting... 后松手。
项目一:HXC_A_C620 — 单 C620 调试模板
用途
单 C620 电调起转、电流环/速度环调试、电机 ID 排查、CAN 接线排错。CAN 约定
控制本质:通过 CAN 发电流给定。“速度模式”是 ESP32 侧基于反馈转速做的软件外环。
串口命令
安全特性
- 上电先用
listen-only模式只听总线,不先乱发控制帧 - 支持主动发送”零电流扫描帧”找电机 ID
适合使用场景
- 需要调试单台 C620 电机的参数和响应
- 排查 CAN 总线接线问题
- 确认电机 ID 和方向
项目二:HCX_A_N630 — N630/VESC 位控开发
用途
基于 VESC 协议的 N630 电调位置控制开发。主控做位置环,N630 只做电流执行器。控制架构
CAN_PACKET_SET_CURRENT,不发 CAN_PACKET_SET_RPM / CAN_PACKET_SET_POS。
VESC CAN 协议
使用扩展帧:
反馈帧:
N630 侧 VESC 上位机必须确认
Motor Settings → FOC:- Sensor Mode = Encoder(不要停在 HFI)
- Sensor Port Mode = Sin/Cos
- Encoder Detection 已成功
- Motor Configuration 已写入,点 ↓M
- CAN Status Rate 1 = 50Hz,勾选 Status 1 + Status 4
- CAN Status Rate 2 = 5Hz,勾选 Status 5
- App Configuration 已写入,点 ↓A
已知硬件参数
串口命令
位置反馈和多圈展开
Status 4 的pid_pos 解析为单圈角度:
控制算法(PID + 轨迹规划)
当前已调优的参数
安全限制(首次调试)
推荐试车顺序
状态回显格式
适合使用场景
- N630/VESC 电调的位置控制开发
- 需要多圈角度控制和轨迹规划的场合
- 夹爪/执行器类精准位置控制
项目三:AM32 — DSHOT 驱动开发 & BoardA 模块库
用途
用 ESP32-S3 通过 DSHOT300 数字协议驱动 AM32 电调(FLYROUN, NXN 18M09),作为 C620 的应急替代方案。同时包含 HXC 战队 BoardA 板的所有模块化库。DSHOT300 协议
时序参数(RMT 外设生成)
数据帧格式(16bit,MSB 先发)
油门值定义
DSHOT_ESC 驱动 API
AM32Motor 状态机封装
update() 内驱动):
四轮小车控制(已验证)
硬件映射
运动逻辑
串口命令
遥控集成(HotRC RC)
- CH1 → GPIO48(左右转向)
- CH3 → GPIO38(前后油门)
- 1000~2000us 脉宽,50Hz
- 60us 死区消除中位抖动
- 100ms 超时自动停车(失控保护)
toNormalized()→ -1.0~+1.0
混控公式
缓冲模式(加速度限制)
适合使用场景
- 用 AM32 电调替代 C620 驱动 M3508 类电机
- 需要 DSHOT 数字协议的高精度/抗干扰场景
- 四轮底盘调试(开环验证)
- 遥控 + 串口双模控制
- 需要加速度缓冲保护的小车
BoardA 模块库索引
开发规则
GPIO 不变规则
⚠️ 以下引脚已经过硬件验证,不要随手更改:C620 规则
- 上电先
listen-only模式监听总线 - 控制帧用标准 11-bit ID
- 反馈 ID =
0x200 + motor_id - 速度模式是 ESP32 侧软件外环
N630 规则
- 调试前先接 VESC 上位机确认当前 CAN 波特率
- 主控只发
CAN_PACKET_SET_CURRENT - 不发
CAN_PACKET_SET_RPM/CAN_PACKET_SET_POS - 使用扩展帧 EID =
(packet_id << 8) | controller_id - 位置反馈需要从 Status 4 的 pid_pos 做多圈展开
- 位置反馈方向必须和电流正方向一致(否则可能跑飞)
AM32 / DSHOT 规则
- Flash 配置必须匹配硬件(N16R8 配 16MB)
- Arduino-ESP32 v3.x 基于 IDF 4.x,用旧版 RMT API(
driver/rmt.h) - 方向指令需要连续发送 ≥10 次才生效
- 切换方向前必须停电机
- 四轮底盘注意左右两侧电机镜像安装方向相反
安全规则
- 第一次调试 N630 时,
current_cmd限幅 ±0.5A 起步 - 上电默认不输出,先
arm再控制 - 串口活动 watchdog 超时后自动停机
- C620 位置模式超时时进入低电流保持
- 带载测试前先 r 10 / r 30 确认方向和制动
- 如果出现反向跑飞,立即
s停止