摘 要:本文通過分析單片機(jī)系統(tǒng)在超聲波測距過程中所出現(xiàn)的問題和原因,提出采用CPLD可編程邏輯器件專門用來測距,測距中的時(shí)間是通過高精度的晶體振蕩器作為時(shí)鐘信號源來進(jìn)行計(jì)數(shù)的,可實(shí)現(xiàn)高精度和同步測量。
關(guān)鍵詞:CPLD 超聲波測距 高精度 同步
Design and Application of CPLD in the ultrasonic ranging system
Abstact:In this paper,by analyzing the problems and causes of the single-chip system in the ultrasonic ranging process,using specially the programmable logic device CPLD to rang is put forward.Time in ranging is through high-precision crystal oscillator as a clock signal Sources to count, carrying out high-precision and synchronous measurement.
Keywords:CPLD, the ultrasonic ranging, high-precision,synchronize
引言
超聲波測距是一種非接觸測量方法,超聲波具有頻率高、波長短、指向性強(qiáng)、能量消耗緩慢、傳播距離較遠(yuǎn)、不受電磁干擾、回波表現(xiàn)穩(wěn)定,測量精度高等優(yōu)點(diǎn),利用超聲波檢測往往比較迅速、方便、計(jì)算簡單、易于實(shí)時(shí)控制, 所以通常采用超聲波測距裝置進(jìn)行距離檢測。
以往采用單片機(jī)系統(tǒng)進(jìn)行超聲波測距,由軟件控制實(shí)現(xiàn)超聲波信號的發(fā)射、接收及計(jì)數(shù)器的啟動(dòng)與停止。這就導(dǎo)致超聲波信號的發(fā)射與計(jì)數(shù)器的啟動(dòng)不同步,超聲波傳感器接收到信號與單片機(jī)檢測到信號之間不同步,又因?yàn)閱纹瑱C(jī)的計(jì)數(shù)頻率較低,所以單片機(jī)系統(tǒng)的測距誤差一般為厘米級。這樣就不能滿足精確測量的要求了。
本文采用CPLD完成超聲波的發(fā)射和接收,并精確記錄回波時(shí)間,克服了單片機(jī)的速度限制,不但可以使記錄回波的時(shí)間精確到nS級而且可以實(shí)現(xiàn)同步測量,這樣就可以滿足高精度工程測量的要求。
1 CPLD模塊的原理框圖及功能
CPLD模塊主要由發(fā)射模塊,16位計(jì)時(shí)計(jì)數(shù)器模塊,接收模塊,順序執(zhí)行計(jì)數(shù)器模塊和六選一數(shù)據(jù)選擇器模塊五部分組成。其總體框圖如圖1所示。
CPLD模塊主要完成超聲波的發(fā)射、接收和時(shí)間的測量。超聲波發(fā)射模塊啟動(dòng)125KHz的超聲波發(fā)射,當(dāng)發(fā)射脈沖串達(dá)到設(shè)定值后,關(guān)閉超聲波的發(fā)射,同時(shí)啟動(dòng)六路計(jì)時(shí)計(jì)數(shù)器模塊開始計(jì)時(shí);信號經(jīng)過障礙物反射回來,接收電路接收到回波后,將其進(jìn)行整形,作為接收模塊的信號,當(dāng)接收完回波脈沖信號后,接收模塊輸出端發(fā)出信號,關(guān)閉計(jì)時(shí)計(jì)數(shù)器停止工作;當(dāng)所有的回波接收完畢后,順序執(zhí)行計(jì)數(shù)器輸出端發(fā)出信號啟動(dòng)單片機(jī)開始接收數(shù)據(jù),通過順序執(zhí)行計(jì)數(shù)器的計(jì)數(shù)值、數(shù)據(jù)選擇器的選擇端與計(jì)時(shí)計(jì)數(shù)器的控制端分別讀取六路不同的計(jì)數(shù)值。所有的數(shù)據(jù)讀取完后,清除計(jì)時(shí)計(jì)數(shù)器的計(jì)數(shù)值,準(zhǔn)備下一次的循環(huán)計(jì)數(shù)。
[align=center]
圖1 CPLD系統(tǒng)原理框圖[/align]
2 CPLD系統(tǒng)各功能模塊設(shè)計(jì)
2.1 發(fā)射模塊設(shè)計(jì)
2.1.1端口說明:
CLK: 輸入口,接晶振時(shí)鐘。
CLR: 輸入口,單片機(jī)讀取所有的計(jì)時(shí)計(jì)數(shù)器計(jì)數(shù)值后清除CPLD內(nèi)部所有計(jì)數(shù)器,使其恢復(fù)初態(tài)。
START:輸入口,使模塊開始輸出125KHz的方波。
SEND:輸出口,輸出125KHz的方波。
SENDFINIS:輸出口,輸出一定數(shù)量的脈沖串之后,輸出一高電平,用來啟動(dòng)計(jì)時(shí)計(jì)數(shù)器開始計(jì)數(shù)。
[align=center]
圖2 超聲波發(fā)射模塊[/align]
2.1.2功能:
晶振經(jīng)過分頻器分頻得到發(fā)射頻率為125KHz的方波,當(dāng)單片機(jī)發(fā)出控制信號START=1時(shí),開啟125KHz的方波開始發(fā)射。當(dāng)發(fā)完脈沖串之后,SENDFINISH由低變?yōu)楦唠娖?,作為?jì)時(shí)計(jì)數(shù)器的觸發(fā)脈沖,用來啟動(dòng)計(jì)時(shí)計(jì)數(shù)器開始計(jì)數(shù)。
2.2 接收模塊設(shè)計(jì)
2.2.1端口說明
REVCLK:輸入口,接收回波信號輸入端。
CLR:輸入口,所有計(jì)時(shí)計(jì)數(shù)器數(shù)據(jù)送入單片機(jī)后,使CPU內(nèi)部的所有計(jì)數(shù)器計(jì)數(shù)值清零。
REVCOUNT:輸出口,接收完回波信號后,輸出高電平,關(guān)閉計(jì)時(shí)計(jì)數(shù)器計(jì)時(shí)。
[align=center]
圖3 超聲波接收模塊[/align]
2.2.2功能:
接收模塊接收完回波信號后,判斷其計(jì)數(shù)值與發(fā)射的脈沖串?dāng)?shù)值是否相同,若相同,RECOUNT關(guān)閉計(jì)時(shí)計(jì)數(shù)器,反之,則輸出狀態(tài)不變。
2.3 計(jì)時(shí)計(jì)數(shù)器模塊設(shè)計(jì)
2.3.1端口說明:
A:輸入口,數(shù)據(jù)選擇端,A=0/1時(shí),分別讀計(jì)時(shí)計(jì)數(shù)器的高/低8位。
CONCLK:輸入口,讀取計(jì)時(shí)計(jì)數(shù)器值的控制端口;
CLK:輸入口,接晶振時(shí)鐘。
CLR:輸入口,所有計(jì)時(shí)計(jì)數(shù)器數(shù)據(jù)送入單片機(jī)后,使CPU 內(nèi)部的所有計(jì)數(shù)器計(jì)數(shù)值清零。
SEND:輸入口,輸入高電平,用來啟動(dòng)計(jì)時(shí)計(jì)數(shù)器開始計(jì)時(shí)。
REV:輸入口,接收模塊接收完回波信號后,輸入高電平,關(guān)閉計(jì)時(shí)計(jì)數(shù)器。
CE:輸入口,使能將六路計(jì)數(shù)值分別送到數(shù)據(jù)總線。
DB[0…7]:輸出口,將計(jì)時(shí)計(jì)數(shù)器值送入單片機(jī)。
[align=center]
圖4計(jì)時(shí)計(jì)數(shù)器模塊[/align]
2.3.2功能:
晶振時(shí)鐘通過分頻得到計(jì)數(shù)頻率,作為16位計(jì)時(shí)計(jì)數(shù)器的時(shí)鐘脈沖。當(dāng)SEND為高電平時(shí),啟動(dòng)計(jì)時(shí)計(jì)數(shù)器開始計(jì)數(shù),REV為高電平時(shí),關(guān)閉計(jì)時(shí)計(jì)數(shù)器停止計(jì)數(shù)。由于其計(jì)數(shù)值為16位二進(jìn)制數(shù),將其送入8位單片機(jī)處理,通過控制端口A的高低電平,將16位計(jì)數(shù)值分為高、低8位,結(jié)合CE與CONCLK兩個(gè)端口來依次將其16位計(jì)數(shù)值通過數(shù)據(jù)總線送入單片機(jī)。
2.4 順序執(zhí)行計(jì)數(shù)器模塊設(shè)計(jì)
2.4.1端口說明
REVCOUNT A…F: 輸入口,接收模塊接收完信號后,輸出高電平,使送數(shù)模塊FINISH端口通知單片機(jī)開始接收數(shù)據(jù)。
RDCLK:輸入口,單片機(jī)依次讀取計(jì)時(shí)計(jì)數(shù)器的計(jì)數(shù)值的脈沖信號。
CE1-CE6:輸出口,給相應(yīng)的計(jì)時(shí)計(jì)數(shù)器模塊使能。
FINISH :輸出口,啟動(dòng)單片機(jī)準(zhǔn)備接收數(shù)據(jù)。
[align=center]
圖5 順序執(zhí)行計(jì)數(shù)器模塊[/align]
2.4.2功能:
所有的接收模塊接收完數(shù)據(jù)后,F(xiàn)INISH端口輸出高電平,以觸發(fā)單片機(jī)使單片機(jī)處于接收數(shù)據(jù)狀態(tài),單片機(jī)發(fā)出信號給送數(shù)模塊RDCLK端口,使順序執(zhí)行計(jì)數(shù)器開始計(jì)數(shù),計(jì)數(shù)值每次加1,輸出端口便使能相應(yīng)的計(jì)時(shí)計(jì)數(shù)器,單片機(jī)便從相應(yīng)的計(jì)時(shí)計(jì)數(shù)器中讀取計(jì)數(shù)值。選取計(jì)時(shí)計(jì)數(shù)器的順序如表1所列。
表1 選取計(jì)時(shí)計(jì)數(shù)器的順序
2.5 順序執(zhí)行計(jì)數(shù)器模塊設(shè)計(jì)
2.5.1端口說明:
A2、A1、A0:輸入口,各路計(jì)時(shí)計(jì)數(shù)器的選擇端。
DB[7…0]:輸出口,將計(jì)時(shí)計(jì)數(shù)器值送入單片機(jī)。
X0[7…0]-X5[7…0]:各路計(jì)時(shí)計(jì)數(shù)器的計(jì)數(shù)值。
[align=center]
圖6 數(shù)據(jù)選擇器模塊[/align]
2.5.2功能:
通過數(shù)據(jù)選擇器的選擇端A2、A1、A0分別選擇六路計(jì)時(shí)計(jì)數(shù)器,然后通過DB[7…0]將計(jì)數(shù)值送給單片機(jī)。選取計(jì)數(shù)值的順序如表2所列。
表2 選取計(jì)數(shù)值的順序
3.單片機(jī)讀取數(shù)據(jù)
本系統(tǒng)模塊主要是為了實(shí)現(xiàn)125KHz的超聲波的發(fā)射與接收,以及六路超聲波從發(fā)射到接收之間時(shí)間的測量,最后通過單片機(jī)控制信號將其計(jì)數(shù)值通過數(shù)據(jù)總線讀出,送到單片機(jī)中。但是為了能準(zhǔn)確的讀取數(shù)據(jù),其讀取計(jì)數(shù)值的執(zhí)行過程如下:
?。?) 當(dāng)順序執(zhí)行計(jì)數(shù)器模塊的端口FINISH=1 時(shí),通知單片機(jī)準(zhǔn)備接受數(shù)據(jù)。
?。?) 通過A2、A1、A0選擇數(shù)據(jù)選擇器要讀取的計(jì)時(shí)計(jì)數(shù)器的計(jì)數(shù)值。
(3) 由RDCLK的脈沖輸入來選通計(jì)時(shí)計(jì)數(shù)器。
?。?) 通過A來選通所要輸出計(jì)時(shí)計(jì)數(shù)器計(jì)數(shù)值的高低8位。
?。?) 通過控制信號CONCLK來讀取高低8位數(shù)值。
結(jié) 語
采用CPLD可編程邏輯器件來測距,系統(tǒng)反應(yīng)時(shí)間在nS級,有效地提高了系統(tǒng)精度,滿足了精確測距要求,另外6路超聲波傳感器同時(shí)工作,實(shí)現(xiàn)了數(shù)據(jù)的同步采集。為超聲波在精密測量領(lǐng)域的應(yīng)用和推廣提供了一種可能。
參考文獻(xiàn):
[1]程鐵棟 楊麗榮. CPLD和單片機(jī)的高精度超聲測距系統(tǒng)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2005:17-19.
[2]葛健強(qiáng). 基于CPLD的超聲波測距儀研制[J].無錫商業(yè)職業(yè)技術(shù)學(xué)院學(xué)報(bào),2004,4(3):8-10.
[3]邊計(jì)年. 數(shù)字邏輯與VHDL設(shè)計(jì)[M].北京:清華大學(xué)出版社,2005.