| 特性 | 说明 | 典型值 / 细节 |
|---|---|---|
| 差分信号 | CAN_H 与 CAN_L 电压差表示逻辑状态 | 显性 (Dominant) : 差分 ≈ 2V;隐性 (Recessive) : 差分 ≈ 0V |
| 终端电阻 | 总线两端各并联 120Ω 电阻,抑制信号反射 | 标准 CAN: 2×120Ω → 等效 60Ω;高速 CAN 必备 |
| 共模电压 | CAN_H / CAN_L 对地静态电压 | 约 2.5V (隐性) ;显性时 CAN_H≈3.5V, CAN_L≈1.5V |
| 线缆 | 双绞线 (屏蔽/非屏蔽) | 特性阻抗 120Ω,推荐 1Mbps 以内 |
| 字段 | 全称 | 长度 (bits) | 功能 / 备注 |
|---|---|---|---|
| SOF | Start Of Frame | 1 | 显性位,同步所有节点 |
| ID | Identifier | 11 (标准) / 29 (扩展) | 决定优先级 & 报文过滤 |
| DLC | Data Length Code | 4 | 数据字节数 (0~8) |
| Data | 数据场 | 0~64 (0~8 字节) | BMS 电压、温度、SOC 等 |
| CRC | Cyclic Redundancy Check | 15 | 校验数据完整性,含 1 位定界符 |
| ACK | Acknowledge | 2 (1位应答+1位定界) | 接收节点置显性表示确认 |
ID 越小
优先级越高
显性位 (0)
战胜隐性位 (1)
逐位比较
直到分出胜负
获胜节点继续发送
失败节点自动退出发送
🧪 BMS 测试实战提醒
📟 CAN 帧解析示例 (C 语言风格)
typedef struct {
uint8_t SOF; // 1 bit, 固定显性
uint16_t ID; // 11 bit (标准) 或 29 bit (扩展)
uint8_t DLC; // 4 bit, 数据长度
uint8_t Data[8]; // 0~8 字节
uint16_t CRC; // 15 bit + 1 定界符
uint8_t ACK; // 2 bit (应答+定界)
} CAN_Frame;
// 示例:BMS 电压报文 ID=0x351, DLC=8
CAN_Frame bms_voltage = {
.SOF = 0,
.ID = 0x351,
.DLC = 8,
.Data = {0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0},
.CRC = 0x4A2F,
.ACK = 0x01
};