一种用于车辆测速的数据采集系统
文章出处:http://www.nexussmartsolutions.com 作者:王水波,宋焕生,王国强,郭 亚,郑 辉 人气: 发表时间:2011年12月07日
1 概述
车速是交通信息中一个重要参数,车速检测对城市交通控制与管理有着重要的作用和意义[1]。通常,这些信息的获取是靠各种检测设备来完成的,现有的交通检测设备主要有环形线圈检测器、视频检测器和微波检测器,其中,环形线圈检测器[1-2]由于其性能稳定可靠、灵敏度高、检测数据精确和成本低等优点而被广泛使用。
环形线圈检测器是一种基于电磁感应现象的车辆检测设备,利用车辆经过检测区域时,引起线圈电感发生变化的原理来工作。车辆检测器检测出这个电感变化量,就能检测出车辆的通过或存在情况。检测这个电感的变化量有2种方式:(1)利用相位锁存器和相位比较器的技术来检测相位变化[1-4];(2)利用耦合振荡电路对振荡频率进行检测[5-6]。
传统的线圈检测器主要用于检测车辆的存在或通过情况,在速度的检测上,存在很大缺陷:(1)由于环形线圈的工作频率与灵敏度、线圈匝数和线圈埋设深度有关,经过处理后的二值化结果会有较大波动,很难精确检测车速;(2)传统的线圈检测器是以独立的单个线圈来工作的,当有车辆经过不同线圈边缘时,会发生“误触发”,也会导致速度检测的不准确性。
本文针对现有线圈检测器的设计方式和检测功能进行研究,并在第2种检测方式的基础上,设计一种可用于车辆测速的交通数据采集系统。该系统采用可编程逻辑器件,在短时间内,同时完成多通道数据采集功能的设计,也能根据需要,随时更改设计,使系统占有资源少,开发周期短,设计方便。该系统采集的数据可通过CH365接口芯片和PCI总线实时地传输到计算机中,可以为各种检测提供需要的数据信息,尤其适合同时实现多通道数据的采集,提高了数据的采集效率和精度。
2 系统总体设计
利用可编程器件,简化系统的硬件设计,使系统具有小型化和简易化的特点。本系统采用Altera公司MAX7000系列芯片(EPM7128STC-100-10)。其片上资源很丰富,可以满足现阶段的设计需要,系统总体设计框图如图1所示。
为了调节振荡频率,在多个通道同时工作时,避免线圈间的频率干扰,在耦合振荡电路中,加入电子开关选择电路,这样,在实现多通道数据采集时,可以保证检测精度。另外,它还具有灵敏度的调节功能。
振荡电路引起的频率变化是个模拟信号,检测频率的变化是通过设计合适的计数电路来完成的,信号整形电路是用来完成从模拟信号到数字信号的转换。有源晶振电路输出一个高频(30 MHz)时钟脉冲信号,作为计数电路的基准信号。电源模块电路提供+12 V和+5 V输出电压,为耦合振荡电路和CPLD的正常工作提供所需电压。JTAG接口电路为编程下载和随时更改设计,提供一个快速途径。
为使系统正常工作,该系统还配有复位电路、LED输出显示电路等外围电路。整个数据采集电路的设计都集中在CPLD芯片中完成。
2.1 耦合振荡电路
机动车经过埋有线圈的路面时,会产生耦合振荡电路频率的变化,该变化是由地埋线圈构成的耦合振荡电路引起的。系统中的耦合振荡电路如图2所示。
可以看出,这是一个电容反馈3点式振荡电路[6]。电源+12 V通过高频扼流圈LC加到三极管BJT上,扼流圈LC的功能是避免电源对振荡回路的高频信号造成短路。
2.2 CPLD的硬件设计CPLD完成对数据的采集和提供与CH365进行数据传输的接口信号,将待测信号在CPLD中进行分频处理,对已知的高频信号进行计数。CPLD的硬件设计采用原理图和AHDL硬件描述语言相结合的方式,顶层设计采用原理图输入方式,图3给出了该部分顶层设计电路图。
在图3中,LOOP1和LOOP2是2路经过信号整形电路后的数字信号;CLK30M是有源晶振电路输出的高频基准信号,输出频率为30 MHz;模块LOOP_CNT完成分频和计数,其原理设计是采用AHDL来实现的,其语言描述程序为
SUBDESIGN LOOP_CNT
(SIG: INPUT; FROM LOOP DETECTOR
CLK: INPUT; 30M CLOCK
/CLR: INPUT; CLEAR INT_REQ AND END_REG[]
RESULT[15..0]: OUTPUT; COUNT RESULT)
VARIABLE
…
BEGIN
…
END;
模块BUSMUX通过地址总线,对线圈通道采集到的数据进行选择,通过不同的地址来读取不同线圈通道中的数据,
实现数据的实时传输。模块CPU_INTERFACE将采集到的数据通过PCI接口芯片CH365和PCI总线传入计算机中。编写相应的软件程序,能实时读取线圈通道中的数据,对采集到的数据进行分析和处理,从而检测出车辆的存在或通过情况。
3 硬件设计仿真
借助AHDL硬件描述语言和MAX PLUS II开发工具,可以得到如图4所示的仿真结果。
当读选通信号(RD)有效(低电平)时,可以通过不同的地址读出检测到的计数值,每个线圈通道所检测到的计数结果都是2 Byte。图中,A和D分别是16 bit的地址总线和8 bit的数据总线;H000和H0001对应一个线圈通道;H0002和H0003对应另一个线圈通道。当计算机读完数据后,可以在写选通信号(WR)有效(低电平)时,在某一地址上写入数据,并清除存储器中已读数据,为下一次计算机进行读数据操作做准备。
4 数据采集系统的软件实现
软件功能的实现是在Visual C++6.0集成开发环境上,采用C语言进行编程的,可运行在Windows XP操作系统上。
数据采集的软件是通过对PCI接口芯片CH365编写相应的程序来实现的,CH365有丰富的地址、数据总线以及读写选通信号,为实现数据与计算机通信提供一个可靠接口。其软件实现过程如下:
(1)装载CH365设备和获取相关的参数信息,如果CH365动态链接库装载成功,就能打开设备,获取IO基地址,读取数据。如果打开CH365设备失败,返回重新装载。
if(LoadLibrary("CH365DLL.DLL")==NULL) return;
//装载CH365动态链接库
if(CH365mOpenDevice(Device_Number,TRUE,TRUE)== INVALID_HANDLE_VALUE ) return;
if(CH365mGetIoBaseAddr(Device_Number,&mIoBase)== FALSE) printf("ERROR");
if(CH365mSetA15_A8(Device_Number,data)==FALSE) printf("ERROR");
(2)读取相应端口中的数据。CH365设备打开成功后,设置不同的端口地址,在CH365读选通信号(RD)有效(低电平)时,读取对应端口中的数据,下面是2通道端口数据的读取。
CH365mReadIoWord(Device_Number,&mIoBase->mCh365IoPort [0x00], &mWord);
CH365mReadIoWord(Device_Number,&mIoBase->mCh365IoPort [0x02], &mWord2);
(3)将端口地址中的数据清除,为下次读取数据做准备。一次数据读取完后,在CH365写选通信号(WR)有效(低电平)时,在相应端口地址中写入数据,以清除计算机已读完的数据,为计算机下 一次读数据做准备,下面是实现该过程的程序语句:
if(CH365mSetA15_A8(Device_Number,data)==FALSE) printf("ERROR");
if(CH365mWriteIoByte(Device_Number,&mIoBase->mCh365Io Port[0x00], 0x00)==FALSE) printf("ERROR");
//在端口0x00中写入数据
if(CH365mWriteIoByte(Device_Number,&mIoBase->mCh365Io Port[0x02], 0x00)==FALSE) printf("ERROR");
//在端口0x02中写入数据
5 实验结果分析
利用该系统和数据采集软件,在某路面上进行实车采集,其结果如图5、图6所示。
图5显示了没有车辆经过时的采集情况。当无车经过时,其振荡频率稳定,采集的数据显示为直线,出现个别数值较大的数据,属于正常情况。图中还显示了当前采集数据对应的实际数值,根据测得的频率,该数值与实际计算结果一致。图6是其中某一通道有车辆经过时的情况。可以看出,该通道在有车辆通过时,其数据会出现一个小波动。这是因为有车经过时,其振荡频率要增大,计数值必然会减小,这也与实际情形吻合。
6 结束语
针对现有线圈检测器不能很好地应用于车速检测,设计一种用于车速检测的数据采集系统。该系统选用CPLD作为核心器件,精简了系统的结构设计。系统的功能设计不仅利用模拟仿真,证实其正确性,而且在实验中,验证了系统的可靠性,该系统可应用于车辆测速等交通检测中。