商用车在线故障诊断系统设计与实现
骆志宏;许勇;马秋香
汽车故障诊断仪
【摘 要】为方便商用车监测运行状态与故障诊断,设计了一种基于SAE J1939协议的在线故障诊断系统;搭建了以S3C6410为主控制器的嵌入式Linux系统平台,详细介绍了故障诊断系统的硬件、软件以及应用层设计方案;该系统能够在线解析和显示车辆报文信息,保存CAN网络接收到的报文;实验结果表明,该系统运行稳定,实时性好,能够满足车辆在线监视和诊断的需要.
【期刊名称】《计算机测量与控制》
【年(卷),期】2015(023)004
【总页数】4页(P1098-1101)
【关键词】CAN总线;J1939协议;车载诊断;Linux系统
【作 者】骆志宏;许勇;马秋香
【作者单位】桂林电子科技大学电子工程与自动化学院,广西桂林541004;桂林电子科技大学电子工程与自动化学院,广西桂林541004;东风柳州汽车有限公司技术中心,广西柳州 545025
【正文语种】中 文
【中图分类】TP3
0 引言
随着控制局域网CAN(controller area network)总线被广泛应用于汽车内部网络各电子控制单元(ECU)间实时数据交换[1],汽车电子化程度不断提高,电气电子设备在车辆上的大量使用增加了汽车运行的安全性能和效能;但同时也增加了汽车状态监控与故障诊断的内容和复杂性,给汽车维修工作带了更多的困难。目前汽车故障诊断仪器种类繁多,且大多数是针对乘用车,商用车故障诊断仪不仅成本较高而且功能不够完善。针对上述问题,提出了一种基于S3C6410和Linux系统的商用车在线故障诊断系统,实现了车辆故障诊断、参数监视、报文数据存储等功能,优化了商用车故障诊断功能的不足。
1 故障诊断系统总体设计
考虑到车辆的一些重要ECU 参数状态需要实时关注,如发动机转速,冷却液温度等,另一方面除了故障信息和一些重要参数外,其他ECU 的报文信息也可能对操作人员有帮助,系统需要具有接收存储整车报文数据的功能。为满足设计要求,系统以故障诊断为主,同时辅助设计了车辆仪表界面和报文接收界面来分别对特定ECU 参数进行动态监视和接收存储CAN 网络上的报文数据。
商用车在线故障诊断系统结构如图1所示,其工作原理为,各节点挂接在CAN 网络总线上,用于模拟车辆ECU 向CAN 网络发送报文,主控制器通过CAN 模块接收CAN 网络上的报文并进行过滤、解析显示和存储等相关处理,以实现对车辆进行在线诊断,参数监视和报文接收。
图1 故障诊断系统结构框图
1.1 系统硬件设计
根据设计要求,系统的硬件部分主要包含3个部分:系统主控制器、CAN 控制收发模块和CAN 网络节点设计。
系统选用Samsung 公司生产的S3C6410作为处理器,S3C6410是基于ARM1176JZF-S内核的16/32位RISC 微处理器,主频为533 MHz,最大可达到667 MHz。S3C6410处理器内部没有集成CAN 控制器,为实现与CAN 网络的通信采用MCP2515作为CAN 控制器,MCP2551作为CAN 收发器。MCP2515是一款独立CAN 协议控制器,完全支持CAN总线V2.0B技术规范,通信速率达1MB/s,具有高速SPI接口,能够满足车辆上CAN 网络通信的要求。将主控制器的SPI总线和CAN 控制器的SPI接口相连,CAN 控制器和收发器的发送端(TX)和接收端(RX)分别连接来实现信息交互。
CAN 节点的硬件设计采用STM32F103ZET6作为主控制器,该芯片具有丰富的内部资源,包括64 KB SRAM、512 KB FLASH、2个基本定时器等,其内部集成了一个CAN 控制器。要实现CAN 数据的收发,还需要外接一个CAN 收发芯片,这里选用TJA1050来实现CAN 电平转换。
在电路设计中,将STM32F103ZET6的CAN 接收引脚(PA11/CAN_RX)和发送引脚(PA12/CAN_TX)分别接到TJA1050的R 引脚和D 引脚。然后分别将TJA1050的CANH 和CANL引脚引出外接一个120Ω的终端电阻后接到CAN 的接线端子。
1.2 CAN 网络通信程序设计
CAN 网络通信程序设计主要是完成CAN 驱动程序设计和建立CAN 网络服务程序,CAN 驱动程序用来实现系统应用层和CAN 模块硬件的通信。在这里设计MCP2515控制器的驱动程序采用的是Socket网络设备驱动的方式进行。
Socket CAN 是Linux系统下CAN 协议的一种实现方法。Linux下最先使用CAN 是基于字符设备来实现的,而Socket CAN 使用Socket接口和Linux网络协议栈,这样CAN 设备驱动可以通过网络接口来调用。为能使用CAN 设备,首先需要向Linux内核注册MCP2515驱动,然后配置编译内核。
建立Socket CAN 网络服务程序需要使用Socket编程,这里使用的几个重要函数有socket()、ioctl()、bind()、recvfrom(),分别用于建立socket服务、指定can 接口、绑定socket和can接口、接收socket传来的数据。
1.3 CAN 节点软件设计
要利用STM32F103ZET6实现CAN 报文的收发,需要按照驱动STM32的步骤来完成。按照C
AN 节点电路图的设计,首先需要使能引脚A 的时钟和CAN 通道时钟,进行I/O 设置和初始化,具体不再详述。
在这里涉及到的几个重要函数有CAN_Init(),CAN_FilterInit(),CAN_Transmit()和CAN_Receive(),分别用于初始化CAN 的工作模式以及设置波特率、设置滤波器、发送CAN 数据和接收CAN 数据。
1.4 SAE J1939协议介绍
SAE J1939是美国汽车工程师协会(SAE)的推荐标准,以CAN 2.0B为基础,通过CAN 总线进行数据通信[2]。它是根据计算机开放互连参考模型(OSI)进行分层构建,其中J1939/21为数据链路层,J1939/71为车辆应用层,J1939/73为诊断应用层。