2.1.2 LIN 通信接口设计
在现代汽车中总线技术越来越多的得到应用,CAN/LIN网络已经成为以分布式为基础的车载电子网络的主流发展方向。CAN 总线作为高速传输总线具有速度快、带宽高、功能多的突出特点,但其成本比较昂贵;LIN 总线是一种低端总线,但其在降低成本方面具有突出优势,适合对网络速度要求不高、实时性不强的数据的传输。因此,在不需要CAN 总线的带宽和速度的场合下,LIN 总线补充了CAN 总线引导的汽车多路复用网络的现有总线技术。电池的温度、电流、电压检测并不要求极高的实时性和总线速度,因此LIN 总线能很好地契合电池管理系统的要求。
DSPIC30f4012 芯片没有LIN 总线的接口,但具有SCI 通信接口,本文选用TPIC1021 芯片作为SCI 与LIN 总线转换的芯片,如图3 所示。SCI 通信引脚U1RX 与U1TX 经过磁耦合隔离器件电气隔离后,分别接到LIN 驱动器的LIN_RXD 和LIN_TXD,经过转换最后在LIN 引脚输出LIN 总线信号。在底层控制器Dspic30f4012 和LIN 收发器TPIC1021 之间加上一个磁耦合隔离器件ADUM1201ARZ,用来提高电池组检测系统通信的抗干扰能力和解决分布式检测中"共地"产生短路的问题,有效地把各个检测单元的电气连接隔离开来,同时也把底层电压与上层LIN 总线隔离开来。当LIN 收发器作为主机节点时,需要把图3 中的J3 跳线用跳针短接,用于从机节点时不要跳针短接。
2.2 电池管理系统软件设计
2.2.1 电池管理系统的软件设计和总体结构
ECU 中的软件设计包括底层ECU 和上层ECU 软件设计。底层ECU 的软件设计主要包括电压、电流、温度的采集程序与采集结果的计算程序、数据通信程序、中断程序等;上层ECU 的软件设计主要包括SOC 估算程序、LIN 总线通信程序、故障分析及报警程序、电压、电流、温度和荷电状态等显示程序、时钟程序、中断程序等。整个程序设计采用结构化和模块化的编程方法来实现。上层ECU 的主程序流程图如图4 所示。
其中,电池的电压检测包括单体电池电压的检测和电池组电压的检测。当单体电压超限时,系统能够判断超限单体电池的编号,判断单体电池是低电压超限还是高电压超限,在显示器上显示并且有声音报警。电池组电压超限时程序能够分析出是何种原因超限,以此来进入保护程序。电池温度的检测包括单体电池温度的检测和环境温度的检测,当温度超限时,系统通过检测到的数据能分析温度超限的原因,以此进入保护程序。电池的荷电状态超限主要是指电池剩余电量过低,继续放电可能会影响电池的寿命。
2.2.2 LIN 通信的实现
LIN 协议是一种开放的总线协议,一个完整的报文帧由报文头和响应组成。每一次数据的传送都由主机节点开始,标志着一次数据通信过程报文帧的开始[3].
图5 为5 号单体磷酸铁锂电池LIN 总线标识符场,以此为例说明LIN 总线标识符场的设定。5 号单体电池ID 位为0101,所以此节单体电池的ID 为0x5,ID4、ID5 设为01,即设定发送的数据场字节为4 个字节,通过前面的奇偶校验得到奇偶校验值为0、1,如图5 所示。
由于各个信号的范围不同,电压、电流、温度信号所用到的数据位数也不同,电压的范围在0~5 V 内,电流在0~20 A内,温度在-40~125 ℃范围内,所以本文在数据场中用第1个字节和第4 个字节的低两位,共10 位来表示电压;用第2个字节和第4 个字节的中间4 位,共12 位来表示电流;用第3 个字节和第4 个字节的高两位,共10 位来表示温度。由于电压、电流、温度都精确到小数点后,在数据场中表示小数比较复杂,本文用实际参数值的10 倍或100 倍在数据帧中表示,如图6 所示。
表1 为各单体电池所对应的LIN 总线节点的ID 资源分配表。
上层ECU作为LIN总线的主机节点,当LIN主机节点向单体电池从机节点请求数据时,LIN 总线上将进行从机节点到主机节点的数据传输,此时LIN 主机节点向总线发送报文帧头,总线上的LIN 从机节点接收报文帧头后,判断是否与自己的ID 匹配,若匹配发送报文帧响应,LIN 主机节点接收报文帧响应,完成主机节点的数据请求。