汽车内部挂有很多的ECU节点,当其中一个节点发生故障进入总线关闭状态时,会很大程度上影响整车CAN网络的通讯。例如,当汽车发生碰撞时,传感器将电信号传送给安全气囊ECU,将信号进行处理,当确定需要打开安全气囊时,ECU会立即发出点火信号,气体发生器才会充满气囊,对驾驶员和乘客提供安全保护,如下图1所示。若此时安全气囊ECU处于总线关闭状态,则无法正常弹出气囊,会导致严重后果。

打开网易新闻 查看更多图片

图1 ECU工作示意图

因此,对于新能源汽车行业工程师,了解CAN总线Bus Off原理是非常有必要的。CAN控制器可以判断出错误的类型是总线上暂时的数据错误(如外部干扰等)还是持续的数据错误(如单元内部故障、驱动器故障、断线、短路等)。由此,当总线上发生持续数据错误时,CAN控制器内部的错误计数器累积到总线关闭的阈值,可将引起此故障单元从总线上隔离出去,不参与跟总线其他节点的网络通信。如图2所示:

图2 错误检测机制

哪些因素会导致CAN总线Bus Off?

引起错误的原因大多是由物理故障引起的,主要是CAN线路产生的。其中包括:CAN_H开路、CAN_L开路、CAN_H对CAN_L短路/开路、CAN_L对VBAT短路、CAN_H对GND短路、CAN_L对GND短路、终端电阻开路等。

除了物理层线路因素,还有可能因为CAN控制器或收发器等元器件故障导致。同时,也有可能是由于CAN总线信号干扰导致的CAN信号收发不正确,严重时会导致不能正常发送报文,从而更容易导致CAN总线关闭。

例如,新能源汽车通常是指纯电动汽车或者混合动力汽车,其特色是使用电池、电容来存储能力,然后通过逆变的方式变成交流,带动电动机驱动车辆。逆变产生的巨大电流形成强干扰,串扰到CAN总线上,导致控制器死机、损坏或者通讯中断,车辆运行不稳定。

CAN总线Bus Off恢复的解决方案

如果出现了Bus Off,总线上的节点需要做一些动作,例如重启CAN控制器或是重新上电,但是这些都只是一些补救措施,最根本的还是需要找到引起Bus Off的根源。

当发生CAN总线关闭时,我们可以检查Bus Off寄存器的值,对CAN控制器的驱动及相关寄存器进行初始化操作。初始化完成后,CAN总线关闭故障就会立即解除。为了避免该节点在CAN网络中频繁发生总线关闭问题,建议在初始化后,不要立即对外发送CAN报文。

从下图所示可以看出,当节点进入总线关闭状态后,如果MCU仅是开启自动恢复功能,CAN控制器在检测到128次11个连续的隐性位后即可恢复通信,在实际的CAN通信总线中,这一条件是很容易达到的。我们已经知道,当进入总线关闭状态时,节点已经发生了严重的错误,处于不可信状态,如果迅速恢复参与总线通信,具有较高的风险,因此实际应用中,往往会通过MCU对CAN控制器总线关闭状态的恢复过程进行编程处理,以控制节点从总线关闭状态恢复到错误主动状态的等待时间,如图4所示,具体包括“快恢复”和“慢恢复”策略,两种策略一般同时应用。

打开网易新闻 查看更多图片

图3

上文也提到过,由于汽车内部存在强干扰,也会导致CAN总线关闭。针对这种现象,我们通过以下方式进行处理:

  • 由于汽车内部存在强电流产生的空间磁干扰,应该将CAN线缆双绞程度加大;

  • CAN接口设计采用CTM1051隔离收发器、隔离限幅,防止ECU死机;

  • CAN接口增加磁环、共模电感等效果好的感性防护器件;

  • 外接专用的信号保护器消除干扰,如ZF-12Y2;

  • 使用网桥中继设备CANBridge对部分强干扰源进行隔离。

综合上述,汽车CAN总线关闭故障发生时,应分析物理层包括CAN线路、CAN控制器及收发器、CAN信号干扰等外在因素,同时分析CAN寄存器及软件处理,重新初始化CAN驱动和恢复正常后,定时尝试往外发送报文。

来自谈思实验室公众号