第3章:OBC CAN通信网络架构

大家好,我是老张。今天咱们聊聊OBC在整车CAN网络里到底扮演什么角色。说白了,就是搞清楚OBC这根“充电神经”是怎么跟整车其他“器官”连在一起的。

我记得刚入行那会儿,总觉得OBC就是个充电器,插上电就能充。后来踩过坑才明白——没有CAN通信,OBC就是个“睁眼瞎”。它得知道电池要充多少、整车现在啥状态、有没有故障,这些全靠CAN总线来传递。

3.1 OBC在整车CAN网络中的拓扑位置

先看一张典型的整车CAN网络拓扑图(我这里用文字描述,你脑子里想象一下):

  • 动力CAN(Powertrain CAN):连接VCU、BMS、MCU、OBC等核心部件
  • 车身CAN(Body CAN):连接BCM、门窗、灯光等
  • 信息娱乐CAN(Infotainment CAN):连接中控屏、T-BOX等

OBC挂在哪个网络上?绝大多数车型,OBC挂在动力CAN上。为什么?因为OBC跟BMS、VCU的交互最频繁,而这些节点都在动力CAN上。

关键点:OBC不能挂在车身CAN或信息娱乐CAN上。我在一个项目中见过有人把OBC挂在车身CAN上,结果充电时车身控制信号干扰,导致充电中断。血的教训。

具体来说,OBC在动力CAN上的位置是这样的:

  • OBC作为CAN节点,有自己的ID(后面会讲分配策略)
  • OBC通过CAN总线与BMS、VCU直接通信
  • OBC一般不与其他节点(如MCU、EPS)直接通信,除非有特殊需求

3.2 OBC与BMS、VCU的通信关系

这是OBC通信的核心。我把它分成两个维度来讲:

3.2.1 OBC与BMS的通信

BMS是OBC的“直接领导”。充电过程中,OBC必须听BMS的指令。为什么?因为电池的状态只有BMS最清楚。

典型的通信流程是这样的:

  1. BMS发送充电需求:目标电压、目标电流、充电模式(恒流/恒压)
  2. OBC响应并执行:调整输出参数,反馈当前状态
  3. BMS实时监控:如果电池温度过高或电压异常,BMS会发送停止充电指令
  4. OBC执行停止:切断输出,并上报故障码

我的经验:BMS和OBC之间的通信,一定要设计心跳机制。我曾经遇到一个项目,BMS死机了,OBC还在傻乎乎地充电,差点把电池充爆。后来我们加了一个100ms的心跳报文,BMS超过500ms没发心跳,OBC自动停止充电。

3.2.2 OBC与VCU的通信

VCU是整车的“总指挥”。OBC跟VCU的通信,主要是状态上报和指令接收。

举个例子:

  • VCU告诉OBC:“现在可以充电了”(充电使能信号)
  • OBC告诉VCU:“我正在充电,当前功率是6.6kW”
  • VCU告诉OBC:“车辆需要行驶,请停止充电”(行车充电禁止)

说白了,VCU管的是“能不能充”,BMS管的是“怎么充”。OBC夹在中间,两头都得伺候好。

3.3 OBC CAN节点的ID分配策略

CAN ID分配,这是个技术活。分配不好,轻则报文冲突,重则整车通信瘫痪。

我一般遵循以下原则:

原则 说明 我的建议
优先级原则 高优先级报文用低ID(CAN总线仲裁机制) 故障报文ID < 控制报文ID < 状态报文ID
分组原则 同一功能模块的报文ID连续 OBC的报文ID建议在0x180~0x1FF之间
预留原则 留出扩展空间 每个节点至少预留5~10个ID

具体到OBC,我常用的ID分配方案(以11位标准帧为例):

  • 0x181:OBC状态报文1(输出电压、电流、功率)
  • 0x182:OBC状态报文2(温度、效率、故障码)
  • 0x183:OBC控制报文(来自VCU的使能指令)
  • 0x184:OBC充电需求报文(来自BMS的目标参数)

注意:ID分配一定要跟整车厂协商一致。我见过一个项目,OBC和DCDC用了同一个ID,结果一上电两个节点互相干扰,整车直接进入保护模式。排查了三天才找到原因。

3.4 OBC CAN通信的波特率选择

波特率选择,说白了就是“快还是稳”的问题。

目前主流的选择有两个:

  • 250kbps:经典选择,稳定可靠,传输距离远
  • 500kbps:速度更快,但对总线要求更高

我个人更倾向于500kbps。为什么?

你想想看,OBC在充电过程中需要传输的数据量其实不小:电压、电流、功率、温度、故障码、心跳报文……如果波特率太低,报文周期就得拉长,控制实时性会受影响。

举个例子:

// 250kbps下,一个标准帧(11位ID + 8字节数据)的传输时间
// 帧起始(1) + 仲裁场(12) + 控制场(6) + 数据场(64) + CRC(16) + ACK(2) + 帧结束(7)
// 总位数 = 1 + 12 + 6 + 64 + 16 + 2 + 7 = 108位
// 传输时间 = 108 / 250000 = 0.432ms

// 500kbps下
// 传输时间 = 108 / 500000 = 0.216ms

看到没?500kbps比250kbps快了一倍。对于充电控制这种实时性要求高的场景,快就是优势。

但是——凡事都有但是——500kbps对总线硬件要求更高。线束质量、终端电阻、节点数量都会影响通信质量。

我的建议:如果整车CAN网络支持,优先选500kbps。如果整车网络是250kbps(比如一些老平台),那就别硬上500kbps,保持一致最重要。我曾经在一个项目中强行把OBC改成500kbps,结果跟VCU的250kbps不匹配,整车通信全部乱套。

嗯,关于OBC的CAN通信网络架构,今天就聊到这儿。下一章咱们深入讲讲OBC的CAN报文格式和信号定义,那才是真正干活要用到的东西。


公众号:蓝海资料掘金营,微信deep3321