3. CAN报文结构
CAN(Controller Area Network)总线协议之所以能在新能源汽车OBC(On-Board Charger,车载充电机)这类强电磁干扰、高实时性要求的场景中成为主流,其核心在于报文结构设计的严谨性与鲁棒性。OBC与BMS(电池管理系统)、VCU(整车控制器)之间的充电握手、功率调节、故障上报,全部依赖CAN报文逐位传输。理解CAN报文结构,不能只停留在“知道有几种帧”的层面,而必须深入到每一位的时序含义、仲裁优先级如何影响充电启停、以及CRC校验如何保障充电安全。本章将从帧类型、帧格式、ID仲裁机制、位填充与CRC校验四个维度展开,并结合OBC实际工况进行拆解。
3.1 帧类型:四种帧在OBC中的角色分工
核心原理
CAN协议定义了四种帧类型,每种帧服务于不同的总线管理目的。在OBC系统中,这四种帧的配合直接决定了充电控制链路的可靠性。
- 数据帧(Data Frame):携带实际充电参数(目标电压、目标电流、温度、SOC等),是OBC与BMS之间信息交换的主要载体。OBC接收BMS下发的充电请求,同时上报输出电压、输出电流、故障码等。
- 远程帧(Remote Frame):用于请求某个ID节点发送数据。在OBC中,VCU可能通过远程帧请求OBC上报当前充电模式或软件版本号。远程帧没有数据场,但ID仲裁机制与数据帧完全相同。
- 错误帧(Error Frame):当节点检测到总线错误(位错误、填充错误、CRC错误等)时,主动发送错误帧,由6个显性位加错误标志组成。OBC在充电过程中若检测到BMS报文CRC错误,会立即发送错误帧并进入故障保护状态。
- 过载帧(Overload Frame):用于延迟后续报文,通常在接收节点尚未准备好接收下一帧时发送。在OBC中,当MCU的CAN控制器FIFO溢出时,会触发过载帧以争取处理时间。
判断方法
在OBC开发与测试中,通过CANalyzer或PCAN等工具抓取总线报文时,可通过帧ID的RTR位(Remote Transmission Request)区分数据帧与远程帧:RTR=0为数据帧,RTR=1为远程帧。错误帧和过载帧通常由CAN控制器硬件自动处理,软件层面只需关注错误计数器(TEC/REC)的数值变化。
案例拆解:OBC充电过程中的错误帧风暴
某款OBC在台架测试时,充电启动瞬间出现总线错误帧风暴,导致充电中断。通过CANoe抓包发现,BMS发送的扩展帧0x18FF50E5在数据场第3字节出现CRC不匹配。进一步分析发现,BMS的CAN控制器在发送该报文时,由于MCU时钟抖动导致位时序偏移,触发了位填充错误。OBC侧的错误计数器REC快速累加至128,进入Bus-Off状态。解决措施:在BMS软件中增加CAN时钟校准逻辑,并在OBC侧增加错误恢复机制(Bus-Off后延迟500ms自动恢复)。
3.2 帧格式:标准帧与扩展帧的选择策略
核心原理
标准帧(CAN 2.0A)使用11位标识符,扩展帧(CAN 2.0B)使用29位标识符。两者在帧起始、仲裁场、控制场、数据场、CRC场、ACK场和帧结束的结构上存在差异。OBC作为车载关键节点,通常采用扩展帧以兼容J1939协议(商用车/新能源车常用上层协议)。
| 对比维度 | 标准帧(11位ID) | 扩展帧(29位ID) | OBC应用建议 |
|---|---|---|---|
| ID长度 | 11位,范围0x000~0x7FF | 29位,范围0x00000000~0x1FFFFFFF | 扩展帧可容纳更多节点与信号 |
| 仲裁场长度 | 12位(含RTR位) | 32位(含SRR、IDE、RTR位) | 扩展帧仲裁时间更长,但优先级更精细 |
| 帧开销 | 47位(不含数据场) | 67位(不含数据场) | 标准帧带宽利用率更高 |
| 兼容性 | 所有CAN控制器支持 | 需支持CAN 2.0B的控制器 | 现代OBC MCU均支持 |
| OBC典型应用 | VCU心跳报文、简单状态指示 | BMS充电指令、OBC故障码、CCS充电通信 | 关键控制信号建议使用扩展帧 |
判断方法
在OBC的CAN通信矩阵设计阶段,需根据信号的重要性和网络负载率选择帧格式。若总线节点超过16个或需要遵循J1939协议,必须使用扩展帧。若OBC仅与VCU进行简单状态交互,标准帧可降低总线负载。实际开发中,OBC的CAN1通道(连接BMS)通常使用扩展帧,CAN2通道(连接VCU)可根据OEM要求选择。
实战场景:OBC与BMS的J1939扩展帧通信
某OEM要求OBC与BMS之间遵循J1939协议,所有充电控制报文使用扩展帧。OBC发送的充电状态报文PGN(Parameter Group Number)为0xFEF1(即ID=0x0CFEF1E7),BMS发送的充电指令PGN为0xFF50(即ID=0x18FF50E5)。在实现时,OBC的CAN驱动需正确配置扩展帧格式,并注意IDE位(Identifier Extension)在发送时置1。若误配置为标准帧,BMS将无法识别该报文,导致充电无法启动。
3.3 ID仲裁机制:OBC充电控制中的优先级博弈
核心原理
CAN总线采用非破坏性逐位仲裁机制。当多个节点同时发送报文时,总线上的显性位(逻辑0)会覆盖隐性位(逻辑1)。仲裁从ID的最高位开始逐位比较,ID数值较小的报文优先获得总线使用权。在OBC系统中,ID仲裁机制确保了关键控制信号(如充电紧急停止)能够优先于常规状态报文传输。
判断方法
在OBC的CAN通信矩阵中,ID分配遵循以下原则:
- 安全相关报文(如充电枪连接状态、绝缘故障、过温保护)分配最小ID,确保最高优先级。
- 控制指令(如BMS的充电电压/电流请求)分配次小ID。
- 状态上报(如OBC输出电压、电流、效率)分配较大ID。
- 诊断报文(如UDS请求)分配最大ID,避免干扰实时控制。
案例拆解:充电紧急停止的仲裁竞争
在OBC充电过程中,若BMS检测到电池温度超过60°C,需立即发送紧急停止报文(ID=0x0002,数据场包含停止指令)。同时,OBC正在周期性发送充电状态报文(ID=0x0CFEF1E7)。由于0x0002的ID远小于0x0CFEF1E7,在仲裁时,紧急停止报文必然获胜,OBC在收到该报文后立即切断功率输出。若ID分配不合理(例如将紧急停止报文ID设为0x1FFFFFFF),则可能因仲裁失败导致停止指令延迟,引发安全事故。
3.4 位填充与CRC校验:OBC抗干扰的最后屏障
核心原理
位填充规则要求:发送节点在连续发送5个相同电平位后,自动插入1个反相电平位。接收节点在接收时检测到5个连续相同电平后,自动删除第6位。该机制保证了总线上的电平跳变频率,便于各节点同步时钟。CRC校验则通过15位CRC段覆盖从帧起始到数据场末尾的所有位,接收端重新计算CRC并与发送端比对,不匹配则判定为错误帧。
判断方法
在OBC的CAN控制器配置中,位填充和CRC校验由硬件自动完成,但软件需关注以下参数:
- CRC生成多项式:标准CAN使用x¹⁵+x¹⁴+x¹⁰+x⁸+x⁷+x⁴+x³+1,不可更改。
- 错误处理策略:当CRC错误发生时,OBC的CAN控制器会丢弃该报文并增加REC计数。若REC超过255,节点进入Bus-Off状态。
- 位时序采样点:OBC的CAN波特率通常为250kbps或500kbps,采样点应设置在75%~85%之间,以容忍总线传播延迟和时钟偏差。
实战场景:OBC充电桩通信中的CRC错误排查
某OBC在接入直流快充桩时,频繁出现充电中断。通过CANoe抓包发现,OBC接收到的充电桩报文(ID=0x18FF50E5)CRC错误率高达5%。分析原因:充电桩的CAN收发器在高温环境下(>85°C)出现位电平漂移,导致接收端采样点偏移。解决措施:在OBC的CAN驱动中增加采样点自动校准功能,将采样点从80%调整至75%,并增加硬件低通滤波以抑制高频噪声。调整后,CRC错误率降至0.01%以下。
总结复盘
OBC的CAN报文结构设计需从系统层面统筹考虑:帧类型决定了通信的可靠性,帧格式决定了兼容性,ID仲裁机制决定了实时性,位填充与CRC校验决定了抗干扰能力。在实际开发中,建议通过CANoe进行总线仿真,验证不同ID分配策略下的仲裁行为,并通过注入CRC错误、位填充错误等方式测试OBC的错误处理能力。只有将这四个维度融会贯通,才能设计出满足功能安全(ISO 26262 ASIL-C)要求的OBC CAN通信系统。