基于OBD—II的故障诊断及数据采集系统设计

2017-12-02 09:04范黎周美娇张轩雄
软件导刊 2017年11期

范黎+周美娇+张轩雄

摘要:为了迅速地帮助车辆开发、测试人员获取车辆排放数据和定位汽车故障原因,设计了一套基于OBD-II协议的车辆故障诊断系统。在系统硬件上,该故障诊断模块采用STM32F103CBT6作为主控芯片,通过TJA1050CAN收发器与车辆的OBD接口进行数据交互;软件上下位机采用keil4开发环境完成固件开发,上位机采用C#语言通过串口实时显示诊断信息和信号值。通过软硬件协同工作,最终实现上位机终端界面发送读取故障请求或实时数据流请求时,终端界面会显示响应的回复值等功能。通过系统测试,证明了该诊断系统数据准确、响应速度快。

关键词关键词:OBD-II;STM32;故障码;故障诊断系统;数据采集系统

DOIDOI:10.11907/rjdk.171857

中图分类号:TP319

文献标识码:A文章编号文章编号:16727800(2017)011006804

0引言

当汽车发生故障时,有可能导致一氧化碳、碳氢化合物、氮氧化合物或燃油蒸发污染量超过设定指标,这些有害气体给人类、动物、植物及整个自然界的生物带来了极大伤害[1]。OBDII是第二代汽车诊断系统(OnBoardDiagnostics,OBD),用于随时监控发动机运行状况和尾气处理系统工作状态并识别排放部件故障。当排放超标时,车内的故障灯则会点亮报警,汽车ECU会检测和存储相关故障信息[2]。与第一代诊断系统相比,OBDII标准化了通信协议和故障码,也定义了更加严格的排放标准,更加便于汽车开发、测试人员获取车辆排放数据及定位汽车故障原因。

1系统总体框架及硬件设计

车辆故障诊断系统采用型号为STM32F103CBT6的单片机嵌入ISO15765协议完成车辆的故障诊断和传感器信息获取。单片机根据标准协议发送特定的CAN报文到车辆的总线网络中,被检测的车辆收到报文后根据命令回复故障代码(DTC)和数据流(RDS)。诊断系统上位机通过串口和下位机通信,解析实际故障信息并实时显示相关传感器的信号值。该系统主要分为主控电路、电源电路、USB转串口电路与CAN收发器通讯电路。在硬件设计中,选择STM32F103CBT6芯片作为主控芯片,电源电路模块采用622K芯片,CAN收发电路模块采用TJA1050芯片,USB转串口模块采用CP2102芯片。系统结构如图1所示。

图1系统结构

1.1主控电路设计

本系统采用基于CotexM3内核的32位处理芯片STM32F103CBT6作为主控芯片。由于STM32F103xx系列拥有ARM核心,因此可以兼容ARM开发相关的各种软件与工具。存储方面拥有128K FLASH和多达64K的SRAM,保证了数据和程序存储能力[3]。系统通过芯片倍频技术可达到72MHz,非常适用于对处理速度和通讯速度要求很高的诊断系统。图2是STM32F103CBT6的引脚分布图。

图2STM32F103CBT6引脚分布

1.2电源电路设计

汽车供电系统为12V,而STM32F103CBT6芯片的供电额定电压为3.3V,为了诊断系统的便捷性,需要设计降压电路以满足要求。采用622k直流稳压芯片将ECU电源转化为1.5V~3.3V,电源效率高,输入稳定性好[4]。电源电路设计如图3所示。电压输出端与主控芯片STM32F103CBT6的PA11相连,C6和C7为接地电容,可以防止高频噪声干扰,确保主控和通讯子系统稳定工作。

图3电源电路设计

1.3CAN收發电路

系统的CAN收发电路采用TJA1050芯片作为诊断系统和汽车OBD的物理接口。TJA1050为总线提供数据发送和接收功能。如图4所示,CAN收发电路中的RXD、TXD,与STM32F103CBT6控制芯片的PB5和PB6引脚连接,CAN_H、CAN_L和OBD中的对应引脚连接。TJA1050使用5V供电,C4、C5为CAN_H、CAN_L对地匹配电容。接入的电容提高了电磁干扰性能,并且与相应的噪声源阻抗形成RC低通滤波[5]。

图4CAN收发器电路设计

1.4USB转串口电路

下位机采集的数据通过USB转串口方式与主控芯片进行数据交互。本系统采用CP2102芯片将主控芯片的串口转化为虚拟USB口。RXD、TDX与主控芯片STM32F103CBT6的PB13和PB14连接。C12为接地电容,抑制数据传输过程中的电磁干扰。当与USB口连接成功后点亮D0,PC端上位机系统即可与下位机进行通信。USB转串口电路如图5所示。

图5USB转串口电路

2软件设计

下位机单片机STM32F103CBT6的程序设计使用的keil4软件平台采用C语言开发,主要包括对STM32F103CBT6的初始化,以及故障代码和实时数据流的采集与解析。初始化主要包括延时程序、系统时钟配置、串口、CAN口及中断程序的初始化。其中数据的采集和解析参照OBDII协议标准,实现对汽车故障码和实时数据流获取。图6为主程序流程。上位机程序设计使用微软Visual Studio软件平台,采用C#语言开发,主要包括读取故障码、读取实时数据流和清除故障码3大功能模块,通过USB串口程序实现与下位机的通信,最终显示故障信息和信号值。

图6主程序流程

2.1数据采集与解析

OBDII系统支持的协议主要包括IOS9141、SAEJ1859(PWM)、SAEJ1859(VPM)、KWP200、ISO15765[6]。本系统的数据读取和解析协议采用ISO15764,该协议是基于汽车CAN总线网络的诊断协议,其CAN报文收发的核心代码如下:

u8* SendFrame(CanTxMsg* TxMessage,ErrorStatus* err)//定义CAN报文收发函数endprint

{

u8TransmitMailbox;

u32i;

CANRXMAIL = ERROR;

TransmitMailbox = CAN_Transmit(CAN1, TxMessage);//发送CAN,若发送成功,返回存入信号箱

while(CAN_TransmitStatus(CAN1,TransmitMailbox) != CANTXOK);//判断是否发送成功

for (i = 0;i < 10000000/3;i++)//延时大约1.5s

{

if (CANRXMAIL == SUCCESS) break;

}

*err = CANRXMAIL;

return (u8*)&RXRAM[0];//返回CAN报文的数据域

}

ISO15764协议有标准帧和扩展帧两种不同的CAN报文,标准帧的标识符ID为0X7DF,扩展帧的标识符ID为0X18DB33F1,其算法和格式相同。表1为标准帧CAN报文的传输格式,其中PCI表示协议控制字节数量,MODE为请求模式,PID为读取数据流的参数标志,PCI、MODE和PID组成CAN报文的数据域[7]。不同的PID对应读取不同的数据流条目,例如0x0C代表读取发动机转速,0x0D代表读取车速,0x15代表读取氧传感器输出电压,本系统总共实现了16条数据实时值的读取。然后,根据返回的CAN报文的PID进行数据解析,例如:车速为xx/3 km/h,氧传感器输出电压(缸组1,传感器2)为xx*0.005。

2.2USB转串口程序设计

上位机采用C#语言通过串口实时显示诊断信息和信号值。C#使用SerilPort类,可以方便地实现串口通信的多种功能[8]。IsOpen()函数判断串行端口的开关状态,ReadBufferSize()函数设置串行端口输入缓冲区大小,以防止数据传输过程中丢失。Read()和Write()函数实现串口的读取和发送操作[9]。串口通信初始化如下:

public boolSerialport_Config(int Baud, string COMx)//串口初始化函数

{

try

{

com.BaudRate = Baud; //获取串行波特率

com.PortName = COMx; //获取通信端口

com.DataBits = 8; //设置字节长度

com.Open();//打开新的串口连接

}

catch (System.Exception)

{

return false;//獲取系统异常返回false

}

return true;

}

3系统调试及实验结果

系统硬件使用PADS画出系统的PCD线路板后进行打样,焊接好元器件和贴片后,使用JInk,并采用SWD方式将程序烧录到单片机中,然后进行软件调试。实物如图8所示。

图8系统实物图

实验环境采用ECU模拟器模拟OBDII系统的ISO157654协议,通过CAN收发器的CAN_TXD1和CAN_RXD1与ECU模拟器OBD接口的6、14端口连接,然后将USB串口模块与电脑连接。安装串口驱动后,选择正确的COM口,故障诊断界面上的状态灯会变成绿色。图9、图10分别为读取故障码和读取实时数据流的测试结果。由结果可以看出,汽车发生故障的原因为燃油量稳压控制电路开路、涡轮增压涡轮机超速。测试、开发人员则可以通过响应的回复值来迅速定位汽车故障原因,对相关硬件进行排查。还可以读取实时数据值,获取汽车发动机转速、进气温度、计算负荷值和发动机冷却温度等实时数据,帮助测试和开发人员获取车辆排放数据。对相应的硬件检测完成后,可以通过清除故障码按钮,对汽车内部的故障码进行清除。

通过5组实验测试进行对比,响应的回复值均显示正确,而且响应时间都在5s内,满足了设计要求,能够实现及时获取响应的回复值等功能。

4结语

基于OBDII的故障诊断及数据采集系统,经过各种功能测试,可以迅速获取车辆实时排放数据并定位汽车故障原因。相比于市场上造价高、体积大的一些原厂汽车故障检测仪,本文设计的系统造价低廉、响应速度快,具有广阔的市场前景。

参考文献参考文献:

[1]刘扬,郭建斌.汽车对生态环境的分析研究与前景判断[J].环境保护与经济循环,2008(9):4446,50.

[2]HERPEL N,SONG Y,SIMONOTLION F,et al.Trends in automotive communication systems[J].Proceedings of IEEE,2005,92(6):12041223.

[3]STMicrorelecttonics.STM322 reference maunual[Z].2016:6061.

[4]刘纯虎,付斌,盛庆华.基于STM32的微型USBCAN适配器开发[J].计算机测量与控制,2013(4):996998.

[5]蔡磊.基于STM32F103芯片的USB接口的研究与实现[D].上海:复旦大学,2009.

[6]孟磊.基于OBDⅡ的车载远程故障诊断系统设计[D].武汉:武汉理工大学,2012.

[7]Road vehiclesdiagnosetics on controller area network (CAN)Part4: requirement for emissionsrelated system[S].ISO57654,2005.

[8]王铁流,李宗方,陈东升.基于STM32的USB数据采集模块的设计与实现[J].测控技术,2009(8):3740.

[9]陈思敏.基于USB通信设备类的虚拟串口的研究与设计[D].武汉:武汉科技大学,2013.

责任编辑(责任编辑:黄健)endprint