0 引 言
众所周知能源危机和大气污染是未来汽车燃料所要解决的最关键问题。为降低排放,缓解石油能源紧张的局面,气体燃料受到了世界各国的重视和推广。大量实车试验均证实以天然气(CNG)或液化石油气(LPG)为燃料,发动机的NOx,总碳氢THC,CO及CO2的排放较汽油的排放污染明显减少,且大大节省了能源。
双燃料汽车技术的关键之一是油和气转换控制,燃料开关正是用于以自动或手动的方式实现燃料间的切换,其品质也关系到汽车的整体性能。本文所针对的燃料开关具有以下的主要功能:燃料切换、燃料容量显示、蜂鸣器报警以及指示灯亮度关于环境光照度自动调节等。为确保燃料开关的质量控制满足最苛刻的欧洲汽车零部件质量标准,燃料开关必须百分之百进行测试。传统测试方法是通过测试人员手工测试,测试速度慢,受人为因素影响,差错率相对较高,产品质量得不到保障。于是有必要研究一种能用计算机实现的自动测试系统。本文设计并实现了一种能用于对燃料开关进行完成功能测试、通讯速率自动测定并具有过压自动保护能力的燃料开关自动测试系统。
该测试系统基于PC机和单片机P89LPC938,测试人员通过PC机向测试系统发出测试命令,由单片机识别并处理测试指令,向燃料开关发出相应的测试信号,以测试对应性能。下面将对整个系统及每个模块进行详细说明分析。
1 燃料开关测试系统的组成及工作原理
该测试系统由电源模块、单片机P89LPC938控制模块、通信接口模块及电平转换模块组成,图1是测试系统的结构图。
该测试系统的工作原理:测试人员在PC机界面选择要测试的项目,PC机通过串口将此命令发送给测试系统,经过RS 232-TTL电平转换后,该指令送至单片机控制模块,由单片机P89LPC938组成的控制单元识别所收到的测试要求后,从指令集中取出相应的命令信号以协定的通信协议向燃料开关发送命令,如果燃料开头能够正确识别所收到的命令,它将回送应答信号,同时执行该命令所要求的测试项目,如点亮不同的指示灯,发出不同音调与音高的报警声等。待每项测试执行完成后,结果回送给单片机,单片机再经由串口将此结果发送给PC机进行存储和显示。
各模块的作用如下:
电源模块:由于不同芯片所要提供的电压不同,且在此测试系统中,需要5 V及3.3 V,所以电源模块的电路要产生不同的电压提供给各芯片。
电平转换模块:实现PC机与单片机之间的RS 232电平至TTL电平转换。
PC机显示存储模块:测试人员通过PC机发送测试命令,并将每个燃料开关的序列号及相应的各项功能测试结果显示并保存。
通信接口模块:本文所针对的燃料开关仅有一根信号线,只能实现半双工通信,接口模块的功用就是用于实现单片机全双工方式与燃料开关半双工方式之间的转换。单片机控制模块:是整个系统的核心部分,控制整个系统的测试进程。它要识别来自PC机的测试人员所发出的测试命令,判断并执行相应功能的测试;待测试结束,控制模块要分析测试结果是否正常,并反馈给PC机用于向测试人员显示及数据自动入库保存。
2 测试系统的电路实现
2.1 供电电路
不同芯片对供电电压的要求也不同,本测试系统中,单片机P89LPC938所需的电压为3.3 V,而电平转换芯片MAX232所需要的电压为5 V,因此,电源模块的设计要满足需求,设计时就需要兼顾两者,外部只需提供12 V电压即可。图2给出电源电路的电路图,本系统选用LM7805和LM1117两个稳压器。
2.2 RS 232-TTL电平转换电路
计算机串口是RS 232电平,而一般的单片机应用系统的信号电压是TTL电平或CMOS电平,不可以直接将单片机芯片上的串行通信引脚与RS 232的收发端相连接,必须作适当的电平转换。目前市面上有许多用于此目的的电平转换芯片,本方案采用MAX232芯片。
2.3 单片机与燃料开头之间的通信接口电路
通信接口模块要实现的功能是接收单片机
P89LPC938发出的命令信号发送给燃料开关,它还要将燃料开关反馈的信号发送给单片机,从而实现它们二者之间的双向通信。一般而言,单片机都会有TX与RX二个端口,可以实现同时双向通信功能,即能实现全双工信息。但本文所讨论的燃料开关外部仅有三条线:电源,地和信号线,这意味着TX/RX复用一条数据线,至多只能实现半双工串行通信。为了在测试系统与被测开关之间建立起可靠的通信联系,必须设计一个全双工/半双工转换电路。本文所提出的解决方案如图3所示。
图3中两个二极管起保护作用,若Fuel Switch输入电压过高,D1的嵌位作用会使RX端的电压仍维持在5 V左右,若Fuel Switch输入电压为负,D2的嵌位作用会使TX端的电压仍维持在0 V左右。当测试系统的TX端发送高电平时,A点为高电平,燃料开关Fuel Switch信号线也将接收到高电平,同时,测试系统的RX端也会接收到高电平。同理,当测试系统的TX端发送低电平时,燃料开关FuelSwitch信号线也将接收到低电平,同时,测试系统的RX端也会接收到低电平。
当燃料开关向测试系统发送应答信息时,测试系统的发送端TX置高电平,则接收端RX将收到燃料开关发送的信息。
如果燃料开关与测试系统同时发送信息时将出错,因此,测试系统的串口是处于全双工状态,而燃料开关的信号端是处于半双工状态,这样就实现了全双工至半双工的转换。
3 测试系统控制模块
控制模块是整个测试系统的核心部分,它利用单片机P89LPC938来控制测试系统。
P89LPC938有最少23个I/O口,选择片内振荡和片内复位时可多达26个I/O口;8输入多路10位A/D转换器;2个模拟比较器,可选择输入和参考源;2个16位定时/计数器(每一个定时器均可设置为溢出时触发相应端口输出或作为PWM输出)。
该模块要完成的任务是对燃料开关的功能进行测试、过压保护与监测以及频率检测。下面对这三个部分做详细讲述。
3.1 燃料开关功能测试
上面提到燃料开关的主要功能是燃料容量显示、蜂鸣器报警,燃料切换及指示灯亮度调节等。要保证产品的质量,需要对燃料开关进行全功能测试。
测试人员通过PC机向控制单元发送功能测试命令,所有命令组成了一个指令集,单片机根据检测到的命令信号来判断需要对产品的哪项功能进行检测,据此把执行该功能的命令序列发送给燃料开关。因此,每条指令信息中要包含该项功能测试的全部信息。单片机通过通信接口的TX发送端向燃料开关发送上述命令序列,产品收到有命令信号序列后,会先进行校验以确保收到的命令是正确的。一旦确认收到的正确的命令,开关产品会反馈命令确认信号给测试系统,测试系统因此可以确定所发出的命令序列已经被正确执行,从而实现一些有效测试。
根据设计要求,一个命令序列由四个字节组成,分别是CMD命令,数据D1,数据D2和校验信号C。CMD命令用于标识需要执行的指令类型,即是哪一项功能检测,D1,D2提供执行该命令所必须的辅助数据,例如如果需要测试报警若能,数据字节可以用来指定以什么频率、音调、音高、持续时间等参数,校验字节用于燃料开关确认该命令序列是否有效以免通信错误造成误动作。下面以燃料容量显示为例,给出测试的过程:
(1)测试人员从PC 机通过串口向测试系统发送燃料容量显示检测信号。燃料开关是用多个LED灯指示燃料的容量,“volume”代表容量测试命令。
(2)单片机P89LPC938通过串口接收到“volume”命令,从指令集中提取相应的指令信号。图4给出单片机向燃料开关发出的一条燃料容量显示指令。
CMD为0000 0001,表明此指令为燃料容量显示功能测试指令。当对蜂鸣器报警功能进行测试时,CMD为00000010;对燃料切换功能进行测试时,对应的CMD为0000 0011;对指示灯亮度调节功能进行测试时,CMD为0000 0100等,它们在开关设计时就做出了约定。D1为0000 1000,表示对LED4进行测试,即D1的每个位对应一个LED,置1时表示对相应的LED进行测试。该字节对于不同的测试内容具有不同的意义,如对蜂鸣器报警功能测试时,D1指示蜂鸣器报警次数,即0000 0101表示报警5次;对燃料切换功能测试时D1为0或1,分别代表一种燃料;在指示灯亮度调节功能测试时D1又被用于表示显示元件的亮度,如1111 1111表示最大亮度。
D2通常会是对D1所指对象量的进一步规定。对于图4所示的燃料容量测试,D2的值为0000 1001表示LED4将闪烁9次。其他测试状态也相似,例如对蜂鸣器报警功能而言,D2表示对蜂鸣器基频信号的分频数。C是校准字节,0000 0001表示对数据D1,D2做异或处理。
(3)单片机将上述命令信号发送给燃料开关的信号端,通过校验,燃料开关判断信号是否有效,如果有效就会将单片机发送来的信号进行处理后重新发送给单片机作为测试指令已经被确认的反馈。若无效,将放弃此次测试。
(4)测试人员判断LED功能完好后可以通过PC机保存测试结果。
其他功能测试的实现与上述过程相仿,不再赘述。
3.2 过压保护
燃料开关外部需+12 V电压供电,经产品内部电源电路转化为+5 V电压给单片机提供电压,因此如果其电源电路出现故障,或受到汽车内其他电器设备的电压干扰使提供给单片机的电压过高,或由于其他形式的制造缺陷,都有可能使被测开关的电源异常,这会损坏燃料开关,进而损坏与相连接的测试系统。因此,需要设计一个过压保护与检测电路,检测燃料开关内的单片机的电源电压,当此电压正常时(+5 V±2%),测试系统可以继续对其检测,但当此电压过高,则自动切断燃料开关的外部电源,达到保护燃料开关的目的。图5即为该保护电路。
测试系统外部由+12 V电源供电,双二极管D1的作用是防止电压反接;由于汽车内干扰很多,双三极管T1构成一个钳位电路,使T2的集电极电压稳定在+12 V左右;Z1为电源芯片,提供+13 V电压;T2是电源电路的开关三极管,当基极为高电平,POWER端输出+12 V左右,当基极为低电平,POWER端输出为0 V;三极管Q1控制T2的基极电压,即控制了整个电源电路的通断,当Q1基极为高电压,三极管Q1导通,则T2的基极为低电压,T2断开,POWER输出电压为0 V,当Q1基极提供低电压,三极管断开,T2基极电压为+13 V,T2导通,则POWER输出端提供+12 V电压。POWER输出端连接到燃料开关的电源端。
将燃料开关的电源电路输出端引出,连接到单片机P89LPC938的AD06转换口,不断检测此电压值,由于P89LPC938的工作电压为+3.3 V,而燃料开关的电压最小为0 V,最大为+11 V,所以要将此电压用电阻分压后再进行转换。这里选用100 Ω和470 Ω的电阻,则AD06端最小输入为0 V,最大输入为+2.1 V,不超过单片机的工作电压,在被测为+5 V时,AD06输入端电压为0.877 V,单片机通过比较,判断被测电压是否为安全电压。若为安全电压,单片机的I/O口P2.7置0,即保护电路的Q1基极为低电平,保护电路导通,可以正常对燃料开关进行测试;若被测电压高于+5 V,单片机将P2.7脚置1,则保护电路断开,燃料开关立即断电,由于通电时间较短,不会对燃料开关造成损害。
3.3 频率检测
燃料开关是以数字通信方式与其他组件进行协同工作的,异步通信的工作频率则取自其中单片机的内部时钟,由于制造离散度及环境温度等的影响,实际的工作频率会发生漂移。为确保通信的可靠性,需要确认燃料开关工作在适当的频率范围内,故需要对其实际的通信频率检测与确认。要测试时钟信号的频率,可以通过测试一定区间内脉冲的个数来实现,测试时间越长,精度越高。本测试系统用D触发器和单片机的计数、定时功能来完成此检测。图6即为此频率检测电路。
系统选用由两个D触发器集成的芯片74AHC74,其工作性质如表1所示。只用其中一个D触发器,其时钟脉冲由单片机P89LPC938提供,将被测时钟TEST CLK连接到1D端,1Q端接至单片机的计数器T0端,T1作为定时器使用。
开始测试时,测试人员设置测试时间,即设置T1的计数值(取1 s),系统时钟SCK作为D触发器的时钟脉冲,在SCK的上升沿检测TEST CLK的信号,如果1Q/T0为0→1,说明被测波形为一次上升沿,当1Q端再次检测到0→1,即为TEST CLK一个周期。计数器T0在每个下降沿加1,计下1 s内下降沿个数即可求出T0的频率,从而求得被测频率。在计数的开始或结束时可能会丢掉一个周期,会对频率的推算带来误差,但由于计数的基数很大,这个误差可以忽略不计。
4 结 语
运行结果表明,该系统可以准确识别PC机发出的命令,并发送给燃料开关,系统也可以接收到燃料开关的测试结果。该测试系统人机界面友好,操作方便,检测快速,并大大提高了测试效率与产品合格率。