汽车内部挂有很多的ECU节点,当其中一个节点出现故障进入总线关闭状态时,会非常大程度上影响整车CAN网络的通讯。例如,当汽车发生碰撞时,传感器将电信号传送给安全气囊ECU,将信号做处理,当确定需要打开安全气囊时,ECU会立即发出点火信号,气体发生器才会充满气囊,对司机和乘客提供安全保护,如下图1所示。若此时安全气囊ECU处于总线关闭状态,则无法正常弹出气囊,会导致严重后果。
因此,对于新能源汽车行业工程师,了解CAN总线Bus Off原理是非常有必要的。CAN控制器能判断出错误的类型是总线上暂时的数据错误(如外部干扰等)还是持续的数据错误(如单元内部故障、驱动器故障、断线、短路等)。由此,当总线上发生持续数据错误时,CAN控制器内部的错误计数器累积到总线关闭的阈值,可将引起此故障单元从总线上隔离出去,不参与跟总线其他节点的网络通信。如图2所示:
引起错误的原因大多是由物理故障引起的,主要是CAN线路产生的。这中间还包括:CAN_H开路、CAN_L开路、CAN_H对CAN_L短路/开路、CAN_L对VBAT短路、CAN_H对GND短路、CAN_L对GND短路、终端电阻开路等。
除了物理层线路因素,还有可能因为CAN控制器或收发器等元器件故障导致。同时,也有一定的可能是由于CAN总线信号干扰导致的CAN信号收发不正确,严重时会导致不能正常发送报文,从而更容易导致CAN总线关闭。
例如,新能源汽车通常是指纯电动汽车或者混合动力汽车,其特色是使用电池、电容来存储能力,然后通过逆变的方式变成交流,带动电动机驱动车辆。逆变产生的巨大电流形成强干扰,串扰到CAN总线上,导致控制器死机、损坏或者通讯中断,车辆运行不稳定。
如果出现了Bus Off,总线上的节点需要做一些动作,例如重启CAN控制器或是重新上电,但是这些都只是一些补救措施,最根本的还要找到引起Bus Off的根源。
当发生CAN总线关闭时,我们大家可以检查Bus Off寄存器的值,对CAN控制器的驱动及相关寄存器进行初始化操作。初始化完成后,CAN总线关闭故障就会立即解除。为了尽最大可能避免该节点在CAN网络中频繁发生总线关闭问题,建议在初始化后,不要立即对外发送CAN报文。
从下图所示能够准确的看出,当节点进入总线关闭状态后,如果MCU仅是开启自动恢复功能,CAN控制器在检测到128次11个连续的隐性位后就可以恢复通信,在实际的CAN通信总线中,这一条件是很容易达到的。我们已知道,当进入总线关闭状态时,节点已发生了严重的错误,处于不可信状态,如果迅速恢复参与总线通信,具有较高的风险,因此实际应用中,往往会通过MCU对CAN控制器总线关闭状态的恢复过程进行编程处理,以控制节点从总线关闭状态恢复到错误主动状态的等待时间,如图4所示,具体包括“快恢复”和“慢恢复”策略,两种策略一般同时应用。
上文也提到过,由于汽车内部存在强干扰,也会导致CAN总线关闭。针对此现状,我们通过以下方式来进行处理:
综合上述,汽车CAN总线关闭故障发生时,应分析物理层包括CAN线路、CAN控制器及收发器、CAN信号干扰等外在因素,同时分析CAN寄存器及软件处理,重新初始化CAN驱动和回到正常状态后,定时尝试往外发送报文。