摘要:超聲波測(cè)距主要應(yīng)用于倒車?yán)走_(dá)、建筑施工工地以及一些工業(yè)現(xiàn)場(chǎng),例如:液位、井深、管道長(zhǎng)度等場(chǎng)合。目前國(guó)內(nèi)一般使用集成電路設(shè)計(jì)超聲波測(cè)距儀,但是集成電路的成本很高,并且沒(méi)有顯示,操作使用很不方便。本文介紹一種以AT89C2051或GSM97C2051單片機(jī)為核心的低成本、高精度、微型化數(shù)字顯示超聲波測(cè)距儀的硬件電路和軟件設(shè)計(jì)方法。實(shí)際使用證明該儀器工作穩(wěn)定,性能良好。
1、超聲波測(cè)距原理
超聲波測(cè)距是通過(guò)不斷檢測(cè)超聲波發(fā)射后遇到障礙物所反射的回波,從而測(cè)出發(fā)射和接收回波的時(shí)間差t,然后求出距離S=Ct/2,式中的C為超聲波波速。
由于超聲波也是一種聲波,其聲速C與溫度有關(guān),表1列出了幾種不同溫度下的聲速。在使用時(shí),如果溫度變化不大,則可認(rèn)為聲速是基本不變的。如果測(cè)距精度要求很高,則應(yīng)通過(guò)溫度補(bǔ)償?shù)姆椒右孕UB曀俅_定后,只要測(cè)得超聲波往返的時(shí)間,即可求得距離。這就是
超聲波測(cè)距儀的機(jī)理。其系統(tǒng)框圖如圖1所示。
2、AT89C2051的功能特點(diǎn)
AT89C2051是一個(gè)2k字節(jié)可編程EPROM的高性能微控制器。它與工業(yè)標(biāo)準(zhǔn)MCS-51的指令和引腳兼容,因而是一種功能強(qiáng)大的微控制器,它對(duì)很多嵌入式控制應(yīng)用提供了一個(gè)高度靈活有效的解決方案。AT89C2051有以下特點(diǎn):2k字節(jié)EPROM、128字節(jié)RAM、15根I/O線、2個(gè)16位定時(shí)/計(jì)數(shù)器、5個(gè)向量二級(jí)中斷結(jié)構(gòu)、1個(gè)全雙向的串行口、并且內(nèi)含精密模擬比較器和片內(nèi)振蕩器,具有4.25V至5.5V的電壓工作范圍和12MHz/24MHz工作頻率,同時(shí)還具有加密陣列的二級(jí)程序存儲(chǔ)器加鎖、掉電和時(shí)鐘電路等。此外,AT89C2051還支持二種軟件可選的電源節(jié)電方式。空閑時(shí),CPU停止,而讓RAM、定時(shí)/計(jì)數(shù)器、串行口和中斷系統(tǒng)繼續(xù)工作。可掉電保存RAM的內(nèi)容,但可使振蕩器停振以禁止芯片所有的其它功能直到下一次硬件復(fù)位。
AT89C2051有2個(gè)16位計(jì)時(shí)/計(jì)數(shù)器寄存器Timer0tTimer1。作為一個(gè)定時(shí)器,每個(gè)機(jī)器周期寄存器增加1,這樣寄存器即可計(jì)數(shù)機(jī)器周期。因?yàn)橐粋€(gè)機(jī)器周期有12個(gè)振蕩器周期,所以計(jì)數(shù)率是振蕩器頻率的1/12。作為一個(gè)計(jì)數(shù)器,該寄存器在相應(yīng)的外部輸入腳P3.4/T0和P3.5/T1上出現(xiàn)從1至0的變化時(shí)增1。由于需要二個(gè)機(jī)器周期來(lái)辨認(rèn)一次1到0的變化,所以zui大的計(jì)數(shù)率是振蕩器頻率的1/24,可以對(duì)外部的輸入端P3.2/INT0和P3.3/INT1編程,便于測(cè)量脈沖寬度的門。
表1聲速與溫度關(guān)系表
充分利用AT89C2051的片內(nèi)資源,即可在很少外圍電路的情況下構(gòu)成功能完善的超聲波測(cè)距系統(tǒng)。
3、系統(tǒng)硬件電路設(shè)計(jì)
超聲波測(cè)距儀的硬件電路如圖2所示。
AT89C2051通過(guò)外部引腳P1.6輸出脈沖寬度為250μs,載波為40kHz的10個(gè)脈沖的脈沖群,以推挽形式加到變壓器的初級(jí),經(jīng)升壓變換推動(dòng)超聲波換能器發(fā)射出去。在發(fā)射的同時(shí),P1.7輸出一個(gè)高電平啟動(dòng),給電容C4充電。發(fā)射結(jié)束時(shí)高電平翻轉(zhuǎn)為低電平,C4開始對(duì)R2、R3組成的分壓器放電并輸出到比較器的負(fù)端。超聲波接收換能器將接收到的障礙物反射的超聲波送到放大器進(jìn)行放大,這是一個(gè)高增益、低噪聲放大器,在對(duì)放大后的信號(hào)進(jìn)行檢波后將檢測(cè)回波送到比較器的正輸入端。發(fā)射時(shí)P1.7輸出的電平可以抑制比較器的翻轉(zhuǎn),這樣就可以抑制發(fā)射器發(fā)射的超聲波直接輻射到接收器而導(dǎo)致錯(cuò)誤檢測(cè)。
圖3是超聲波測(cè)距原理的波形圖,從圖中可以看到,測(cè)出回波和發(fā)射脈沖之間的時(shí)間間隔,利用S=Ct/2就可以算出距離,再在LCD上顯示出來(lái)。當(dāng)然還可以設(shè)置若干個(gè)鍵,以用來(lái)控制電路的工作狀態(tài)。限制系統(tǒng)的zui大可測(cè)距離存在四個(gè)因素:超聲波的幅度,反射而的質(zhì)地,反射而和入射聲波之間的夾角以及接收換能器的靈敏度。接收換能器對(duì)聲波脈沖的直接接收能力將決定zui小的可測(cè)距離。
4、系統(tǒng)軟件設(shè)計(jì)
AT89C2051單片機(jī)和其開發(fā)應(yīng)用系統(tǒng)具有語(yǔ)言簡(jiǎn)潔、可移植性好、表達(dá)能力強(qiáng)、表達(dá)方式靈活、可進(jìn)行結(jié)構(gòu)化設(shè)計(jì)、可以直接控制計(jì)算機(jī)硬件、生成代碼質(zhì)量高、使用方便等諸多優(yōu)點(diǎn)。超聲波測(cè)距儀就是用AT89C51單片機(jī)開發(fā)設(shè)計(jì)的。它采用模塊化設(shè)計(jì),由主程序、發(fā)射子程序、查蟓接收子程序、定時(shí)子程序、顯示子程序等模塊組成。
圖4和圖5分別為主程序和測(cè)量子程序的框圖。該系統(tǒng)的主程序處于鍵控循環(huán)工作方式,當(dāng)按下測(cè)量鍵時(shí),主程序開始調(diào)用發(fā)射子程序、查詢接收子程序、定時(shí)子程序,并把測(cè)量結(jié)果用顯示子程序在液晶屏上顯示出來(lái)。
必須指出的是,由于液晶要使用同一P3口,所以必須全部使用位操作,否則將導(dǎo)致LCD不能正常顯示。另外,在系統(tǒng)還可以加入溫度傳感器來(lái)監(jiān)測(cè)環(huán)境溫度,把表1所列的數(shù)據(jù)做到程序中可進(jìn)行溫度被償。為了增強(qiáng)系統(tǒng)的可靠性,應(yīng)在軟硬件上采用一些特殊措施。限于篇幅,下面僅給出部分程序,感興趣者可與作者。
#pragmaDBOECDOT(5,SPEED)ROM(LARGE)IV
/*連接所需要的庫(kù)*/
#Include<reg52.h>
#Include<absacc.h>
#Include<stdio.h>
/*定義數(shù)據(jù)類型*/
typedefunsingnedcharbyte;
typedefunsignedintword
#defineucharunsignedchar
#defineunintunsignedint
#defineulongunsignedlong
/*定義系統(tǒng)常數(shù)*/
#defineTRUE1
#defineFALSE0
#defineC=340/*聲速*/
/*定義功能位*/
sbitbflag=ACC7;
sbitVOLCK=P1^5;
sbitMING=P3^5;
sbitQUIET=P1^3;
sbitBACK=P1^2;
/*定義顯示緩沖區(qū)*/
ucharidataON[16]={’,’L’,’E’,’N’,’G’,’T’,’H’,’=’,’8’,’.’,’8’8’,’m’,’’,’’,’’};
/*主程序用延時(shí)子程序*/
woidmain-delay(void)
{
registeri;
TRO=1;
for(i=0;i<15;i++)
{
TH0=0;
TL0=0;
Do{}while(!TF0);
TF0=0;
}
TR0=0;
}
*/通用延時(shí)子程序*/
voiddelay(void)
{
uninti;
for(i=0;i<200;i++){;}
}
/*鍵盤延時(shí)子程序*/
voidkey-delay(void)
{
uninti;
for(i=0;i<200;i++){;}
}
/*初始化程序*/
voidstart_main()
{
tegisteri;
uchara[16]={’’,’L’,’E’,’N’,’G’,’T’,’H’,’=,’8’,’.’,’8’,’8’,’m’,’’,’’,’’};
for(i=0;<16;i++)
{ON[i]=a[i];}
nitlcd();/*初始化液晶*/
display(ON);/*更新顯示*/
}
/*主程序*/
voidmain()
{
registers,keycode;
longidatat;
start-main();/*初始化*/
main-delay();/*延時(shí)*/;
if(keycoed==true)
{
keycode=key-scan-wait();
/*判斷是否有測(cè)量鍵按下*/
t=measure();*/測(cè)量*/
S=0.5*t*C;*/換算*/
Decode-bcd(s.0x09);
/*把測(cè)量結(jié)果置換入顯示緩沖區(qū)*/
init-lcd();/*初始化液晶*/
display(ON);/*更新顯示*/
}
}
5、結(jié)束語(yǔ)
雖然用一個(gè)單獨(dú)計(jì)時(shí)器電路也可以測(cè)量超聲波的傳輸時(shí)間,但利用AT89C2051單片機(jī)可以簡(jiǎn)化設(shè)計(jì),便于操作和直觀讀數(shù)。該系統(tǒng)經(jīng)實(shí)際測(cè)試證明,可以滿足大多數(shù)場(chǎng)合的測(cè)距要求。