Skip to content

卡丁车 CAN 总线接口规范(唯一真源)

本文是 控制板 DlaBoard_A ↔ FOC_double ↔ 刹车板 DlaCart_v2.1 ↔ 转向伺服 之间 CAN 通信的唯一权威定义。三方固件改动须以本文为准并同步更新本文。 物理层:经典 CAN(Classic CAN),1 Mbps,标准帧(11 位 ID)。 FOC 端用 FDCAN 外设但配置为经典帧,与控制板 bxCAN、刹车板 bxCAN 总线兼容。

最后更新:2026-06-01


1. 节点与控制器

节点MCUCAN 外设句柄备注
控制板 DlaBoard_ASTM32F407bxCAN1hcan1总线主控;采集 RC/油门/屏/档位并下发指令
FOC 驱动板 FOC_doubleSTM32G473FDCAN1(经典帧)hfdcan1双电机 FOC;CAN 接入时本地油门/RC 让位
刹车板 DlaCart_v2.1STM32F103bxCANhcan脉冲式电动刹车执行器
转向伺服伺服自带绝对位置闭环,ID=0x64+node_id

控制板滤波器:mask=0 全收进 FIFO0,主循环 while 排空逐帧分发。


2. CAN ID 分配总表

ID方向名称周期DLC
0x64 + node_id控制板 ↔ 伺服转向伺服指令/反馈50ms 保活8
0x210控制板 → FOC驱动请求20ms8
0x211FOC → 控制板行走状态20ms8
0x212FOC → 控制板母线遥测(屏显)100ms8
0x220控制板 → 刹车板刹车命令变化即发 + 100ms 保活8

ID 选择:0x2xx 段留给「整车语义」帧,伺服 0x64+ 段为厂商既定,互不重叠。 新增整车帧请在 0x213.. 顺延,并先更新本表。


3. 帧定义

3.1 0x210 控制板 → FOC 驱动请求(DLC=8)

小端。源 foc_can.c::FocCAN_SendDriveRequest,宿 bsp_can.c::bsp_can_poll_rx

字节字段类型说明
[0:1]throttle_permilleu16油门 0..1000(‰)
[2:3]steer_permilles16转向 -1000..1000(‰)(差速用,当前 0)
[4]flagsu8bit0=allow_drive, bit1=brake
[5]gearu80=N 1=F(前进) 2=R(后退)
[6]sequ8心跳计数
[7]timeout_10msu80=FOC 默认(300ms);非 0 建议 30

FOC 仲裁:新鲜 0x210 优先于本地油门;超时(timeout 或默认 300ms)→失效; 持续无源 800ms→撤防停机。

3.2 0x211 FOC → 控制板 行走状态(DLC=8)

vehicle.c::vehicle_status_tx,宿 foc_can.c::FocCAN_OnRxFrame

字节字段类型说明
[0]healthu8bit0=foc1_run bit1=foc2_run bit4=foc1_nfault bit5=foc2_nfault bit6=cmd_recent
[1]sequ8心跳
[2:3]foc1_rpms16车架机械 rpm(带向)
[4:5]foc2_rpms16同上
[6]echo_flagsu8回显 bit0=allow bit1=brake
[7]u8bit7=cmd_valid, bit0-3=gear

控制板用双轮 rpm 折算车速(0.1km/h),轮速传感器作回退(FocCAN_GetSpeed_01kmh)。

3.3 0x212 FOC → 控制板 母线遥测(DLC=8)

vehicle.c::vehicle_telem_tx,宿 foc_can.c::FocCAN_OnRxFrame。供串口屏显示。

字节字段类型说明
[0:1]vbus_mVu16母线电压(毫伏)
[2:3]ibus_cAs16母线总电流(厘安,10mA/LSB;双电机 ibus 之和)
[4]sequ8心跳
[5:7]预留(温度/故障字)

控制板缓存 + FocCAN_GetVbus_mV/GetIbus_cA(不新鲜返回 0)。屏显: 电压 0.1V/字、电流 0.1A/字。屏地址待定screen.hSCREEN_ADDR_VBUS_*=0, 填入后即生效)。

3.4 0x220 控制板 → 刹车板 刹车命令(DLC=8)

brake_can.c::BrakeCAN_Send,宿 DlaCart_v2.1/main.c::Brake_CAN_ApplyFrame

字节字段类型说明
[0]flagsu8bit0=apply(拉闸)
[1]sequ8心跳
[2]timeout_10msu8失效超时(默认 30=300ms)
[3]magicu8固定 0x42,刹车板据此校验
[4:7]预留

刹车板校验:DLC≥4 且 data[3]==0x42;执行:apply 跳变→驱动 ~500ms 脉冲到位后保持; 同状态周期帧仅保活;超时无帧→自动松刹车。故控制板须以 < timeout 周期持续发送当前意图。

刹车意图来源(控制板 foc_brake,与 FOC 刹车同源): 跟随模式取上位机 brake;否则 刹车开关(PE2/PE3) 或 P 档 或 撤防 任一成立。 UART BRAKE 1/0/OFF 为台架测试旁路,测试保持期间正式刹车自动让位 (FocCAN_BrakeTestActive)。

3.5 0x64 + node_id 转向伺服

厂商指令集,见 servo_can.c(使能/定位/限速/清报警/写零点/心跳)。 心跳回读 abs_pos 用于训练采集转向角与跟随定位。


4. 改动 checklist(任一方修改协议时)

  1. 先改本文 §2/§3,再改三方固件,保持字节级一致。
  2. 控制板新增/变更接收帧:确认滤波器(当前全收)与 FocCAN_OnRxFrame 分发分支。
  3. FOC 新增上行帧:bsp_can.c 加发送函数 + vehicle.c 定周期调用 + app_config.h 加 ID/周期。
  4. 刹车板:协议在 DlaCart_v2.1/main.c 顶部宏,注意 magic/DLC 校验。
  5. 跑通后更新「最后更新」日期。