摘要:介紹一種以單片機ATmega16為核心的超聲波測距儀。該測距儀利用單片機ATmega16的輸入捕獲功能,測量超聲波從發(fā)射探頭發(fā)射至接收探頭接收所經(jīng)過的時間;采用DS18B20測量環(huán)境溫度,補償溫度的變化對超聲波傳播速度的影響,提高測量精度;利用語音芯片ISD4004播報測量結果等語音信息。給出了測距儀的關鍵硬件電路、測量時間的輸入捕獲中斷子程序和錄音/放音子程序。測試結果表明,該測距儀測量精度高,語音播報清晰、流暢。
關鍵詞:單片機;超聲波測距;語音芯片;溫度補償
引言
用超聲波測量距離是一種非常實用的非接觸測量方法,廣泛應用于物料液面測量、機器人定位、汽車防撞系統(tǒng)等領域。傳統(tǒng)的超聲波測距方法是用單片機的一個定時器和一個外部中斷來測量超聲波從發(fā)射探頭發(fā)射到被接收探頭接收所經(jīng)過的時間t,再根據(jù)超聲波測量距離的公式S=vt/2進行計算,得到距離S。這種方法除了多占用單片機的一個外部中斷源外,還會使測量時間t的誤差增大,降低測量精度。本文介紹了一種用AVR單片機ATmega16作為核心控制器的距離儀,該測距儀利用ATmega16輸入捕獲功能實現(xiàn)時間t的精確測量;用溫度傳感器DS18B20檢測周圍環(huán)境的溫度,補償溫度變化對超聲波傳播速度的影響,提高測量精度;用語音芯片ISD4004實現(xiàn)測距結果等語音信息的播報功能。
1 總體設計方案
測距儀的總體設計方案如圖1所示。系統(tǒng)以AVR單片機ATmega16作為核心控制器,負責控制和協(xié)調(diào)各模塊電路的工作。超聲波發(fā)射模塊發(fā)射40 kHz的超聲波信號,超聲波接收模塊對接收到的回波信號進行放大、濾波、比較,形成下降沿。溫度傳感器DS18B20負責對環(huán)境溫度進行檢測,補償溫度變化對超聲波傳播速度的影響。顯示電路采用YM12864中文液晶顯示器,顯示當前溫度和距離等信息。語音電路采用ISD4004語音芯片,該芯片采用SPI通信接口,可以方便地與ATmega16單片機進行通信,實時播報測量距離等語音信息。
2 硬件電路
2.1 超聲波發(fā)射模塊
超聲波發(fā)射模塊電路如圖2所示。由ATmega16的PB3發(fā)送10μs的高電平至SN8P2501B的P2.2,當P2.2檢測到高電平時,從P2.3輸出低電平,三極管Q1飽和導通,MAX3232接通電源,SN8P2501B內(nèi)部的定時器產(chǎn)生8個40 kHz的脈沖信號,由P2.4和P2.5推挽輸出,經(jīng)MAX3232升壓后推動超聲波換能器發(fā)送超聲波信號。然后P2.3輸出高電平,三極管Q1截止,關斷MAX3232的電源,停止發(fā)射超聲波信號。
2.2 超聲波接收模塊
超聲波接收模塊電路如圖3所示。從超聲波發(fā)射探頭發(fā)出的超聲波信號遇障礙物后返回,被接收探頭接收并轉(zhuǎn)換成微弱的電信號,經(jīng)集成運算放大器TL074放大、濾波、比較后,產(chǎn)生下降沿,觸發(fā)SN8P2501B的P2.2引腳產(chǎn)生中斷,在中斷程序中將P2.1置高電平。高電平持續(xù)的時間即為超聲波從發(fā)射探頭發(fā)射遇到障礙物后返回,并被接收探頭接收所經(jīng)過的時間。
2.3 語音播報模塊
語音播報模塊電路如圖4所示。由集成穩(wěn)壓芯片AMS1117—3.3構成的穩(wěn)壓電路輸出3.3 V電壓供給語音芯片ISD4004。ISD4004的語音輸入由麥克風MIC輸入或由插頭輸入,插入插頭時麥克風輸入電路自動斷開,此時可以與電腦連接進行錄音。放音時,音頻輸出經(jīng)LM386放大驅(qū)動揚聲器進行放音。ATmega16通過SPI接口向ISD4004發(fā)送錄音地址和錄音命令進行錄音,發(fā)送放音地址和放音命令進行放音。中文液晶YM12 864和溫度傳感器DS18B20與單片機ATmega16的連接較為簡單,在此不作詳述。
3 軟件設計
3.1 超聲波測距程序設計
超聲波測量距離的表達式為S=[(331.4+0.607T)×t]/2。其中,T為環(huán)境溫度,t為從發(fā)射超聲波信號到接收到回波信號所經(jīng)過的時間。由此可見,測量距離的關鍵是盡可能精確地測出時間t。測量時間t常用的方法是用一個定時器/計數(shù)器和一個外部中斷來實現(xiàn)。定時器/計數(shù)器用來計時,外部中斷設置成電平觸發(fā)方式,用于檢測一個脈沖的上升沿和下降沿,當ATmega16外部中斷引腳輸入電平由低變高時觸發(fā)第一次中斷,讀取時間值t1,然后將外部中斷設置為下降沿觸發(fā)中斷,等到ATmega16外部中斷引腳輸入的電平由高變低時,再次觸發(fā)中斷,讀取時間值t2,然后將外部中斷設置為上升沿觸發(fā)中斷,兩次時間值之差t=t2-t1即為脈沖的寬度。這種方法除了多占用ATmega16的一個外部中斷源外,讀取的時間值精度還容易受到中斷響應時間的影響,造成測量距離誤差增大。單片機ATmega16具有一路輸入捕獲功能,配合內(nèi)部的定時器/計數(shù)器T/C1,可以非常方便和精確地測出一個脈沖從上升沿到下降沿間的時間。方法是先將T/C1設置為輸入捕獲模式、上升沿捕獲,并開啟全局中斷;當發(fā)射探頭發(fā)射的超聲波信號遇到障礙物后返回,被接收探頭接收時,ATmega16的PD6(ICP1)引腳由低電平變高電平,觸發(fā)第一次輸入捕獲,將T/C1的TCNT1中的計數(shù)值自動寫入輸入捕獲寄存器ICR1,在程序中將ICR1的值保存在變量t1中,然后將T/C1設置為下降沿捕獲;當接收到的信號下降沿到來時,再一次觸發(fā)輸入捕獲,將ICR1的值保存在變量t2中,然后將TCNT1中的值清0,并將T/C1設置為上升沿捕獲。假設單片機ATmega16所使用的晶振為8 MHz,采用1/8分頻,則兩次捕獲發(fā)生的時間之差t=t2-t1(μs)即為發(fā)射超聲波信號至接收到回波信號所經(jīng)過的時聞。定時器/計數(shù)器T/C1捕獲中斷程序如下:
3.2 語音播報程序設計
語音播報程序主要分為錄音和放音程序。由單片機ATmega16的SPI端口按照ISD4004的時序要求發(fā)送錄/放音地址和命令。錄音程序?qū)⑿枰浿频恼Z音元素按照事先分配好的錄音地址分段錄制到IDS4004中。把錄音起始地址存放在數(shù)組當中,在放音程序中根據(jù)要播報的語音信息查找到相應語音元素的地址,發(fā)送放音命令,即可清晰流暢地播報出語音信息。錄音和放音的參考子程序如下:
4 測試結果與分析
測試條件為:在環(huán)境溫度為29℃,超聲波發(fā)射探頭與接收探頭離地面30cm,障礙物為0.6 cm×0.5 cm垂直于地面放置的木板,用鋼卷尺測量實際距離,測試結果如表1所列。
結語
本文設計的超聲波測距儀充分利用ATmega16的輸入捕捉功能,實現(xiàn)了2cm~4.2 m的距離測量,通過ATmega16的硬件SPI接口控制語音芯片ISD4004實時播報測量距離等語音信息。多次測試結果表明,該測距儀具有工作穩(wěn)定可靠、重復性好、測量精度高、語音播報流暢清晰等特
點??蓱糜谖锪弦何粶y量、汽車防撞系統(tǒng)、機器人定位等場合,在非接觸測量方面具有很好的應用前景。