feat: add CAN board test tool and timing safeguards

This commit is contained in:
shenlefengnai-rgb
2026-10-01 17:43:28 +08:00
parent be4f167b83
commit 34627fa6a0
14 changed files with 607 additions and 44 deletions
+7 -5
View File
@@ -12,8 +12,8 @@
2. 接收 CAN1、CAN2 的 DAC 控制帧。
3. 读取四路定时器捕获值并计算频率。
4. 汇总 15 路 GPIO 变化并上报。
5. 每 500 ms 上报 ADC 和四路频率。
6. 每 500 ms 翻转运行指示灯,每 1 s 发送 CAN 心跳。
5. 每 500 ms 上报 ADC、每 20 ms 上报四路频率。
6. 每 500 ms 翻转运行指示灯,每 100 ms 发送 CAN 心跳。
`PE0` 为正常运行心跳灯;若进入 `Error_Handler()`,`PE0` 和 `PE1` 会快速同时翻转。
@@ -78,16 +78,18 @@ CAN1 和 CAN2 使用相同协议,所有主动上报均分别发送到两条总
| ID | 名称 | 周期/触发 | 数据 |
|---:|---|---|---|
| `0x6A0` | 心跳 | 每 1 s | `A1 01 seq_L seq_H uptime_0..3` |
| `0x6A0` | 心跳 | 每 100 ms | `A1 01 seq_L seq_H uptime_0..3` |
| `0x6A1` | ADC 电压 | 每 500 ms | 输入电压 `uint16`,单位 mV |
| `0x6A2` | 四路频率 | 每 500 ms | 4 个 `uint16`,单位 Hz,顺序 PA0/PA2/PA6/PB14 |
| `0x6A3` | DAC 设置命令 | 接收 | `[DAC 编号][mV_L][mV_H]` |
| `0x6A2` | 四路频率 | 每 20 ms | 4 个 `uint16`,单位 Hz,顺序 PA0/PA2/PA6/PB14 |
| `0x6A3` | DAC 设置命令 | 接收 | `[DAC 编号][mV_L][mV_H]`;每路在 100 ms 内未收到本路下一帧时归零 |
| `0x6A4` | DAC 应答 | 每次 DAC 设置后 | `[结果][DAC 编号][mV_L][mV_H]` |
| `0x6A5` | ASSI 灯控 | 接收 | `byte0`:`0=AS_OFF`、`1=AS_READY`、`2=AS_DRIVING`、`3=AS_EMERGENCY`、`4=AS_FINISHED` |
| `0x6A6` | GPIO 状态 | 上电、任一输入变化 | 状态 `uint16`、变化掩码 `uint16`、时间戳 `uint32 ms` |
心跳帧中板号为 `0xA1`、协议版本为 `0x01`,序号与上电时间均为低字节在前。完整信号定义和量纲以 [DBC 文件](SDC_ACQ_DAC.dbc) 为准。
DAC 的 CAN 安全超时按通道独立执行:收到 `0x6A3` 中 DAC1 或 DAC2 的有效控制帧后,该通道必须在 100 ms 内再次收到自己的控制帧,否则固件仅将该通道写为 0 mV 一次。串口 DAC 指令不启动或刷新这个 CAN 控制帧超时。
### ASSI RGB 状态灯
`PE9/PE10/PE11` 分别控制外部红、绿、蓝灯 MOS,均为高电平有效。`0x6A5` 可由 CAN1 或 CAN2 接收,状态在下一帧有效灯控报文到达前保持不变;上电默认 `AS_OFF`。`AS_READY` 为红绿常亮(黄),`AS_DRIVING` 为红绿以 2 Hz、50% 占空比闪烁(各 250 ms 亮/灭),`AS_EMERGENCY` 为蓝灯以相同节奏闪烁,`AS_FINISHED` 为蓝灯常亮。`PE0` 运行心跳和 `PE1` 故障指示保持原行为。