电动汽车,以电池和电机系统取代了内燃机汽车的发动机系统,使得汽车上主要的结构和电气件发生了很大变化。在传统汽车上已经比较成熟的CAN总线技术,电动汽车仍然需要作出必要调整才能够使用。
1 电动汽车的CAN协议
常用车辆CAN总线通讯协议,大多直接采用SAE-J1939的形式制定。电动汽车首先遇到了电池系统,电机系统等新加入电气需要重新设定PGN码等问题。CAN协议始终处在诸侯割据的状态。在过去的几年中,国家及相关机构也一直在对电动汽车的CAN通讯协议进行研究,希望形成统一的协议体系。统一的CAN协议,首先是零部件供应商的福音。当前主流主机厂,每家都有自己的整车通讯协议,各个供应商,需要根据整车厂的定义,修改零部件的CAN协议。
制定电动汽车的CAN协议,基本的思路是在SAE-J1939的基础上,根据自身电动汽车的需求,做出必要的调整。
1.1 原则
常用的CAN总线协议标准SAE-J1939中,标准给OSI(开放系统互联参考模型)定义成七层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。其中物理层和数据链路层是最基础的两层,在标准ISO 11898中进行定义,并且不可变更。而SAE-J1939定义了应用层的相关会话规则,所谓通讯协议。因此我国的CAN 通信协议的制定主要包括物理层和应用层协议两个方面,其中最主要的工作还是集中在应用层上。
1.2 物理层
物理层对一系列硬件参数进行了规定,包含总线供电电压、接入系统设备数目、允许的连接器类型、线缆长度以及波特率等。我们的物理层特性基本完全继承J1939物理层规范,相应的,参数基本与J1939保持一致。比如CAN2.0B,接入系统的设备书目,最多30个;终端电阻阻值120欧姆,波特率250bits,线束建议采用双绞线、同轴电缆等等。
1.3 应用层
应用层主要规定的内容包括:标识符的分配,报文的发送和接收规则,系统内节点的优先级分配等等。
鉴于电动汽车与传统汽车相比存在的很多不同特点,针对一款新车型建立CAN通讯协议,需要明确的事项包括:确定拓普网络结构,具体分配节点地址源码,定义报文发送周期等等。
整车CAN通讯协议的基本拓扑结构
电动汽车上的电气设备数量比较多,使得通讯系统也变得复杂。下面是两种整车通讯的结构形式,前者列举的是混合动力汽车单一总线结构的拓扑图,后者是一种纯电动汽车CAN通讯网络的情形,电池、电机、故障诊断挂在同一条CAN网络上,其余电气集中在另外一条网络上。两条网络不能直接交换数据,只能以整车控制器VCU为中转站,进行沟通。
从这两个实例也可以看出,CAN总线的拓扑结构,常常四根据不同车辆的实际需要设计的,目前还没有统一的要求。
多个设备集中在同一条信息通道上,对总线波特率的要求也会相应比较高,同时,系统冗余比较小的话,系统出错率会上升。
需要增加定义的参数
电动汽车CAN总线系统,应用层部分参数需要重新定义。定义过程需要综合考虑系统内节点的重要程度,对刷新频率的需求等因素,制定应用层协议中需要明确几个参数,节点源地址、节点优先级,参数组编码。
1)节点地址(Source address,SA)。CAN系统中,每个节点会获得一个唯一的地址码,用以标示节点身份。一个节点如果包含几种功能,则不同功能可以获得不同地址码。网络中重要性最大的节点,地址代码数字越小,相应的优先级越高。在CAN报文的帧定义中,专门设置了地址代码位,下图是CAN2.0B29位扩展帧的形式。
2) 优先级(Priority,P),优先级P,占用3个2进制位,有8中不同级别。最高0级和最低7级,报文优先级可以设置,可以修改。报文优先级的主要影响因素是节点信息的发送频率,越是重要性高的节点,信息刷新频率也越高,占用总线的权限就越高,几个因素有联动关系。
3)参数组定义,同一个设备内不同的功能构成参数组,为了提高总线的使用效率,刷新频率接近的参数尽量放在一个参数组内发送,可以减少节点信息发送次数,提高总线利用率。比如同一个设备的电流监测值和电压监测值就可以放在一个参数组中。
新节点定义
新加入系统的节点都需要重新分配地址,每个节点内的参数再进行参数配置。在J1939基础上新增的节点包括:整车控制器,自动换挡变速器,DCDC,电动助力转向,电动助力制动,电机控制器,电空调控制器,动力电池管理系统。
2 CAN报文解析
CAN报文解析,是技术人员处理电动汽车故障的常用方法,基本过程:将设备准备齐全,获得通讯协议和报文原文,翻译,针对故障现象,得出初步处理建议。
下面内容来自钟文浩的论文《电动汽车CAN报文的解析及应用》,详细介绍了解析CAN报文的全部过程。
获得CAN报文的过程
准备软硬件环境,硬件周立功CAN卡,软件使用ZLGCANTest,安装在电脑上;通过CAN卡连接整车CAN或者调试端口,通过软件交互界面获取CAN报文。
CAN2.0B报文基本格式
接收到的报文,是一串十六进制的字符,而报文格式定义和位数是按照二进制定义的。29位扩展标识符,报文帧格式如下图所示。表格中,上面一行为字段代号,下面一行表示字段的位数。SA为报文的源地址,有8位。
报文基本组成
如下面抓图所示,我们初始能够获得的是帧ID的一串字符,就是前面的29位扩展标识符,通过帧ID找到目标所在行,进而找到数据段。数据段包含的信息,是我们需要的部分。
数据段的组成
数据段由8个字节组成,对应通信协议中约定的含义。每个字节有2个字符,前边字符代表高4位,后边字符代表低4位。
例如,一串报文1818D0F3 ce 0d 00 7d 00 6d 1100(ID是1818D0F3)。第1个字节ce中的c为高4位,e为低4位。如果通讯协议规定,第1、2字节表示总电压,而且注明Byte1为低字节,Byte2为高字节,那么解析时就应该为:0dce。
具体CAN报文解析过程
收到的报文为:1818D0F3ce 0d 00 7d 00 6d 11 00。
第一、二字节,协议中规定了,1818D0F3ID帧内,第一、二字节表示电压,并且,高字节表示高字节表示电压数值的高位,低字节表示电压数值的低位,比例因子0.1V。
数据中0dce代表总电压,转为十进制为3534,乘以0.1 V的单位,则得到总电压值为353.4 V。
第三、四字节,协议中规定报文的第三、四字节表示总电流,又总电流的单位为0.1 A,偏移量为32000。数据中7d00转为十进制为32000,乘以0.1再减去3200的偏移量0,则说明此时电池组没有被充电或放电,电流为0。
第六、七字节,协议中规定报文的第六、七字节表示最高单体电池电压及位置。单体电池电压单位为0.01 V,最高4位代表箱号。数据中116d,其中1代表箱号,即最高电池电压在第1箱。16d代表最高电池电压,转为十进制为365,乘以0.01 A的单位,则得到最高电池电压为3.65 V。
十六进制转换成十进制数的方法,从最低位开始,16的0次方加第一位+16的1次方加第二位数……比如前文中的116d,最高4位代表箱体编号,16^0+1=1,因此箱体号为1;后面的12位代表单体电压,计算方式(16^0+13)+(16^1+6)+(16^2+1)=365,算式中的13是报文中的d。