图1 加电(强制)复位电路
本发动机故障诊断系统以微控制器为核心,配以其他外围电路,利用单片机的增强型串口通信模块以及定时器等模块,实现了与发动机ECU的通信,完成故障诊断功能。
随着环保、能源政策限制力度的加大,以及电子技术在汽车上的广泛应用,电控发动机已成为普遍装用的动力形式。发动机的电控系统大多设有故障自诊断系统。汽车正常运行时,ECU检测各输入输出信号,从而查找故障。ECU可把故障以代码的形式存入内部存储器,同时点亮仪表板上的故障指示灯,提醒驾驶员。
不同厂家的汽车,其故障自诊断系统的检测项目不尽相同,故障码存储和显示的方式也有所不同。读取故障码的主要方式是利用仪表盘上的故障灯的闪烁次数或者使用故障诊断仪。对于OBD-Ⅱ以后的车载诊断系统来说,就必需使用故障诊断仪。
在汽车故障诊断领域,针对诊断设备和汽车ECU之间的数据交换,各大汽车公司几乎都制订了相关的标准和协议。目前,许多汽车生产厂商都采用ISO9141以及ISO14230作为诊断系统的通信标准。ISO9141是一种基于UART的诊断标准,满足OBD-Ⅱ的要求。ISO14230(Keyword Protocol 2000)是目前使用最多的诊断系统的通信标准,它满足OBD-Ⅱ和OBD-Ⅲ的要求。随着CAN总线的应用,美国汽车公司已对乘用车采用基于CAN的J2480诊断系统通信标准,欧洲汽车厂商已经开始使用另一种基于CAN总线的诊断系统通信标准ISO15765。本文所述的故障诊断系统满足于ISO9141和ISO14230通信协议。
图2 MC9S12DP256B时钟产生器及系统时钟相位关系图
诊断仪的硬件组成
本诊断系统主要包括电源模块、微控制器单元(MCU)、数据传输处理电路,以及键盘输入模块和液晶显示器输出模块五个部分。
1. 电源模块
电源模块是将车载电源通过DC/DC 变换转换成控制系统所需要的电压,车载电源为12 V,单片机系统工作电压为5 V。本系统采用L7800系列的L7809和L7805进行两级降压。L7800系列DC/DC转换器电路简单实用,只需要另加两个电容就可以构成转换电路。
2.微控制系统模块
微控制系统是整个系统电路的核心,其正常、稳定可靠的工作是诊断系统能够工作的保证,该系统包括飞思卡尔9S系列微控制器芯片MC9S12DP256B、复位电路以及晶振电路。
(1) MC9S12DP256B单片机
诊断仪的主芯片采用16位Flash单片机飞思卡尔MC9S12DP256,其两个增强型的定时器模块可以完成精确的定时,可满足跟ECU通信需要的精确定时功能需求。单片机具有128个字节的中断向量表,完全能够满足系统的中断要求,结合其众多的I/O接口,可以满足键盘输入以及液晶屏输出等功能要求。再采用低功耗晶振、复位控制、看门狗及实时中断等配置和功能更有助于系统的可靠运行。
图3 液晶模块电路图
(2)复位电路、系统时钟电路
MC9S12DP256B的复位可以由专用外部复位引脚RSTIN触发、看门狗定时器溢出触发或时钟监控器以及POR触发。在RSTIN引脚连接一个带有开漏输出驱动器的外部复位电路上,实现电源恢复、手动复位或硬件故障时的系统复位。复位电路采用上电复位和开关复位组合电路。如图1所示,在通电的瞬间,在RC电路充电的过程中,施密特触发器输入端出现低电平,触发器输出稳定的低电平,然后输入到MC9S12DP256B的RSTIN引脚产生复位,当RC电路充电一定时间后,施密特触发器输入端电压增加到一定值,使触发器输出为高电平,这时上电复位完成,系统进入工作状态。复位开关按下,直接接地产生复位,开关弹起又被上拉电阻拉高,这时完成手动复位,系统从初始位置运行程序进入工作状态。
CPU和其他各模块的操作都是由系统时钟信号=SYSCLK控制的,在MC9S12DP256B系统内时钟信号是由外部时钟脉冲源-晶振通过芯片内部时钟产生器产生,系统时钟再经过处理产生其他子系统模块各自的系统时钟,原理如图2所示。为了满足硬件和应用系统的要求,本系统选用=16MHz的外部晶振,晶振产生的时钟信号进入到单片机的第46脚,则CPU时钟= CLK24,而外设和内存时钟CLK3 = 16/2= 8 MHz,而CLK23 的时钟信号连接到了ECLK针脚。
图4 主程序流程图
3. 显示器输出模块
故障诊断的结果以及数据流的各项参数都应该显示到液晶屏幕上,从而指导维修人员的操作。本系统采用的显示器为LCM12864C 图形点阵液晶显示模块。使用了MC9S12DP256B的PA端口的PA0- PA4以及PB端口的PB0 –PB7针脚,用来向显示器输出数字信号。图3所示为液晶模块电路图。
4.数据通信模块
由于ECU通过K线来传输数据,K线的信号电平为0~12 V,而单片机通信接口为串行通信数据机口,信号电平是5 V系统。为了使单片机与车载ECU之间安全、准确的进行通信,必须对数据通信电路进行转换处理。本系统采用MC33290电平转换芯片实现了5~12 V信号的转换。单片机进行通信的接口为其标准串行通信接口SCI。
诊断仪的软件设计
本设计根据模块化设计思想,以中断控制为核心,将控制软件分为基本控制模块(即程序)和中断控制模块,主要的程序模块有系统主程序、ECT模块、SCI模块以及数据显示模块。
图5 定时器结构
1.主程序设计
主程序流程如图4所示。首先系统上电复位,处理器从程序存储器读取指令,进入初始化模块对系统进行初始化,接着使能K线系统,然后设置SCI模块,之后向ECU发出通信握手信号。如果通信不成功,则判断是否是失败第三次。如果是则提示操作人员检查通信线路;如果是三次以内,则按“重启”键,再次初始化并建立通信。如果通信成功,则根据ECU的答复内容,判断ECU的诊断系统所遵从的协议。然后根据判断结果进入不同系统的程序模块,并在其中循环,当有中断产生时,则进入相应的中断服务程序。中断服务程序结束时,再次回到中断前的断点,接着循环。直到再有中断产生。
2.ECT模块程序设计
ECT模块用来产生标准的基准时间,用来控制实现传输数据的时间控制,在保证数据传输准确性方面起着至关重要的作用。
ECT软件模块中,最重要的是对ECT模块进行初始化设置的部分,以及产生定时中断的部分。在编写软件时,需要特别注意ECT模块中计数器的时钟频率,只有正确设置预分频系数,才能得到正确的时间基准。图5为一定时器结构示意图,可以看出,在定时器模块使能时,模块时钟信号经过预分频器的作用后,提供给计数器寄存器的基准信号。
在本系统中,首先使能定时器功能模块,即设置TSCR1 = 0 × 80,计时器的预分频器设置为16,即设置TSCR2 = 0 × 04。本文中使用第五通道作为输出比较功能,在实际应用时,并没有输出任何波形,只是产生中断,从而制造1 ms的标准时间。
因为系统采用的信号来自外部振荡器,为16MHz,经过时钟产生器后产生ECT模块的系统时钟信号为8MHz,再经过预分频器到达计数器寄存器的计数脉冲的频率为8/16 = 0.5MHz,则1ms对应的脉冲个数为0.5× 1000 = 500。
图6 MC9S12DP256 内存map图
3.SCI模块程序设计
本模块用来发送命令、接收信息,本模块的关键在模块初始化以及接收数据、发送数据。
在初始化程序中,首先在波特率寄存器中,设定模块信号传输的波特率。设置时要注意如果不设置低字节,而只设置高字节,则波特率寄存器设置无效。波特率产生器根据设置的数值,决定数据传输波特率。在数据格式寄存器中对数据格式以及是否包括奇偶校验进行设置,这样就可以正确的接收数据位。然后使能接收、发送功能,并设置接收中断使能。
在接收中断服务函数中,首先清除中断标志位,然后调用读取函数,接收数据寄存器中的数据。
4.数据显示模块程序设计
本模块主要功能就是操控液晶屏来显示相关的内容。在编制液晶程序时,首先要了解液晶显示的时序控制。只有掌握了控制总线、读总线,以及写数据总线之间的时序关系,才能够真正掌握显示的实现方法。
在编制程序时,应该首先编写显示字库。确定显示字的字体、大小以及显示的方式,然后利用专用软件编写显示代码,并将代码以map图的方式存放到单片机的常量存储区中。
因为MC9S12DP256B是带有16位的程序计数器的16位微控制器,因此无法直接操作超过64KB的内存地址。
为了解决这一问题,一个分页机制引入到了结构中。通过使用一个6位的页寄存器PPAG来提供了一个1M的地址空间,可以通过分页的窗口来进行操作。其中对应PPAG为$00到$2F的768K的低字节空间,预留为外部内存。剩下的对应于PPAG为$30到$3F的256 KB的高字节空间,被用来当作在片式的Flash内存。具体如图6所示。
需要特别注意的是因为重启和中断向量只有16位,所以所有的中断服务程序以及初始重设置程序必须开始于两个固定页内存空间中的一个。这并不意味着整个的服务程序都存在于之中,但是,必须开始于其中。
完成数据空间的分配后,然后编写液晶屏的驱动程序。在显示时,程序直接在数据map图中查找,找到后以特定的方式通过数据总线显示到屏幕上。
总结
本文介绍了基于ISO9141以及ISO14230通信协议的诊断系统软硬件开发。随着CAN总线的应用,许多厂商开始采用适用于CAN通信的ISO15765作为诊断通信协议。本系统的微控制器带有CAN总线接口,下一步可在此基础上开发适用于CAN总线通信协议的诊断系统。
2024-12-18
2024-12-19
2024-12-16
2024-12-20
2024-12-20
2024-12-17
2024-12-17
评论
加载更多