Files
ASER/can通讯协议.md
2026-03-31 23:30:33 +08:00

10 KiB
Raw Blame History

FDR-Core 上 位 机 CAN 协 议 说 明 书 当 前 固 件 实 装 版 ⽂ 档 状 态 Internal / Current 适 ⽤ 固 件 当 前 上 传 的 f4_can_app.c 实 现 说 明 依 据 以 .c 代 码 ⾏ 为为 准 1. ⽬ 标 与 范 围 本 ⽂ 档 定 义上 位 机 与 底 盘 控 制 器 之 间 的 CAN 通 信 协 议 覆 盖 以 下 内 容 上 位 机 向 底 盘 下 发 速 度 命 令 底 盘 向 上 位 机 上 报 状 态 、 轮 速 、 ⾥ 程 和 通 信 诊 断 命 令 安 全 机 制 CRC 、 rolling counter 、 命 令 超 时 故 障 / 警 告 状 态 的 上 报 规 则 2. 总 线 与 编 码 约 定 CAN 类 型 标 准 帧 11-bit ID 帧 类 型 数 据 帧 RTR=0 字 节 序 ⼩ 端 缩 放 规 则 vx 、 wz int16 = 物理量 * 1000 轮 速 RPM 直 接按 int16 发 送 ⾥ 程 增 量 ticks 按 int16 发 送 CRC CRC8-SAE J1850 poly = 0x1D init = 0xFF xorout = 0xFF ⾮ 反 射 当 前 固 件 在 0x100 控 制 帧 上 对 前 7 个 字 节 计 算 CRC 再 放 ⼊ Byte7 。

  1. 帧 ID 总 览 ⽅ 向 ID 名 称 实 际 周 期 说 明 Rx 0x080 Heartbeat 上 位 机 ⾃ 定 仅 表 ⽰ 链 路 活 着 不 刷 新 运 动 看 ⻔ 狗 Rx 0x100 Velocity Command 建 议 20ms 速 度 控 制 命 令 必 须 持 续 发 送 Tx 0x181 Status 20ms 状 态 机 / 健 康 等 级 / 诊 断 位 Tx 0x182 Actual RPM 轮 询 约 60ms 实 际 轮 速 Tx 0x183 Target RPM 轮 询 约 60ms ⽬ 标 轮 速 Tx 0x184 Comm Diag 100ms 通 信 统 计 Tx 0x200 Odom Delta 轮 询 约 60ms 四 轮 ⾥ 程 增 量 当 前 固 件 在 CAN_Send_Telemetry_20ms() 中 采 ⽤ 如 下 节 拍 0x181 每 个 20ms 周 期 都 发 0x182 / 0x183 / 0x200 通过 s_telem_slot 三 选 ⼀ 轮 询 发 送 0x184 每 5 个 20ms 周 期 发 ⼀ 次 即 100ms ⼀ 次 4. 上 位 机 -> 底 盘 4.1 0x080 ⼼ 跳 帧 ⽤ 途 仅 表 ⽰ “ 链 路 上 仍 然 有 ⼈ 在 说话 ”

⾏ 为 不 会 刷 新 运 动 看 ⻔ 狗 不 会 延 续 旧 速 度 命 令 当 前 固 件 不 解 析 其 载 荷 内 容 也不 使 ⽤ DLC 内 容 建 议 可发可 不 发 若 发 DLC 可 统 ⼀ 为 0 或 8 4.2 0x100 速 度 控 制 帧 ID 0x100 DLC 8 数 据 定 义 Byte 类 型 字 段 说 明 01 int16 LE vx_x1000 线 速 度 单 位 m/s * 1000 23 int16 LE wz_x1000 ⻆ 速 度 单 位 rad/s * 1000 4 uint8 ctrl_flags 控 制 标 志 位 当 前 仅 保 存 不 参 与 控 制决 策 5 uint8 reserved 预 留 固 定 填 0 6 uint8 rolling_counter 滚 动 计 数 器 7 uint8 crc8 对 Byte0~6 做 CRC8-SAE J1850 固 件 接 收 后 会 把 vx 、 wz 恢 复 成 浮 点 值 分别 写 ⼊ g_robot_ctrl.target_vx g_robot_ctrl.target_wz

并 保 存 ctrl_flags 与 rolling counter 。 接 收 判 定 规 则 1. DLC 必 须 等 于 8 2. CRC 必 须 正 确 3. rolling counter 必 须 满 ⾜ 下 列 规 则 若 尚 未 同 步 或 当 前 不 在 SYSTEM_OPERATIONAL 则 ⾸ 帧 直 接接 受 正 常 运 ⾏ 时 新 counter 相 对 上 ⼀ 帧差 值 必 须 在 1..3 之 间 否 则 拒 收 发 送 建 议 推 荐 周 期 20ms 50Hz 最 低 要 求 不 要 超 过 150ms 不 发 送 合 法 0x100 即 使你 想 停 ⻋ 也 建 议 继续 周 期 发 送 vx = 0 wz = 0 的 合 法 命 令 帧 因 为 当 前 固 件 只 ⽤ “ 合 法 且 新 鲜 ” 的 0x100 喂 命 令 看 ⻔ 狗 超 时 阈 值 是 150ms 。 5. 底 盘 -> 上 位 机 5.1 0x181 状 态 帧 ID 0x181 周 期 20ms DLC 8 Byte 类 型 字 段 说 明 0 uint8 system_state 0=BOOTING , 1=OPERATIONAL , 2=SAFE_FAULT 1 uint8 system_health 0=OK , 1=WARNING , 2=FAULT

Byte 类 型 字 段 说 明 25 uint32 LE diag_bits 当 前 诊 断 位 图 6 uint8 cmd_age_10ms 距 最 近 ⼀ 次 合 法 0x100 已 过 去 多 少 个 10ms tick 7 uint8 status_counter 状 态 帧 发 送 计 数 器 5.2 0x182 实 际 轮 速 帧 ID 0x182 周 期 轮 询 约 60ms DLC 8 Byte 类 型 字 段 01 int16 LE FL 实 际 RPM 23 int16 LE RL 实 际 RPM 45 int16 LE FR 实 际 RPM 67 int16 LE RR 实 际 RPM 5.3 0x183 ⽬ 标 轮 速 帧 ID 0x183 周 期 轮 询 约 60ms DLC 8 Byte 类 型 字 段 01 int16 LE FL ⽬ 标 RPM 2~3 int16 LE RL ⽬ 标 RPM

Byte 类 型 字 段 45 int16 LE FR ⽬ 标 RPM 67 int16 LE RR ⽬ 标 RPM 5.4 0x184 通 信 诊 断 帧 ID 0x184 周 期 100ms DLC 8 Byte 字 段 说 明 0 valid_cmd_total_lsb 合 法 命 令 累 计 低 8 位 1 crc_error_total_lsb CRC 错 误 累 计 低 8 位 2 counter_reject_total_lsb rolling counter 拒 收 累 计 低 8 位 3 can_tx_drop_total_lsb CAN 发 送 丢 帧 累 计 低 8 位 4 busoff_total_lsb Bus-Off 累 计 低 8 位 5 rx_overrun_total_lsb FIFO overrun 累 计 低 8 位 6 last_accepted_counter 最 近 ⼀ 次 接 受 的 rolling counter 7 err_nibbles ⾼ 4 位 = 连 续 counter 错 误 数 低 4 位 = 连 续 CRC 错 误 数 均 饱 和 到 15 5.5 0x200 ⾥ 程 增 量 帧 ID 0x200 周 期 轮 询 约 60ms DLC 8

Byte 类 型 字 段 01 int16 LE FL delta ticks 23 int16 LE RL delta ticks 45 int16 LE FR delta ticks 67 int16 LE RR delta ticks 说 明 这 是 时 间 窗 内 增 量 不 是 累 计 总 值 上 位 机 如 需 总 ⾥ 程 / 总 编 码 器 计 数 需 要 ⾃ ⾏ 累 加 积 分 6. 系 统 状 态 与 健 康 等 级 6.1 system_state 值 名 称 含 义 0 SYSTEM_BOOTING 上 电 后 尚 未 收 到 第 ⼀ 帧 合 法 速 度 命 令 1 SYSTEM_OPERATIONAL 正 常 ⼯ 作 2 SYSTEM_SAFE_FAULT 安 全 保 护 ⽬ 标 速 度已 强 制 清 零 6.2 system_health 值 名 称 含 义 0 SYSTEM_HEALTH_OK ⽆ 活 动 中 的 警 告 / 故 障 1 SYSTEM_HEALTH_WARNING 有 警 告 但仍 可 ⼯ 作 2 SYSTEM_HEALTH_FAULT 有 明 确 故 障 通 常已 经 或 应 进 ⼊ 保 护

  1. diag_bits 诊 断 位 图 定 义 diag_bits 是 ⼀ 个 32 位 ⼩ 端 位 图 ⽬ 前 定 义 如 下 bit 宏 名 级 别 含 义 0 DIAG_COMM_TIMEOUT Fatal 速 度 控 制 帧 超 时 1 DIAG_CAN_BUS_OFF Fatal CAN Bus-Off 2 DIAG_CMD_CRC_STORM Fatal 连 续 CRC 错 误 过 多 3 DIAG_CMD_CNT_STORM Fatal 连 续 rolling counter 错 误 过 多 4 DIAG_MOTOR_FL_STALL Fatal 左 前 轮 堵 转 / 失 效 趋 势 5 DIAG_MOTOR_RL_STALL Fatal 左 后 轮 堵 转 / 失 效 趋 势 6 DIAG_MOTOR_FR_STALL Fatal 右 前 轮 堵 转 / 失 效 趋 势 7 DIAG_MOTOR_RR_STALL Fatal 右后 轮 堵 转 / 失 效 趋 势 8 DIAG_CONTROL_SATURATION Warning 控 制 输 出 ⻓ 时 间 顶 满 建 议 上 位 机 把 bit0 ~ bit7 视 为 故 障 类 bit8 视 为 警 告 类 8. 安 全 策 略 与 故 障 触 发 条 件 8.1 命 令 超 时 命 令 看 ⻔ 狗 超 时 阈 值 150ms 只 有 合 法 且 新 鲜 的 0x100 才 会 刷 新 0x080 ⼼ 跳 不 会 刷 新 超 时 后 进 ⼊ SAFE_FAULT

置 位 DIAG_COMM_TIMEOUT 8.2 CRC 错 误 ⻛ 暴 若 连 续 CRC 错 误 计 数 达 到 5 进 ⼊ SAFE_FAULT 置 位 DIAG_CMD_CRC_STORM 8.3 Counter 错 误 ⻛ 暴 若 连 续 counter 错 误 计 数 达 到 5 进 ⼊ SAFE_FAULT 置 位 DIAG_CMD_CNT_STORM 8.4 CAN Bus-Off 若 发 ⽣ Bus-Off 计 数 累 加 进 ⼊ SAFE_FAULT 置 位 DIAG_CAN_BUS_OFF 8.5 电 机 堵 转 固 件 每 10ms 做 ⼀ 次 电 机 堵 转 诊 断 。 若 某 轮 持 续 满 ⾜ 以 下 条 件 ⽬ 标 RPM >= 40 实 际 RPM <= 8 控 制 输 出 绝 对 值 >= 850 并 持 续 50 个 10ms tick 即 500ms 置 对 应 轮 ⼦ 的 stall 位

进 ⼊ SAFE_FAULT 8.6 控 制 饱 和 若 存 在 任 ⼀ 轮 持 续 满 ⾜ ⽬ 标 RPM >= 30 控 制 输 出 绝 对 值 >= 980 并 持 续 20 个 10ms tick 即 200ms 置 位 DIAG_CONTROL_SATURATION 该 项 属 于 Warning 不 单 独 强 制 进 ⼊ SAFE_FAULT 。 9. 上 位 机 实 现 建 议 9.1 速 度 命 令 发 送 建 议 上 位 机 按 如 下 ⽅ 式 实 现 周 期 20ms ID 0x100 rolling counter 每 帧 ⾃ 增 1 uint8 ⾃ 然 回 绕 CRC 每 次 发 送 前 重 新 计 算 Byte0~6 的 CRC8-SAE J1850 停 ⻋ 时 不 要 停 ⽌ 发命 令 继续 发 vx = 0 wz = 0 推 荐 发 送 频 率 推 荐 50Hz 20ms 可 接 受 100Hz 10ms 不 建 议 低 于 10Hz 绝 不 能 超 过 150ms 不 发合 法 0x100

9.2 ⼼ 跳 发 送 ID 0x080 可 选 仅 ⽤ 于上 位 机 链 路 监 控 不 要 依 赖 它 维 持 运 动 9.3 状 态 接 收 建 议 重 点 订 阅 0x181 状 态 / 健 康 / 故 障 0x184 通 信 统 计 以 及 按 需 订 阅 0x182 实 际 轮 速 0x183 ⽬ 标 轮 速 0x200 ⾥ 程 增 量 建 议 上 位 机 ⾄ 少 显 ⽰ system_state system_health diag_bits cmd_age_10ms crc_error_total_lsb counter_reject_total_lsb busoff_total_lsb 四 轮 实 际 RPM 四 轮 ⽬ 标 RPM 四 轮 增 量 ticks

  1. 0x100 组 帧 参 考 伪代 码 counter = (counter + 1) & 0xFF vx_i16 = round(vx_mps * 1000) wz_i16 = round(wz_radps * 1000) data[0] = vx_i16 & 0xFF data[1] = (vx_i16 >> 8) & 0xFF data[2] = wz_i16 & 0xFF data[3] = (wz_i16 >> 8) & 0xFF data[4] = ctrl_flags data[5] = 0 data[6] = counter data[7] = crc8_j1850(data[0:7]) send(id=0x100, dlc=8, data=data)