一種用于車輛測速的數(shù)據(jù)采集系統(tǒng)
文章出處:http://www.mjagi.com 作者:王水波,宋煥生,王國強(qiáng),郭 亞,鄭 輝 人氣: 發(fā)表時(shí)間:2011年12月07日
1 概述
車速是交通信息中一個(gè)重要參數(shù),車速檢測對城市交通控制與管理有著重要的作用和意義[1]。通常,這些信息的獲取是靠各種檢測設(shè)備來完成的,現(xiàn)有的交通檢測設(shè)備主要有環(huán)形線圈檢測器、視頻檢測器和微波檢測器,其中,環(huán)形線圈檢測器[1-2]由于其性能穩(wěn)定可靠、靈敏度高、檢測數(shù)據(jù)精確和成本低等優(yōu)點(diǎn)而被廣泛使用。
環(huán)形線圈檢測器是一種基于電磁感應(yīng)現(xiàn)象的車輛檢測設(shè)備,利用車輛經(jīng)過檢測區(qū)域時(shí),引起線圈電感發(fā)生變化的原理來工作。車輛檢測器檢測出這個(gè)電感變化量,就能檢測出車輛的通過或存在情況。檢測這個(gè)電感的變化量有2種方式:(1)利用相位鎖存器和相位比較器的技術(shù)來檢測相位變化[1-4];(2)利用耦合振蕩電路對振蕩頻率進(jìn)行檢測[5-6]。
傳統(tǒng)的線圈檢測器主要用于檢測車輛的存在或通過情況,在速度的檢測上,存在很大缺陷:(1)由于環(huán)形線圈的工作頻率與靈敏度、線圈匝數(shù)和線圈埋設(shè)深度有關(guān),經(jīng)過處理后的二值化結(jié)果會有較大波動(dòng),很難精確檢測車速;(2)傳統(tǒng)的線圈檢測器是以獨(dú)立的單個(gè)線圈來工作的,當(dāng)有車輛經(jīng)過不同線圈邊緣時(shí),會發(fā)生“誤觸發(fā)”,也會導(dǎo)致速度檢測的不準(zhǔn)確性。
本文針對現(xiàn)有線圈檢測器的設(shè)計(jì)方式和檢測功能進(jìn)行研究,并在第2種檢測方式的基礎(chǔ)上,設(shè)計(jì)一種可用于車輛測速的交通數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)采用可編程邏輯器件,在短時(shí)間內(nèi),同時(shí)完成多通道數(shù)據(jù)采集功能的設(shè)計(jì),也能根據(jù)需要,隨時(shí)更改設(shè)計(jì),使系統(tǒng)占有資源少,開發(fā)周期短,設(shè)計(jì)方便。該系統(tǒng)采集的數(shù)據(jù)可通過CH365接口芯片和PCI總線實(shí)時(shí)地傳輸?shù)接?jì)算機(jī)中,可以為各種檢測提供需要的數(shù)據(jù)信息,尤其適合同時(shí)實(shí)現(xiàn)多通道數(shù)據(jù)的采集,提高了數(shù)據(jù)的采集效率和精度。
2 系統(tǒng)總體設(shè)計(jì)
利用可編程器件,簡化系統(tǒng)的硬件設(shè)計(jì),使系統(tǒng)具有小型化和簡易化的特點(diǎn)。本系統(tǒng)采用Altera公司MAX7000系列芯片(EPM7128STC-100-10)。其片上資源很豐富,可以滿足現(xiàn)階段的設(shè)計(jì)需要,系統(tǒng)總體設(shè)計(jì)框圖如圖1所示。
為了調(diào)節(jié)振蕩頻率,在多個(gè)通道同時(shí)工作時(shí),避免線圈間的頻率干擾,在耦合振蕩電路中,加入電子開關(guān)選擇電路,這樣,在實(shí)現(xiàn)多通道數(shù)據(jù)采集時(shí),可以保證檢測精度。另外,它還具有靈敏度的調(diào)節(jié)功能。
振蕩電路引起的頻率變化是個(gè)模擬信號,檢測頻率的變化是通過設(shè)計(jì)合適的計(jì)數(shù)電路來完成的,信號整形電路是用來完成從模擬信號到數(shù)字信號的轉(zhuǎn)換。有源晶振電路輸出一個(gè)高頻(30 MHz)時(shí)鐘脈沖信號,作為計(jì)數(shù)電路的基準(zhǔn)信號。電源模塊電路提供+12 V和+5 V輸出電壓,為耦合振蕩電路和CPLD的正常工作提供所需電壓。JTAG接口電路為編程下載和隨時(shí)更改設(shè)計(jì),提供一個(gè)快速途徑。
為使系統(tǒng)正常工作,該系統(tǒng)還配有復(fù)位電路、LED輸出顯示電路等外圍電路。整個(gè)數(shù)據(jù)采集電路的設(shè)計(jì)都集中在CPLD芯片中完成。
2.1 耦合振蕩電路
機(jī)動(dòng)車經(jīng)過埋有線圈的路面時(shí),會產(chǎn)生耦合振蕩電路頻率的變化,該變化是由地埋線圈構(gòu)成的耦合振蕩電路引起的。系統(tǒng)中的耦合振蕩電路如圖2所示。
可以看出,這是一個(gè)電容反饋3點(diǎn)式振蕩電路[6]。電源+12 V通過高頻扼流圈LC加到三極管BJT上,扼流圈LC的功能是避免電源對振蕩回路的高頻信號造成短路。
2.2 CPLD的硬件設(shè)計(jì)CPLD完成對數(shù)據(jù)的采集和提供與CH365進(jìn)行數(shù)據(jù)傳輸?shù)慕涌谛盘?,將待測信號在CPLD中進(jìn)行分頻處理,對已知的高頻信號進(jìn)行計(jì)數(shù)。CPLD的硬件設(shè)計(jì)采用原理圖和AHDL硬件描述語言相結(jié)合的方式,頂層設(shè)計(jì)采用原理圖輸入方式,圖3給出了該部分頂層設(shè)計(jì)電路圖。
在圖3中,LOOP1和LOOP2是2路經(jīng)過信號整形電路后的數(shù)字信號;CLK30M是有源晶振電路輸出的高頻基準(zhǔn)信號,輸出頻率為30 MHz;模塊LOOP_CNT完成分頻和計(jì)數(shù),其原理設(shè)計(jì)是采用AHDL來實(shí)現(xiàn)的,其語言描述程序?yàn)?
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通過地址總線,對線圈通道采集到的數(shù)據(jù)進(jìn)行選擇,通過不同的地址來讀取不同線圈通道中的數(shù)據(jù),
實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)傳輸。模塊CPU_INTERFACE將采集到的數(shù)據(jù)通過PCI接口芯片CH365和PCI總線傳入計(jì)算機(jī)中。編寫相應(yīng)的軟件程序,能實(shí)時(shí)讀取線圈通道中的數(shù)據(jù),對采集到的數(shù)據(jù)進(jìn)行分析和處理,從而檢測出車輛的存在或通過情況。
3 硬件設(shè)計(jì)仿真
借助AHDL硬件描述語言和MAX PLUS II開發(fā)工具,可以得到如圖4所示的仿真結(jié)果。
當(dāng)讀選通信號(RD)有效(低電平)時(shí),可以通過不同的地址讀出檢測到的計(jì)數(shù)值,每個(gè)線圈通道所檢測到的計(jì)數(shù)結(jié)果都是2 Byte。圖中,A和D分別是16 bit的地址總線和8 bit的數(shù)據(jù)總線;H000和H0001對應(yīng)一個(gè)線圈通道;H0002和H0003對應(yīng)另一個(gè)線圈通道。當(dāng)計(jì)算機(jī)讀完數(shù)據(jù)后,可以在寫選通信號(WR)有效(低電平)時(shí),在某一地址上寫入數(shù)據(jù),并清除存儲器中已讀數(shù)據(jù),為下一次計(jì)算機(jī)進(jìn)行讀數(shù)據(jù)操作做準(zhǔn)備。
4 數(shù)據(jù)采集系統(tǒng)的軟件實(shí)現(xiàn)
軟件功能的實(shí)現(xiàn)是在Visual C++6.0集成開發(fā)環(huán)境上,采用C語言進(jìn)行編程的,可運(yùn)行在Windows XP操作系統(tǒng)上。
數(shù)據(jù)采集的軟件是通過對PCI接口芯片CH365編寫相應(yīng)的程序來實(shí)現(xiàn)的,CH365有豐富的地址、數(shù)據(jù)總線以及讀寫選通信號,為實(shí)現(xiàn)數(shù)據(jù)與計(jì)算機(jī)通信提供一個(gè)可靠接口。其軟件實(shí)現(xiàn)過程如下:
(1)裝載CH365設(shè)備和獲取相關(guān)的參數(shù)信息,如果CH365動(dòng)態(tài)鏈接庫裝載成功,就能打開設(shè)備,獲取IO基地址,讀取數(shù)據(jù)。如果打開CH365設(shè)備失敗,返回重新裝載。
if(LoadLibrary("CH365DLL.DLL")==NULL) return;
//裝載CH365動(dòng)態(tài)鏈接庫
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)讀取相應(yīng)端口中的數(shù)據(jù)。CH365設(shè)備打開成功后,設(shè)置不同的端口地址,在CH365讀選通信號(RD)有效(低電平)時(shí),讀取對應(yīng)端口中的數(shù)據(jù),下面是2通道端口數(shù)據(jù)的讀取。
CH365mReadIoWord(Device_Number,&mIoBase->mCh365IoPort [0x00], &mWord);
CH365mReadIoWord(Device_Number,&mIoBase->mCh365IoPort [0x02], &mWord2);
(3)將端口地址中的數(shù)據(jù)清除,為下次讀取數(shù)據(jù)做準(zhǔn)備。一次數(shù)據(jù)讀取完后,在CH365寫選通信號(WR)有效(低電平)時(shí),在相應(yīng)端口地址中寫入數(shù)據(jù),以清除計(jì)算機(jī)已讀完的數(shù)據(jù),為計(jì)算機(jī)下 一次讀數(shù)據(jù)做準(zhǔn)備,下面是實(shí)現(xiàn)該過程的程序語句:
if(CH365mSetA15_A8(Device_Number,data)==FALSE) printf("ERROR");
if(CH365mWriteIoByte(Device_Number,&mIoBase->mCh365Io Port[0x00], 0x00)==FALSE) printf("ERROR");
//在端口0x00中寫入數(shù)據(jù)
if(CH365mWriteIoByte(Device_Number,&mIoBase->mCh365Io Port[0x02], 0x00)==FALSE) printf("ERROR");
//在端口0x02中寫入數(shù)據(jù)
5 實(shí)驗(yàn)結(jié)果分析
利用該系統(tǒng)和數(shù)據(jù)采集軟件,在某路面上進(jìn)行實(shí)車采集,其結(jié)果如圖5、圖6所示。
圖5顯示了沒有車輛經(jīng)過時(shí)的采集情況。當(dāng)無車經(jīng)過時(shí),其振蕩頻率穩(wěn)定,采集的數(shù)據(jù)顯示為直線,出現(xiàn)個(gè)別數(shù)值較大的數(shù)據(jù),屬于正常情況。圖中還顯示了當(dāng)前采集數(shù)據(jù)對應(yīng)的實(shí)際數(shù)值,根據(jù)測得的頻率,該數(shù)值與實(shí)際計(jì)算結(jié)果一致。圖6是其中某一通道有車輛經(jīng)過時(shí)的情況。可以看出,該通道在有車輛通過時(shí),其數(shù)據(jù)會出現(xiàn)一個(gè)小波動(dòng)。這是因?yàn)橛熊嚱?jīng)過時(shí),其振蕩頻率要增大,計(jì)數(shù)值必然會減小,這也與實(shí)際情形吻合。
6 結(jié)束語
針對現(xiàn)有線圈檢測器不能很好地應(yīng)用于車速檢測,設(shè)計(jì)一種用于車速檢測的數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)選用CPLD作為核心器件,精簡了系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)。系統(tǒng)的功能設(shè)計(jì)不僅利用模擬仿真,證實(shí)其正確性,而且在實(shí)驗(yàn)中,驗(yàn)證了系統(tǒng)的可靠性,該系統(tǒng)可應(yīng)用于車輛測速等交通檢測中。