feat: add ASSI lamp control and CAN protocol docs

This commit is contained in:
shenlefengnai-rgb
2026-09-18 21:42:28 +08:00
parent 04da25e2d1
commit be4f167b83
6 changed files with 236 additions and 62 deletions
+17 -11
View File
@@ -30,6 +30,7 @@
| CAN1 | `PB8` RX、`PB9` TX | 标准帧,500 kbit/s |
| CAN2 | `PB5` RX、`PB6` TX | 标准帧,500 kbit/s |
| DAC I2C | `PB10` SCL、`PB11` SDA / `I2C2` | 控制两颗 MCP4725,5 V 基准 |
| ASSI RGB 灯 MOS | `PE9` R、`PE10` G、`PE11` B | 推挽输出,高电平使能外部 MOS |
| 调试串口 | `PA9` TX、`PA10` RX / `USART1` | 115200、8N1、无流控 |
| 运行/故障 LED | `PE0` / `PE1` | 正常心跳 / 故障指示 |
@@ -77,27 +78,32 @@ CAN1 和 CAN2 使用相同协议,所有主动上报均分别发送到两条总
| ID | 名称 | 周期/触发 | 数据 |
|---:|---|---|---|
| `0x100` | 心跳 | 每 1 s | `A1 01 seq_L seq_H uptime_0..3` |
| `0x102` | ADC 电压 | 每 500 ms | 输入电压 `uint16`,单位 mV |
| `0x103` | 四路频率 | 每 500 ms | 4 个 `uint16`,单位 Hz,顺序 PA0/PA2/PA6/PB14 |
| `0x330` | GPIO 状态 | 上电、任一输入变化 | 状态 `uint16`、变化掩码 `uint16`、时间戳 `uint32 ms` |
| `0x321` | DAC 设置命令 | 接收 | `[DAC 编号][mV_L][mV_H]` |
| `0x322` | DAC 应答 | 每次 DAC 设置后 | `[结果][DAC 编号][mV_L][mV_H]` |
| `0x6A0` | 心跳 | 每 1 s | `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]` |
| `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) 为准。
### 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` 故障指示保持原行为。
### DAC CAN 报文示例
将 DAC1 设为 2.500 V:
```text
ID=0x321 DLC=3 DATA=01 C4 09
ID=0x6A3 DLC=3 DATA=01 C4 09
```
成功应答:
```text
ID=0x322 DLC=4 DATA=01 01 C4 09
ID=0x6A4 DLC=4 DATA=01 01 C4 09
```
DAC 编号 1 的 I2C 7 位地址为 `0x61`,编号 2 为 `0x60`。两路与板级 `MC_L`、`MC_R` 网络的实际对应关系需要以实物测量确认后再固化到线束文档。
@@ -111,7 +117,7 @@ DAC 编号 1 的 I2C 7 位地址为 `0x61`,编号 2 为 `0x60`。两路与板
```text
A11 F407 monitor ready
UART: DAC1 1.234 or DAC2 2500
CAN cmd 0x321: [dac_id][mV_L][mV_H] or ASCII text
CAN cmd 0x6A3: [dac_id][mV_L][mV_H] or ASCII text
```
支持的 DAC 命令不区分大小写:
@@ -122,7 +128,7 @@ DAC2 2500
D1 2.5V
```
数值可使用伏特小数或毫伏整数;允许范围为 0 至 5000 mV。命令执行后会回显结果,并在两条 CAN 上发送 `0x322` 应答。
数值可使用伏特小数或毫伏整数;允许范围为 0 至 5000 mV。命令执行后会回显结果,并在两条 CAN 上发送 `0x6A4` 应答。
## 8. 编译、生成与下载
@@ -158,6 +164,6 @@ Release 固件为 `build/Release/A11_F407_SDC_ACQ_DAC.bin`。若改动了 `.ioc`
- 变更 CubeMX 配置后必须重新生成并重新编译,检查 `main.c` 的用户代码区是否完整保留。
- 修改 CAN 速率时,CAN1 与 CAN2 的波特率及外部分析仪配置必须一致。
- 修改 ADC 分压、标定或滤波参数时,应使用已知直流电压复测,并确认 CAN `0x102` 与串口数值一致。
- 修改 ADC 分压、标定或滤波参数时,应使用已知直流电压复测,并确认 CAN `0x6A1` 与串口数值一致。
- 修改 DAC 地址、参考电压或输出范围时,同时更新 DBC、本文和 `DAC*_ADDR7`、`DAC_REFERENCE_MV` 宏。
- 本工程不包含构建目录和 `.bin`、`.elf`、`.hex` 等固件二进制;发布生产固件前应从当前提交重新编译生成。