SAE J1939协议规范及通信原理
在早期载货卡车、大客车上的电子系统采用串行通信的方法,用SAE J1587标准来实施,但是其速度较慢且传递的数据量少,不适用于高速通信的场合。近年来CAN总线已发展成为车辆电子系统的主流总线,载货车及大客车已制定了SAE J1939协议作为它的通信标准。SAE J1939协议是由SAE组织发布并以CAN2.0B技术规范为基础的串行通信协议标准,它是一种支持闭环控制的在多个ECU之间高速通信的网络协议,通讯速率最高可达到250Kbit/s。J1939协议以CAN2.0为网络核心,取自ISO(国际标准化组织)定义的OSI模型中的四层:物理层、数据链路层、应用层以及网络管理层,其中CAN2.0技术规范定义了物理层及数据链路层规范,不同的汽车厂商可以制定符合自身需要的应用层协议来建立更加完善的系统。SAE J1939支持的开放系统互连(OSI)模型如图1所示。
物理层实现网络中ECU的电气连接。ECU的数目限制于总线线路的负载承受能力,在特定网段上ECU的最大数目设定为30。物理介质为非屏蔽或屏蔽双绞线。双绞线特性阻抗为120Ω,电流对称驱动,数据波特率设定为250kb/s。
在数据链路层,J1939协议对CAN标识符进行了重新定义,并且仅使用CAN扩展帧格式作为其标准的通信消息帧格式并进行了详细的划分和定义,而CAN标准帧则留给用户作为自定义通信消息帧。J1939协议采用PDU(Protocol Data Unit,协议数据单元)传递信息,对CAN2.0B扩展格式29位标识符进行了重新定义,它包含了以下几个部分:优先权(P)、保留位(R)、数据页标识(DP)、PDU格式(PF)、PDU特定域(PS)、源地址(SA)。
SAE J1939PDU的数据格式如表1所示。
SAE J1939协议采用参数群编号(PGN)作为一组参数的标号,用于标识命令信息、请求信息、数据信息、确认应答和否定应答信息的。在J1939协议的应用层中,一个参数组号可以代表一个或多个参数。
网络层的主要作用是用于定义两个或多个SAE J1939网络间的网络连接设备网桥的消息过滤功能。通过采用消息过滤功能,使两个SAE J1939协议的网络得以共享期望的PGN而无需将过度的网络资源消耗在不期望的PGN上。
J1939协议应用层中的参数主要可分为三类:传输信号,离散参数(测量值),以及控制命令传递值(状态量)。状态参数表示具有多态信号的某一种状态,如发动机刹车使能/禁能,巡航控制激活/关闭,扭矩/速度控制超载模式,错误代码等;而测量参数则表示所接受到的信号的值的具体大小,如缸内爆发压力、最大巡航速度、发动机转速等。不同类型的参数、其范围类型也不同。在J1939协议中数据的传输范围并不等于传输数值的范围。对于物理数据J1939有如下的计算公式:物理数据=比例系数×传输数值+偏移量。
为了能更全面地定义应用层中各个物理参数的范围和精度,J1939协议为各物理参数定义了SLOT(比例Scaling,界限Limit,偏移量Offset和传送Transfer Function)这些概念,主要用于定义新的参数。Transfer Function:传输功能表示了数据的用途;Scaling:比例系数表示的是物理数据的精度;Offset:偏移量决定了物理参数数据范围的初始量;Limit:数据范围则是根据传输数值范围、比例系数和偏移量所决定的物理参数的数据范围。在SAE J1939中增加新参数时,可以在给定的参数类型中尽量保持数据的一致性。
CAN通讯平台硬件设计
所要设计的CAN通讯平台是在发动机、变速器以及制动系统之间传递数据,因此需要具备基本的接收和发送功能。通讯平台硬件系统主要由CAN控制器和CAN驱动器收发器两个部分组成。
CAN控制器硬件选用的是英飞凌(Infineon)公司的XC164CM系列单片机,它集成有CAN控制模块。该单片机的TwinCAN模块包含两个全CAN功能节点,两节点可以独立工作或者通过网关功能交换数据帧或远程帧,该模块还拥有32个CAN消息通道,这32个报文对象可以被独立地分配到两个CAN节点之一并设置为发送或者接收对象,它们可以设置成处理带11位或29位标识符的帧。这个CAN控制器符合CAN规范V2.0B,每个CAN节点都有控制寄存器,支持速率可到1Mbit/s。
CAN驱动器收发器选择NXP公司的PCA82C250芯片给CAN控制器与物理总线之间提供接口。该芯片提供对总线的差动发送和接收功能,也可以支持最高到1Mbit/s的通讯速率。其驱动电路内部具有限流电路,可防止输出极对电源、地或负载的短路。当结温超过160℃时,两个发送器输出端极限电流将减小,从而限制了芯片的温升,实现了过热保护。同时,PCA82C250芯片采用了双线差分驱动,有助于抑制汽车在恶劣电器环境下的瞬变干扰。
CAN总线接口电路的设计在遵循SAE J1939协议的同时,要考虑对接口电路进行一定抗干扰和保护措施。连接XC164CM单片机与PCA82C250芯片的硬件电路设计如图2所示。
XC164CM单片机具有两个独立的CAN节点A、B,故选用两片PCA82C250分别与其引脚的TxD端与RxD端相连,总线连接的CAN节点1、2分别代表发动机电控单元和AMT的电控单元,数据由CAN节点1和CAN节点2发出,经过该通讯平台后传给另一个节点。SAE J1939协议中需要使用屏蔽双绞线作为CAN总线的通讯导线,选用PCA82C250的高速工作模式,只要将Rs引脚直接接低电平即可实现。
根据SAE J1939-11中要求,线性总线的主要中枢链路的每个终端都必须以一个合适的电阻来结束,用以提供CAN_H和CAN_L导线的正确终端,其取值范围应在110W~130W之间,额定值为120W。实际设计时在PCA82C250的CANH与CANL之间接入一个阻值为120W的电阻RL作为CAN总线抑制反射的终端电阻。CAN_H和CAN_L与地之间各并联一个30pF的电容,可以起到滤除总线上的高频干扰的作用,并且具有一定的防电磁辐射能力。
电路设计时考虑到进一步提高总线节点的抗干扰能力,有时在CAN控制器和CAN驱动器之间加入光耦器件,并使用隔离电源供电。但是增加光耦也会增加总线节点的循环延迟,信号在每个节点要从发送和接收路径通过这些器件两次,这将减少当位速率给定时可使用的最大的总线长度。
CAN通讯平台软件流程
软件的设计工作主要是基于底层硬件的CAN控制器驱动程序设计,该部分主要是面向CAN控制器的硬件系统的配置和CAN报文帧的收发处理,从而提供了面向通信层的服务功能,这由CAN模块的初始化函数和CAN报文帧的发送接收函数来完成。
实车验证
将已开发CAN通讯硬件平台搭载在解放牌平头柴油牵引车上,断开AMT电控单元与发动机和制动系统之间的CAN总线,接入CAN通讯平台后进行实车测试,试验场地为长直坡道。重型车先平路起步后上坡,连续换挡至最高档位并最终制动,整个实验过程中没有出现控制错误,车辆能够正常工作,利用串口传递数据观测总线实时的信息流,得到了部分通讯数据(略)。
CAN通讯平台上接受和发送的报文均符合SAE J1939协议,包含了在CAN通讯平台上接收和发送到来自发动机、AMT以及制动系统的部分报文内容,先举例说明一组来自发动机的报文如表2所示。
一条报文包含8字节的数据域,除了上述内容占据的字节之外,其余位均作保留位。从这些数据可以看到发动机电子控制器的周期性发送,并且只有在CAN通讯平台接收到更新的数据后,才会向总线发送更新的报文内容,避免给总线带来负担。
结语
本文从CAN总线和SAE J1939协议特点和原理的介绍入手,通过设计符合J1939通讯协议的硬件和软件模块,实现了在重型车上利用该CAN通讯平台完成数据实时传递与共享的功能,并且在实车上通过了发动机、变速箱和制动系统三方通讯的验证,为使用J1939协议开发CAN通讯平台提供了一定的思路。