4. CAN通信基础

在OBC(车载充电机)整机联调中,CAN总线是BMS、VCU、OBC三者之间交换充电握手、充电参数、故障状态的核心通道。很多“充电不启动”“充电中途停止”“报文丢失”的问题,最终都落到CAN物理层接线、终端电阻、帧格式或仲裁时序上。理解CAN的物理层、数据链路层、帧结构与仲裁机制,是排查OBC通信问题的基本功。

一、物理层:差分信号与终端匹配

CAN总线采用差分传输,两根信号线CAN_H与CAN_L的电压差决定总线电平。显性位(逻辑0)时差分电压约2V,隐性位(逻辑1)时差分电压接近0V。这种差分结构使CAN在整车强电磁干扰环境下仍能可靠通信。

物理层最容易被忽视的是终端电阻。标准高速CAN要求在总线两端各接一个120Ω电阻,并联后约60Ω。OBC台架联调时,若只接OBC与BMS两个节点,两端电阻必须齐全;若用万用表在断电状态下测量CAN_H与CAN_L之间电阻,正常应接近60Ω。若测得120Ω,说明只有一端终端电阻;若测得40Ω左右,说明多接了一个终端电阻,可能导致总线负载过重、波形畸变。

台架排查口诀:先断电测电阻,60Ω左右为正常;再上电测波形,显性约2V、隐性约0V;最后看报文,错误帧多先查终端与屏蔽。

二、数据链路层:帧结构与位填充

CAN数据链路层把物理层的位流组织成帧。标准帧(CAN 2.0A)使用11位标识符,扩展帧(CAN 2.0B)使用29位标识符。OBC通信中,充电机与BMS之间的CAN报文通常使用扩展帧,以承载J1939或自定义协议中的源地址、目标地址信息。

一帧标准数据帧依次包括:帧起始(SOF)、仲裁段(标识符+RTR)、控制段(IDE、r0、DLC)、数据段(0~8字节)、CRC段、ACK段、帧结束(EOF)。其中仲裁段决定优先级,DLC决定数据长度。CAN FD在控制段增加FDF、BRS、ESI等位,数据段可扩展到64字节,但OBC当前主流仍以经典CAN为主。

位填充是CAN可靠性的关键机制:发送器在连续5个相同电平位后自动插入1个相反电平位,接收器再自动删除。这样保证接收方能从位流中恢复时钟。若位填充出错,节点会发出错误帧,导致报文重发。

标准数据帧结构(经典CAN):
SOF | 仲裁段(11位ID + RTR) | 控制段(IDE + r0 + DLC) | 数据段(0~8B) | CRC | ACK | EOF

扩展数据帧结构:
SOF | 仲裁段(11位基本ID + SRR + IDE + 18位扩展ID + RTR) | 控制段 | 数据段 | CRC | ACK | EOF

三、仲裁机制:非破坏性逐位仲裁

CAN总线是多主结构,多个节点可同时发送。当多个节点同时竞争总线时,采用“线与”逻辑进行非破坏性逐位仲裁:显性位(0)会覆盖隐性位(1)。每个节点在发送每一位的同时回读总线电平,若自己发送隐性位却读到显性位,说明有更高优先级节点在发送,该节点立即退出仲裁,转为接收状态,且不会破坏已获胜节点的报文。

仲裁的核心规则是:标识符数值越小,优先级越高。因此OBC通信中,安全相关报文(如BMS故障、充电停止请求)通常分配较小的ID,确保在总线繁忙时优先发送。仲裁只发生在仲裁段,一旦进入数据段,所有节点都已确定主从关系,不再仲裁。

CAN总线非破坏性逐位仲裁示意 节点A ID = 0x180 节点B ID = 0x200 节点C ID = 0x300 CAN_H / CAN_L 差分总线 仲裁位序列(从高位到低位): 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 总线实际电平: 0 0 0 0 0 0 0 0 节点A继续发送 节点B第3位退出 节点C第2位退出 ID越小优先级越高:0x180 > 0x200 > 0x300 节点A获胜,B、C自动退出且报文不丢失

四、OBC通信中的典型应用与误区复盘

在OBC充电流程中,CAN报文承担着“充电握手—参数配置—充电中监控—充电结束”的全过程。典型报文包括:BMS发送的电池充电需求(电压、电流、允许充电标志),OBC发送的充电机状态(输出电压、输出电流、故障码),VCU发送的控制指令(充电使能、目标电流)。这些报文通常以100ms或10ms周期发送,安全相关报文周期更短。

报文类型 典型ID范围 发送周期 关键信号 联调关注点
BMS充电需求 0x180~0x1FF 100ms 需求电压、需求电流、允许充电 ID优先级、DLC长度、字节序
OBC状态反馈 0x200~0x27F 100ms 实际输出电压、电流、故障码 信号更新率、故障码定义
VCU控制指令 0x100~0x17F 10ms 充电使能、目标电流 仲裁优先级、超时处理
充电结束/故障 0x080~0x0FF 事件触发 停止原因、故障等级 最高优先级、立即发送
常见误区一:认为“CAN报文丢失一定是线束问题”。实际上,若两个节点ID冲突或DLC配置不一致,接收方可能直接丢弃报文。误区二:忽略终端电阻,台架只接一个120Ω,导致显性电平不足、错误帧频发。误区三:把仲裁失败当成通信故障,实际上仲裁失败是正常机制,节点会自动重发。

复盘一次典型的OBC充电不启动问题:BMS发送了允许充电报文,但OBC未响应。用CAN分析仪抓包发现,BMS报文ID为0x181,OBC期望接收0x180,两者差1,导致OBC过滤失败。修改DBC配置后通信恢复。这说明CAN通信联调必须“物理层—数据链路层—应用层”逐层确认:先测电阻和波形,再核对ID、DLC、字节序,最后检查应用层超时与状态机。

台架CAN联调检查清单:
1. 断电测CAN_H-CAN_L电阻:约60Ω
2. 上电测CAN_H对地:约2.5V;CAN_L对地:约2.5V
3. 示波器看差分波形:显性约2V,隐性约0V
4. CAN分析仪确认波特率:250kbps / 500kbps
5. 核对DBC中ID、DLC、字节序、周期
6. 检查终端电阻数量与位置
7. 观察错误帧计数:持续增长需查物理层
8. 确认应用层超时时间与重发策略

掌握CAN物理层、数据链路层、帧结构与仲裁机制后,面对OBC通信问题就能快速定位:是电阻不匹配、ID配置错误、优先级冲突,还是应用层状态机超时。CAN不是“插上线就能通”的简单总线,它的可靠性建立在严格的物理匹配与协议规范之上。