王 怡
(電子科技大學成都學院微電子技術系,四川 成都 611731)
一種超聲波測距裝置的設計與實現(xiàn)
王怡
(電子科技大學成都學院微電子技術系,四川 成都 611731)
摘要:超聲波測距技術應用廣泛,可應用于汽車倒車、建筑施工工地以及一些工業(yè)現(xiàn)場的位置監(jiān)控等。重點介紹了一種基于單片機的超聲波測距裝置的設計與實現(xiàn)。包括電路的基本組成及設計原理,超聲波測量模塊的接口特性及基本功能,軟件設計原理以及測量精度的控制等。
超聲波;測距;單片機;精度
測距儀以基于51單片機的最小系統(tǒng)為核心,加上超聲波測距模塊,顯示模塊和通信模塊構成。顯示模塊由數(shù)碼管構成,可以實時顯示距離測量的結果。通信模塊以單片機自帶的通用異步串口為基礎,擴展一路RS232電平接口。通過這個接口,可以把測量結果上傳給其他設備,也可以接受來自網(wǎng)絡中主機的命令,按要求進行距離測量和結果上傳。
2.1 超聲波模塊的選擇和基本工作原理
超聲波模塊是實現(xiàn)距離測量的核心硬件部件。本次選用的超聲波測距模塊是HC-SR04。
該模塊接口簡單,只有4個引腳,分別是電源、地、觸發(fā)信號輸入,回響信號輸出。HC-SR04模塊可提供2cm~400cm的非接觸式距離感觸功能,測量精度可達3mm。工作原理如下:
(1)啟動測量:向觸發(fā)信號輸入引腳輸入一個至少持續(xù)10us的高電平信號,就能啟動模塊的測距;
(2)測量過程及輸出:模塊啟動測距后會發(fā)出8個40kHz的方波,并自動檢測是否有信號返回。一旦測到返回信號,就在回響信號輸出端輸出一個正脈沖,正脈沖持續(xù)時間就是超聲波信號發(fā)出到收到返回信號的時間間隔。因此,通過測量該正脈沖的寬度并進行正確地換算,就能得到相應的測量距離;
(3)結果換算:測量距離=(高電平持續(xù)時間×音速)/2。
2.2 超聲波模塊與單片機之間的互聯(lián)設計
超聲波模塊與單片機之間的互聯(lián),最簡單的設計就是將單片機的任意兩根I/O口線與模塊的觸發(fā)信號輸入,回響信號輸出相連就可以了。但是,這種方式測量回波的寬度會存在一定的誤差。因此,如果想要精確地測量回波寬度,就要用到單片機定時器自帶的門控功能。硬件的互聯(lián)就會不同。此時,模塊的觸發(fā)信號輸入端仍然可以與單片機的一根普通用戶I/O口線連接。但模塊的回響信號則只能連接到單片機的外部中斷引腳INT0或INT1上,這樣才能使用定時器的門控功能,實現(xiàn)精確測量。
3.1 一般測量
如果測量精度要求不高,就可以使用查詢的方式來檢測回波信號的變化,并相應地控制定時器的計時,計時完成后,取出計數(shù)值,換算成時間,再將高電平的持續(xù)時間換算成距離即可。測量控制部分的關鍵代碼如下:
sbit Trig=P1^0;
sbit Echo=P1^1;
main( )
{
Trig=0; //觸發(fā)信號初態(tài)置為0
TMOD=0x01; //設置定時器0為工作方式1,內(nèi)部計數(shù)模式
TH0=0; //定時器0清零
TL0=0; //定時器0清零
Trig=1; //觸發(fā)信號置1,開始測量
delay_12us(); //延時12us
while(Echo==0); //等待有效的回波信號
TR0=1; //啟動定時器0
while(Echo==1); //等待回波信號變低
TR0=0; //停止計數(shù)
........
}
上述測量控制過程完成后,就可以讀取TH0和TL0中的計數(shù)值,進行測量距離的計算了。
3.2 精確測量
在一般的測量方法中,監(jiān)測回波信號和啟動定時器都是通過軟件查詢來實現(xiàn)的。然而,由于軟件查詢和回波信號的產(chǎn)生是完全獨立的兩個操作,所以查詢必然滯后于回波信號的產(chǎn)生,從而帶來一定的測量誤差。而程序讀到有效的回波信號后,要先做判斷,然后再啟動定時器工作,這都需要時間?;夭ㄐ盘栕?yōu)闊o效,程序讀取狀態(tài)后再關閉定時器,也是類似的過程。因此,測量是有誤差的。
如果想測量更精確,就要使用硬件來控制定時器的啟動。即回波信號一變?yōu)橛行?,定時器立刻啟動,停止也一樣。要做到這一點,就要用到單片機定時器自帶的門控功能。單片機的TMOD寄存器中有一個門控位GATE。該位置為1,定時器的運行控制位TRx置為1,定時器的啟動和停止就可以由單片機的外部中斷引腳INT0或INT1控制了。因此,硬件互聯(lián)時,回響信號必須連接到單片機的外部中斷引腳INT0或INT1上。這樣就能做到定時器的計時與回響信號變化之間的同步了。軟件的設計也更簡化,控制部分的關鍵代碼如下:
sbit Trig=P1^0;
sbit Echo=P1^1;
main( )
{
Trig=0; //觸發(fā)信號初態(tài)置為0
TMOD=0x01; //設置定時器0為工作方式1,內(nèi)部計數(shù)模式
TH0=0; //定時器0清零
TL0=0; //定時器0清零
Trig=1; //觸發(fā)信號置1,開始測量
delay_12us(); //延時12us
while(Echo==0); //等待有效的回波信號
while(Echo==1); //等待回波信號變低
........
}
上述測量控制過程完成后,就可以讀取TH0和TL0中的計數(shù)值,進行測量距離的計算。
這樣測量的結果就很準確了。
本文介紹了一種基于51單片機超聲波測距模塊的設計。包括硬件設計原理,程序流程設計,測量精度控制等。該設計在實測中運作良好,穩(wěn)定,測試距離及精度符合設計要求。
[1]張瑾,張偉,張立寶. Protel99SE入門與提高[M].北京:人民郵電出版社,2010.
TP391.8
A