基于虚拟仪器的汽车检测仪设计与实现
扫描二维码
随时随地手机看文章
0 引 言
汽车产业已成为国民经济增长的一个亮点,随着科学技术的发展,汽车检测经历了人工检验、简单仪器仪表测量、电脑控制的自诊断系统和专用的故障诊断仪等阶段。这些检测手段不同程度地存在着操作复杂、稳定性差、检测效率低、检测误差大等缺点。电子技术和计算机技术在汽车上的普及运用,对汽车售后维修服务提出了更高要求,促使在汽车的故障诊断中采用更多的快速、简便和智能化仪器,要求检测仪器实时采集和反映汽车工况的技术数据或曲线,以此来进行汽车故障的诊断。近年来,国内外很多公司和高校把虚拟仪器技术运用到生产和科研中,取得了一定的经济和社会效益。虚拟仪器相对于传统仪器具有以下优势:(1)仪器功能由用户自行定义;(2)丰富并增强了传统仪器的功能;(3)测量稳定性与重复性好;(4)经济性好;(5)系统构建周期短,易于进行功能扩展。将虚拟仪器引入到汽车行业,为汽车检测技术带来了新的活力。
影响最大的虚拟仪器编程语言是美国NI公司的LabVEIW和LabWindoWs/CVI,还有其他基于WINDOWS操作系统的可视化编程工具如VB、C++、Delphi等。VB是一种非常方便的Windows应用程序编程开发平台,它最有力的就是快速创建可视化用户界面,把复杂而完善的Windows操作系统的使用融于易于学习和使用的高级语言中,因而受到广大工程技术人员的普遍欢迎。
1 虚拟式汽车检测仪的结构
开发的汽车检测仪是基于数据采集卡的PC-DAQ结构。系统的结构如图1所示,由硬件和软件两大部分构成。
硬件的核心是一台PC,I/O接口设备采用阿尔泰的PCI2006数据采集卡。该卡具有14位分辨率的A/D转换器,提供了16(双极)/32(单极)模拟输入通道,输入信号幅度可以经程控增益放大至合适的范围,保证最佳转换精度;32位PCI总线,支持PCI2.2协议,即插即用;单通道400 kHz采样频率,伪同步采样减少通道间的采样时差,8 KB深度FIFO存储器保证数据的完整性;软件部分支持Windows XP系统下的I/O接口仪器驱动程序,包括对VB、C++、Delphi以及LabVEIW的驱动程序,编程使用的VB语言运用其相应的驱动程序对该卡进行数据采集的编程。
该卡主要分为4大块:(1)模拟前端的信号输入、调理电路;(2)对模拟输入信号进行AD转换的模数转换部分;(3)基于FPGA的控制部分;(4)和上位机进行通信的接口电路。
2 PCI2006数据采集的编程实现
该卡能用3种不同方式即非空查询方式、半满方式和中断方式进行数据采集。
2.1 PCI2006的设备管理
由于驱动程序采用面向对象编程,所以要使用设备的一切功能,用CreateDevice函数创建一个设备对象句柄hDevice,有了这个句柄,就拥有了对该设备的绝对控制权。然后将此句柄作为参数传递给其他函数,如Init-DeviceProAD可以使用hDevice句柄以程序查询方式初始化设备的A/D部件,ReadDeviceProAD函数可以用hDe-vice句柄实现对A/D数据的采样读取,SetDeviceDO函数可用实现开关量的输出等。最后可以通过ReleaseDevice将hDevice释放掉。
2.2 用非空查询方式采集数据
有了hDevice设备对象句柄后,便可用InitDeviceProAD函数初始化A/D部件,关于采样通道、频率等参数的设置是由这个函数的pPara参数结构体决定的。只需要对这个pPara参数结构体的各个成员简单赋值即可实现所有硬件参数和设备状态的初始化。然后用StartDeviceProAD启动A/D部件,开始A/D采样,然后用ReadDeviceProAD_No-tEmpty反复读取A/D数据以实现连续不间断采样。当需要暂停设备时,执行StopDeviceProAD,当需要关闭AD设备时,ReleaseDeviceProAD便可实现,但设备对象hDevice依然存在。ReadDeviceProAD_NotEmpty虽然主要面对批量读取,高速连续采集而设计,但亦可用它以单点或几点的方式读取A/D数据,以满足慢速采集需要。具体执行程序框图如图2所示。
2.3 用半满方式采集数据
用StartDeviceProAD启动A/D部件,开始A/D采样,接着调用GetDevStatusAD_Half函数以查询A/D的存储器FIFO的半满状态,如果达到半满状态,即可用ReadDeviceProAD_Half函数一批半满长度(或半满以下)的A/D数据,然后再接着查询FIFO的半满状态,若有效再读取,就这样反复查询状态反复渎取A/D数据即可实现连续不间断采样。
当需要暂停设备时,执行StopDeviceProAD,当需要关闭 A/D设备时,ReleaseDeviceProAD便可实现,但设备对象hDevice依然存在。ReadDeviceProAD_Half函数在半满状态有效时也可以单点或几点的方式读取A/D数据,只是到下一次半满信号到来时的时间间隔会变得非常短,而不再是半满间隔。
2.4 用中断方式采集数据
用CreateDevice函数创建设备对象,同时调用CreateSystemEvent函数创建一个内核事件对象句柄hEvent赋给InitDeviceIntAD的相应参数,它将作为接收A/D半满中断事件的变量。启动A/D部件,开始A/D采样,接着调用Win32 API函数WaitForSingleObject等待hEvent中断事件的发生,在中断未到时,自动使所在线程进入睡眠状态(不消耗CPU时间),反之,则立即唤醒所在线程,执行它下面的代码,此时您便可用ReadDeviceIntAD函数读取一批半满长度(或半满以下)的A/D数据,然后再接着等待FIFO的半满中断事件,若有效再读取,就这样反复读取A/D数据即可实现连续不间断采样。用同样函数可暂停和关闭A/D设备。
3 软件编程
3.1 编程框图
软件总体框图如图3所示。
3.2 程序界面设计
虚拟式汽车检测仪的软件界面如图4所示。
软件启动画面有两个大内容,分别是示波器模式和电压表模式。示波器项可以显示汽车各种电子部件产生的在线实时信号;电压表项可以显示信号的数据大小,要求输入通道数(最大为32个)和采集频率,左下框显示各通道电压波形的峰峰值和频率。
4 实验验证
4.1 传感器电压数据显示
为了验证此虚拟汽车检测仪可靠性和效果,在PASSAT汽车电控电路试验台进行该车有关传感器的实测。把虚拟汽车检测仪数据采集卡的0、1、2、3通道分别与汽车的空气流量传感器信号线、节气门位置传感器信号线、节气门位置传感器电源信号线和水温传感器信号线相连。图5为汽车在怠速运转时试验台上显示的传感器电压值。
图6是汽车检测仪在电压表模式下测出的传感器电压值(mV)。试验台传感器电压显示值与实测值误差分析如表1所示。
由表1说明误差甚小。
4.2 传感器电压信号波形显示
图7所示为霍尔传感器信号的脉冲波形,由图7可以看出,霍尔电压峰峰值为7.93 V,汽车怠速时的标准电压为6.00~8.50 V。表明该传感器显示波形正常,无故障。
根据以上数据及其波形图分析可知,此虚拟汽车检测仪能满足汽车传感器测量要求。另外,软件界面清晰明了,操作简单方便。
5 结束语
利用虚拟仪器技术构建的汽车检测仪,能连续检测、记录、显示和存储汽车各种汽车电子部件所产生的信号波形和数据,从而能迅速准确地确定故障原因。通过存储正常波形,用户可以很容易地建立自己的波形数据库,以备积累经验。本文是针对国内汽车检测的现实情况,尝试研究开发集信号采集、处理、分析与管理等较多功能于一体的虚拟式汽车检测仪。这样一方面可以将维修人员从繁杂的传统仪器设备中解放出来,发挥虚拟仪器的强大功能;另一方面,开发这样的虚拟仪器软件是针对性地对汽车电子部件检测而量身打造,不但可以降低成本,而且将来对软件还可以拓展增加一些功能。并且软件的界面友好,容易操作。