基于SAE J1939协议的车辆信息采集与诊断模块
扫描二维码
随时随地手机看文章
摘要:本文在CAN总线技术与SAE J1939协议的基础上,提出了基于Cortex-M3内核微控制器的车辆信息采集与诊断模块系统设计。详细介绍了SAE J1939协议的报文及内容格式,以及系统硬件、软件开发过程,并指出了设计中需要注意的环节。该模块通过对CAN总线及各传感器数据的读取和处理,能够稳定可靠地提供车辆工况数据,并可集成到车载多媒体系统和虚拟数字仪表等其他车载产品中。
关键词:车辆工程;SAE J1939协议;CAN总线;Cortex-M3
0 引言
当前,汽车电子化程度不断提高,大量采用基于微处理器的电控单元(ECU)对汽车的各个功能模块进行信息采集及控制。由于ECU数量众多,为了提高信号的利用率,要求在不同的ECU间,大量的数据状态信息能够实现共享,大量的控制信号能够实时交换。同时,车载多媒体设备、虚拟数字仪表等产品也需要实时获取车辆工况信息。因此传统线束已远远不能满足这种需求。
CAN总线及基于CAN的车辆通信应用层协议提供了解决上述问题的途径。目前SAE J1939是汽车行业应用最为广泛的CAN应用层协议之一。本文提出的基于CAN和SAE J1939的车辆信息采集与诊断模块能够实时获取车辆的车速、油压、制动压力、发动机转速等重要信息,在车辆发生故障时及时定位车辆故障,并可集成到车载多媒体、虚拟仪表等产品中,为车辆驾驶人员提供直观实时的车辆工况。
1 SAE J1939协议介绍
SAE J1939协议是美国汽车工程师协会(SAE)在CAN2.0B协议基础上制定的客车和重型货车网络通信应用层协议,在目前汽车电子网络中得到广泛应用。该协议采用CAN总线的数据帧封装其数据信息,并明确规定了汽车内部各ECU的名称、地址、通讯协议、优先级等信息,使用多路复用技术为车辆各传感器、执行器和控制器提供建立在CAN总线基础上的标准化高速网络连接,在不同的ECU间实现高速数据共享,以期有效减少线束数量并提高车辆电子控制系统的灵活性、可靠性、可维修性。目前,车辆的ECU产品大都带有遵循SAE J1939协议的CAN总线接口。这为车辆信息的快速采集和故障的在线诊断定位提供了便利。
1.1 SAE J1939报文格式
SAE J1939在通讯中是负责数据传输的传输协议,其功能分为数据的拆分打包和重组及连接管理两部分。其数据帧是以PDU(协议数据单元)为单位传送信息,每个PDU相当于CAN协议中的一帧。PDU由29位标识符和O~8个字节的数据所组成,如表l所示。SAE J1939利用29位标识符(CAN扩展帧)提供一种完整的网络定义。表1中,P位为决定报文优先级的前3位;R是保留位:DP是数据页位;PF场识别两个PDI格式(PDUl、PDU2):替代远程请求位SRR和标识符扩展位IDE在CAN2.0B中己详细定义,并未包含在PDU内;PS场由PF值决定其包含一个目标地址(DA)还是包含一个对PDU格式PF的组扩展(GE);SA为源地址。
1.2 SAE J1939应用层
应用层定义了针对车辆应用的信号(参数)和报文(参数组)。应用层通过参数描述信号,给每个参数分配了一个19位的可疑参数编号(SP-N);此外还通过参数组描述报文,给每个参数组分配了一个24位的参数组编号(PGN)。SPN用来标识与ECU相关的故障诊断元素、部件或参数组中参数;PGN用来唯一标识一个特定参数组。除已分配的参数和参数组外,用户还可通过分配未使用的SPN给自定义参数和定义专有报文对应用层进行补充。
2 模块设计开发
2.1 硬件电路设计
设计的模块由微控制器、CAN总线接口、信号采集处理电路、接口电路等部分组成,如图1所示。在实际的车载环境中,此模块通过CAN总线获取报文,并根据SAE J1939协议计算得出车辆的发动机转速、节气门开度、水温以及故障代码等信息,而燃油量、转向泵压力、制动气压等其它信息则从相应传感器以模拟量、开关量、脉冲量等形式获取,在经过信号采集处理电路进行分压滤波整形处理后直接送往微控制器进行A/D变换处理。这些信息经过微控制器计算处理后通过USB和UART接口传送给车载多媒体设备或虚拟数字仪表设备。
主控处理器采用ST公司的STM32F103C8T6,它基于ARM公司新一代32位Cortex-M3内核,可提供1.25 DMIPS/MHz的处理能力,内部带有ADC、I2C、UART、USB等外围接口,特别是其内部带有支持CAN 2.0B协议的CAN控制器,位速率达lMb/s,具有两个接收FIFO,3级14个可调节的滤波器,可收发ll位标准帧或29位扩展帧。因此可以省去类似设计中必须带有的CAN协议接口器件SJAl000,大大降低了外围电路的成本。
图2给出了模块CAN总线接口部分的电路。系统采用带隔离及TVS保护的通用CAN收发器CTM8251T为CAN控制器与物理总线之间提供接口,CTM8251T内部集成了信号隔离电路和所有必需的CAN电平转换电路,具备差动发送和接收功能,同时带有TVS保护,可以支持最高1Mb/s的通讯速率,单芯片实现了CAN节点的数据收发、隔离、保护功能;从而省却了传统设计中采用的光电耦合器件、DC-DC隔离、CAN收发器等多种器件,既简化了设计又节约了成本。
汽车的电磁环境非常复杂,既有内部各模块之间的相互干扰(包括雨刮器、冷却风扇电机、发电机等产生的传导干扰、辐射干扰),也有外界对其产生的干扰(环境电磁场、人体放电和大自然的干扰雷电)。因此本模块的设计主要采用了以下几个方面的抗电磁干扰措施:首先,加装铁氧体互感器件抑制线路板的辐射和外部传导干扰;其次,采用了带隔离及过压保护功能的CAN接口器件;再次,在输入电源处采用TVS管抑制外部传导干扰。
2.2 软件设计
系统的软件设计采用Keil RealView MDK-ARM环境编写,通过J-Link调试仿真器与STM32 F103C8T6的JTAG接口连接,实现在线仿真调试。
ST公司为STM32系列微控制器开发了专门的固件库和接口函数,大大简化了软件开发的过程。系统上电后首先对微控制器的RCC(重启和时钟控制)模块以及NVIC(嵌套向量中断控制器)模块进行初始化,并使能CAN中断,设置CAN屏蔽码和验收码。CAN模块的初始化过程是这样的:a.根据CAN节点相关信息初始化一个CAN_InitTypeDef型结构,并调用CAN_Init函数对CAN接口进行初始化;b.创建CAN_FilterInitTypeDef结构体,调用CAN_FilterInit函数对CAN过滤器进行初始化;c.调用CAN_ITConfig函数对CAN中断源进行使能设置。系统初始化完成后,等待CAN总线接收中断的产生,并判断总线数据是否满足屏蔽条件,将29位标识符报文与验收码、屏蔽码值逐位比较,屏蔽码用于定位相关位(0为相关,1为不相关)。仅当标识符中的相关位与验收码相应位相同时,系统才接收报文;如满足屏蔽条件则从寄存器读取数据并存入缓冲区,并通过CAN Receive函数读取相应数据,再根据SAE J1939协议判断计算车辆工况及故障代码等信息,处理后通过USB或串行口发送到车载多媒体设备和虚拟仪表进行显示。例如:接收的数据为0C FEF2 00 xx xx xx 0D 15 xx xx xx (xx为任意数据),若验收码为Ox00000000,屏蔽码为OxlFFFFFFF,则接收该报文。根据SAE J1939-71协议,此报文为PGN65266,来自发动机ECU;可以得知第4、5字节为平均油耗,并遵循低位在前高位在后的传输方式,计算出车辆平均油耗=原始数×分辨率+偏移量=5389×1/5 12+O=10.5km/L。同理可计算其他车辆工况数据。图3为CAN总线数据接收程序流程图。
3 结语
本文介绍了基于CAN总线和SAE J1939协议的车辆信息采集与诊断模块的设计开发过程,利用STM32F103C8T6微控制器和CAN隔离收发器CTM825lT等器件实现了车辆信息的实时采集,最大限度地利用了器件本身的接口功能并降低了外围电路的成本。本模块工作稳定、性能可靠,软件各部分功能运行完好,并可与影音娱乐产品和虚拟仪表产品相互结合,有一定的实用价值。随着汽车电子化程度的不断提高,CAN总线和SALE J1939协议必将得到更为广泛的应用。