1. 51單片機控制的超聲波測距儀程序
希望對你有幫助
//超聲波模塊顯示程序
#include <reg52.h> //包括一個52標准內核的頭文件
#define uchar unsigned char //定義一下方便使用
#define uint unsigned int
#define ulong unsigned long
sbit Tx = P3^3; //產生脈沖引腳
sbit Rx = P3^2; //回波引腳
uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//數碼管0-9
uint distance[4]; //測距接收緩沖區
uchar ge,shi,,temp,flag,outcomeH,outcomeL,i; //自定義寄存器
bit succeed_flag; //測量成功標志
//********函數聲明
void conversion(uint temp_data);
void delay_20us();
void pai_xu();
void main(void) // 主程序
{ uint distance_data,a,b;
uchar CONT_1;
i=0;
flag=0;
Tx=0; //首先拉低脈沖輸入引腳
TMOD=0x11; //定時器0,定時器1,16位工作方式
TR0=1; //啟動定時器0
IT0=0; //由高電平變低電平,觸發外部中斷
ET0=1; //打開定時器0中斷
EX0=0; //關閉外部中斷
EA=1; //打開總中斷0
while(1) //程序循環
{
EA=0;
Tx=1;
delay_20us();
Tx=0; //產生一個20us的脈沖,在Tx引腳
while(Rx==0); //等待Rx回波引腳變高電平
succeed_flag=0; //清測量成功標志
EX0=1; //打開外部中斷
TH1=0; //定時器1清零
TL1=0; //定時器1清零
TF1=0; //
TR1=1; //啟動定時器1
EA=1;
while(TH1 < 30);//等待測量的結果,周期65.535毫秒(可用中斷實現)
TR1=0; //關閉定時器1
EX0=0; //關閉外部中斷
if(succeed_flag==1)
{
distance_data=outcomeH; //測量結果的高8位
distance_data<<=8; //放入16位的高8位
distance_data=distance_data|outcomeL;//與低8位合並成為16位結果數據
distance_data*=12; //因為定時器默認為12分頻
distance_data/=58; //微秒的單位除以58等於厘米
} //為什麼除以58等於厘米, Y米=(X秒*344)/2
// X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
if(succeed_flag==0)
{
distance_data=0; //沒有回波則清零
}
distance[i]=distance_data; //將測量結果的數據放入緩沖區
i++;
if(i==3)
{
distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4;
pai_xu();
distance_data=distance[1];
a=distance_data;
if(b==a) CONT_1=0;
if(b!=a) CONT_1++;
if(CONT_1>=3)
{ CONT_1=0;
b=a;
conversion(b);
}
i=0;
}
}
}
//***************************************************************
//外部中斷0,用做判斷回波電平
INTO_() interrupt 0 // 外部中斷是0號
{
outcomeH =TH1; //取出定時器的值
outcomeL =TL1; //取出定時器的值
succeed_flag=1; //至成功測量的標志
EX0=0; //關閉外部中斷
}
//****************************************************************
//定時器0中斷,用做顯示
timer0() interrupt 1 // 定時器0中斷是1號
{
TH0=0xfd; //寫入定時器0初始值
TL0=0x77;
switch(flag)
{case 0x00:P0=ge; P2=0x7f;flag++;break;
case 0x01:P0=shi;P2=0xbf;flag++;break;
case 0x02:P0=;P2=0xdf;flag=0;break;
}
}
//顯示數據轉換程序
void conversion(uint temp_data)
{
uchar ge_data,shi_data,_data ;
_data=temp_data/100 ;
temp_data=temp_data%100; //取余運算
shi_data=temp_data/10 ;
temp_data=temp_data%10; //取余運算
ge_data=temp_data;
_data=SEG7[_data];
shi_data=SEG7[shi_data]&0x7f;
ge_data =SEG7[ge_data];
EA=0;
= _data;
shi = shi_data;
ge = ge_data ;
EA=1;
}
//******************************************************************
void delay_20us()
{ uchar bt ;
for(bt=0;bt<60;bt++);
}
void pai_xu()
{ uint t;
if (distance[0]>distance[1])
{t=distance[0];distance[0]=distance[1];distance[1]=t;}
if(distance[0]>distance[2])
{t=distance[2];distance[2]=distance[0];distance[0]=t;}
if(distance[1]>distance[2])
{t=distance[1];distance[1]=distance[2];distance[2]=t;}
}
2. 51單片機外部中斷控制多路超聲波
做過八路的超聲波測距,但是時隔比較長,不然干擾比較大,無法准確測量
3. 超聲波發射電路原理以及組成部分,謝謝!
摘要超聲波測距器,可以應用於汽車倒車、建築施工工地以及一些工業現場的位置監控,也可用於如液位、井深、管道長度的測量等場合。要求測量范圍在0.10-5.00m,測量精度1cm,測量時與被測物體無直接接觸,能夠清晰穩定地顯示測量結果。由於超聲波指向性強,能量消耗緩慢,在介質中傳播的距離較遠,因而超聲波經常用於距離的測量,如測距儀和物位測量儀等都可以通過超聲波來實現。利用超聲波檢測往往比較迅速、方便、計算簡單、易於做到實時控制,並且在測量精度方面能達到工業實用的要求,因此在移動機器人的研製上也得到了廣泛的應用。 關鍵詞 單片機AT82S51超聲波感測器測量距離 一、設計要求 設計一個超聲波測距器,可以應用於汽車倒車、建築施工工地以及一些工業現場的位置監控,也可用於如液位、井深、管道長度的測量等場合。要求測量范圍在0.10-3.00m,測量精度1cm,測量時與被測物體無直接接觸,能夠清晰穩定地顯示測量結果。 二、設計思路 超聲波感測器及其測距原理 超聲波是指頻率高於20KHz的機械波。為了以超聲波作為檢測手段,必須產生超生波和接收超聲波。完成這種功能的裝置就是超聲波感測器,習慣上稱為超聲波換能器或超聲波探頭。超聲波感測器有發送器和接收器,但一個超聲波感測器也可具有發送和接收聲波的雙重作用。超聲波感測器是利用壓電效應的原理將電能和超聲波相互轉化,即在發射超聲波的時候,將電能轉換,發射超聲波;而在收到回波的時候,則將超聲振動轉換成電信號。 超聲波測距的原理一般採用渡越時間法TOF(timeofflight)。首先測出超聲波從發射到遇到障礙物返回所經歷的時間,再乘以超聲波的速度就得到二倍的聲源與障礙物之間的距離 測量距離的方法有很多種,短距離的可以用尺,遠距離的有激光測距等,超聲波測距適用於高精度的中長距離測量。因為超聲波在標准空氣中的傳播速度為331.45米/秒,由單片機負責計時,單片機使用12.0M晶振,所以此系統的測量精度理論上可以達到毫米級。 由於超聲波指向性強,能量消耗緩慢,在介質中傳播距離遠,因而超聲波可以用於距離的測量。利用超聲波檢測距離,設計比較方便,計算處理也較簡單,並且在測量精度方面也能達到要求。 超聲波發生器可以分為兩類:一類是用電氣方式產生超聲波,一類是用機械方式產生超聲波。本課題屬於近距離測量,可以採用常用的壓電式超聲波換能器來實現。 根據設計要求並綜合各方面因素,可以採用AT89S51單片機作為主控制器,用動態掃描法實現LED數字顯示,超聲波驅動信號用單片機的定時器完成,超聲波測距器的系統框圖如下圖所示: 超聲波測距器系統設計框圖 三、系統組成 硬體部分 主要由單片機系統及顯示電路、超聲波發射電路和超聲波檢測接收電路三部分組成。採用AT89S51來實現對CX20106A紅外接收晶元和TCT40-10系列超聲波轉換模塊的控制。單片機通過P1.0引腳經反相器來控制超聲波的發送,然後單片機不停的檢測INT0引腳,當INT0引腳的電平由高電平變為低電平時就認為超聲波已經返回。計數器所計的數據就是超聲波所經歷的時間,通過換算就可以得到感測器與障礙物之間的距離。 軟體部分 主要由主程序、超聲波發生子程序、超聲波接收中斷程序及顯示子程序等部分。 四、系統硬體電路設計 1.單片機系統及顯示電路 單片機採用89S51或其兼容系列。採用12MHz高精度的晶振,以獲得較穩定的時鍾頻率,減小測量誤差。單片機用P1.0埠輸出超聲波轉化器所需的40KHz方波信號,利用外中斷0口檢測超聲波接受電路輸出的返回信號。顯示電路採用簡單實用的4位共陽LED數碼管,段碼用74LS244驅動,位碼用PNP三極體驅動。單片機系統及顯示電路如下圖所示 單片機及顯示電路原理圖 2.超聲波發射電路原理圖參考期刊如圖所示: 超聲波發射電路原理圖 壓電超聲波轉換器的功能:利用壓電晶體諧振工作。內部結構上圖所示,它有兩個壓電晶片和一個共振板。當它的兩極外加脈沖信號,其頻率等於壓電晶片的固有振盪頻率時,壓電晶片將會發生共振,並帶動共振板振動產生超聲波,這時它就是一超聲波發生器;如沒加電壓,當共振板接受到超聲波時,將壓迫壓電振盪器作振動,將機械能轉換為電信號,這時它就成為超聲波接受轉換器。超聲波發射轉換器與接受轉換器其結構稍有不同。 3.超聲波檢測接受電路 參考紅外轉化接收期刊的電路採用集成電路CX20106A,這是一款紅外線檢波接收的專用晶元,常用於電視機紅外遙控接收器。考慮到紅外遙控常用的載波頻率38KHz與測距超聲波頻率40KHz較為接近,可以利用它作為超聲波檢測電路。實驗證明其具有很高的靈敏度和較強的抗干擾能力。適當改變C4的大小,可改變接受電路的靈敏度和抗干擾能力。 超聲波接收電路圖 五、系統程序設計 超聲波測距軟體設計主要由主程序,超聲波發射子程序,超聲波接受中斷程序及顯示子程序組成。下面對超聲波測距器的演算法,主程序,超聲波發射子程序和超聲波接受中斷程序逐一介紹。 1.超聲波測距器的演算法設計 下圖示意了超聲波測距的原理,即超聲波發生器T在某一時刻發出的一個超聲波信號,當超聲波遇到被測物體後反射回來,就被超聲波接收器R所接受。這樣只要計算出發生信號到接受返回信號所用的時間,就可算出超聲波發生器與反射物體的距離。 距離計算公式:d=s/2=(c*t)/2 *d為被測物與測距器的距離,s為聲波的來迴路程,c為聲速,t為聲波來回所用的時間 聲速c與溫度有關,如溫度變化不大,則可認為聲速是基本不變的。如果測距精度要求很高,則應通過溫度補償的方法加以校正。聲速確定後,只要測得超聲波往返時間,即可求得距離。在系統加入溫度感測器來監測環境溫度,可進行溫度被償。這里可以用DS18B20測量環境溫度,根據不同的環境溫度確定一聲速提高測距的穩定性。為了增強系統的可靠性,應在軟硬體上採用抗干擾措施。 不同溫度下的超聲波聲速表 溫度/ -30 -20 -10 0 10 20 30 100 聲速c(m/s) 313 319 325 323 338 344 349 386 2.主程序 主程序首先對系統環境初始化,設置定時器T0工作模式為16位的定時計數器模式,置位總中斷允許位EA並給顯示埠P0和P2清0。然後調用超聲波發生子程序送出一個超聲波脈沖,為避免超聲波從發射器直接傳送到接收器引起的直接波觸發,需延遲0.1ms(這也就是測距器會有一個最小可測距離的原因)後,才打開外中斷0接收返回的超聲波信號。由於採用12MHz的晶振,機器周期為1us,當主程序檢測到接收成功的標志位後,將計數器T0中的數(即超聲波來回所用的時間)按下式計算即可測得被測物體與測距儀之間的距離,設計時取20℃時的聲速為344m/s則有: d=(C*T0)/2=172T0/10000cm(其中T0為計數器T0的計數值) 測出距離後結果將以十進制BCD碼方式LED,然後再發超聲波脈沖重復測量過程。主程序框圖如下 3.超聲波發生子程序和超聲波接收中斷程序 超聲波發生子程序的作用是通過P1.0埠發送2個左右的超聲波信號頻率約40KHz的方波,脈沖寬度為12us左右,同時把計數器T0打開進行計時。超聲波測距器主程序利用外中斷0檢測返回超聲波信號,一旦接收到返回超聲波信號(INT0引腳出現低電平),立即進入中斷程序。進入該中斷後就立即關閉計時器T0停止計時,並將測距成功標志字賦值1。如果當計時器溢出時還未檢測到超聲波返回信號,則定時器T0溢出中斷將外中斷0關閉,並將測距成功標志字賦值2以表示此次測距不成功。 六.軟硬體調試及性能 超聲波測距儀的製作和調試,其中超聲波發射和接收採用Φ15的超聲波換能器TCT40-10F1(T發射)和TCT40-10S1(R接收),中心頻率為40kHz,安裝時應保持兩換能器中心軸線平行並相距4~8cm,其餘元件無特殊要求。若能將超聲波接收電路用金屬殼屏蔽起來,則可提高抗干擾能力。根據測量范圍要求不同,可適當調整與接收換能器並接的濾波電容C4的大小,以獲得合適的接收靈敏度和抗干擾能力。 硬體電路製作完成並調試好後,便可將程序編譯好下載到單片機試運行。根據實際情況可以修改超聲波發生子程序每次發送的脈沖寬度和兩次測量的間隔時間,以適應不同距離的測量需要。根據所設計的電路參數和程序,測距儀能測的范圍為0.07~5.5m,測距儀最大誤差不超過1cm。系統調試完後應對測量誤差和重復一致性進行多次實驗分析,不斷優化系統使其達到實際使用的測量要求。 後續工作需實驗後才能驗證 根據參考電路和集成的電路器件測距范圍有限10m以內為好。 http://www.chuandong.com/cdbbs/2008-12/17/081217A9D4D0217.html希望對你有幫助!
4. 用單片機製作超聲波測距的問題
沒有打開EA總中斷!
而且在HHH子程序結束後,沒有跳轉指令或等待指令,讓程序無處運行。
感覺編的思路好像有點太費力了。
我的建議:
開機後把定時器設到定時時間長一些,先不開。
假如說,我們把定時器時間定為125ms,然後在定時器中斷的程序中,先進行TH的恢復,再在裡面設置某寄存器加1程序,後面會用到。
發送超聲波後,緊跟著起動定時器,
起動完後,一直反復檢查P1.6口是否收到,當收到後,關閉定時器,讀出定時器的TH值以及中斷裡面寄存器的值,根據這兩個值,不就可以算出比較准確的時間了嗎?
而且這是一次性的,不需要在每個距離上試驗。
5. 求C51單片機程序,關於超聲波測距儀
看下這個
原文http://www.elecfans.com/article/87/82/2009/20091219139294.html
基於單片機的倒車防撞預警系統設計和實現
0 引 言
汽車倒車防撞預警系統即是俗稱的倒車雷達,是汽車泊車輔助裝置。在汽車倒車時,倒車雷達採用超聲波測距原理探測汽車尾部離障礙物的距離,當汽車尾部離障礙物的距離達到探測范圍時,倒車雷達通過數碼管實時動態顯示距離。當汽車尾部離障礙物的距離達到設定的安全警告值時,倒車雷達發出報警聲,以警示駕駛員,輔助駕駛員安全倒車。現在生產的中高檔小轎車大多數都配置有倒車雷達,而出於節省成本等方面的考慮,經濟型小轎車、大客車等其他車輛都沒有配置倒車雷達。有市場需求的產品,必然會帶動產品的開發設計。倒車雷達電路種類較多,本文介紹基於單片機控制的倒車雷達系統,該系統採用通用型單片機作為控制電路,方便系統功能擴展。系統電路主要採用集成器件構成,外圍元件少,電路簡潔、調試方便、成本低,利於商品化生產。
1 系統組成及工作原理
倒車防撞預警系統由四路收發一體封閉(防水)型超聲波感測器及其超聲波發射與回波接收電路、超聲波電信號放大電路、單片機控制電路、LED數碼管顯示電路和蜂鳴器聲音報警電路組成。系統組成框圖如圖1所示。
當汽車倒車時由倒車換擋裝置自動接通系統電源,系統上電復位,進入工作狀態。單片機編程產生一串40 kHz的矩形脈沖電壓,經四選一模擬開關加到超聲波發射與回波接收電路,經放大驅動超聲波感測器發射出超聲波,同時單片機開始計時。發射出的超聲波碰到障礙物後形成反射波,部分反射波返回作用於超聲波感測器,經超聲波感測器的聲/電轉換,變成微弱的電信號,該微弱的電信號經放大、整形產生負跳變電壓,向單片機發出中斷申請。單片機收到中斷申請的信號後,立即響應中斷,執行外部中斷服務程序,停止計時,得到超聲波發送和返回的時間T,計算出發射點離障礙物的距離S,即:S=(C·T)/2。C是超聲波在空氣中的傳播速度,在常溫25℃時,C約為346 m/s。若發射出的超聲波在測距范圍內未遇到障礙物,直到單片機定時中斷產生,執行定時中斷服務程序,選擇下一路,依次按後左路、後左中路、後右中路、後右路的順序繼續發射和接收超聲波,並經過計算處理。四路探測處理完畢,選擇四路中測出的最小距離值通過LED數碼管顯示出來。當最小距離值小於預先設定的報警距離時,單片機接通蜂鳴器的電源,蜂鳴器發出報警聲。若四路探測無回波中斷申請,則顯示「-.--」,表明在安全距離內沒有障礙物,再繼續下一輪的循環探測處理。
2 系統硬體電路的設計
2.1 超聲波發射與回波接收電路
超聲波發射與回波接收電路的主要作用是提高驅動超聲波感測器的脈沖電壓幅值,有效地進行電/聲轉換,增大超聲波的發射距離,並通過收發一體的超聲波感測器將返回的超聲波轉變成微弱的電信號。超聲波發射與回波接收電路如圖2所示(畫出一路,其他三路與該路一樣)。
EFR40RS是收發一體封閉(防水)型超聲波感測器,其中心頻率f0=(40.0±1.0)kHz,-3 dB帶寬1 kHz。驅動電壓峰一峰值要求60~150 V。CD4052是雙路四選一模擬開關,單片機的P3.4和P3.5埠輸出選通信號,單片機的P3.3埠輸出一串40 kHz的脈沖電壓,通過CD4052的X路加到選通的開關三極體Q1基極,經脈沖變壓器T1升壓至100 VP-P左右,驅動超聲波感測器EFR40RS發射超聲波。發射時的脈沖電壓幅值大小直接影響測距的遠近,應採用超聲波專用的脈沖變壓器。反射回的超聲波經原收發一體封閉型超聲波感測器變成毫伏級的一串脈沖電信號。由於回波電信號的幅值小,VD3和VD4二極體截止,該信號不會通過T1變壓器副邊線圈形成短路。VD1和VD2二極體也截止,所以回波電信號經R1和C1,通過CD4052的Y路送到超聲波電信號放大與整形電路。R1和VD1,VD2組成雙向限幅電路,避免發射時的大信號造成超聲波放大與整形電路阻塞,甚至損壞電路。
2.2 超聲波電信號放大電路
超聲波電信號放大電路採用集成電路CX20106A構成。CX20106A是日本索尼公司生產的紅外遙控信號接收集成電路。通過外部所接電阻,將其內部帶通濾波電路的中心頻率f0設置為40 kHz,就可以接收放大超聲波電信號,並整形輸出負脈沖電壓。
應用電路如圖3所示。1腳是超聲波電信號輸入端,2腳與地之間連接RC串聯網路,是內部前置放大電路負反饋網路的組成部分。電阻R5的數值確定前置放大電路的增益。R5電阻值減小,負反饋減弱,放大倍數增大;反之,則放大倍數減小。3腳與地之間連接檢波電容C3,適當改變電容C3的大小,可以改變超聲波電信號放大和整形電路的靈敏度和抗干擾能力。C3電容量大,靈敏度低,抗干擾能力強;C3容量小,靈敏度高,抗干擾能力弱,易造成誤動作。5腳與電源間接入一個電阻,用以設置內部帶通濾波電路的中心頻率f0。
當R6=200 kΩ時,f0=40 kHz。6腳與地之間接一個積分電容,標准值為330 pF。如果該電容值取得太大,會使探測距離變短。7腳是電路集電極開路輸出端,R7是該引腳的上拉電阻。集成電路CX20106A無信號輸入時,7腳輸出高電平,當輸入的超聲波電信號經放大、整形後,7腳輸出一個負脈沖電壓。
2.3 單片機控制電路和顯示、報警電路
電路如圖4所示。由於系統用到單片機的輸入/輸出埠不多,在不考慮功能擴展時,從功能夠用和低成本的角度考慮,採用AT89C2051單片機作為控制電路的核心器件。AT89C2051單片機共有20個引腳,其中有15個I/O埠(P3.6無引出腳)。兩個16位定時器/計數器,其體積小、價格低。採用12 MHz高精度的晶振,以獲得較穩定的時鍾頻率,減小測量誤差。單片機的P3.3埠周期性的輸出一串40 kHz的矩形脈沖,通過雙路四選一模擬開關CD4052周期性地加到四路超聲波發射與回波接收電路。單片機的P3.4和P3.5埠輸出雙路四選一模擬開關CD4052的選通信號。單片機的P3.2埠為外部中斷0中斷申請信號輸入端。三位LED數碼管採用動態掃描顯示。U4的小數點常亮,U4的單位為m,U5的單位為dm,U6的單位為cm。採用有源蜂鳴器作為報警發音器件,一是器件成本低,二是便於動態掃描顯示的軟體編程。
3 系統軟體的設計
系統軟體採用模塊化設計,方便擴展移植。採用匯編語言編程。主要有主程序、T0中斷服務程序、外部中斷0服務程序、超聲波發生子程序。
3.1 主程序
本系統有四路測距通道,採用分時工作,按後左一後左中一後右中一後右順序循環測距。每一路發射超聲波後的等待外部中斷時間應大於超聲波在最大有效探測距離內往返時間。所以按最大有效探測距離可以估算出最短的循環間隔時間。因為超聲波在空氣中傳播能量會不斷衰減,所以超聲波測距存在最大有效探測距離。這最大有效探測距離與多種因數有關:
與超聲波感測器性能的好壞、與驅動超聲波感測器的脈沖電壓幅值(功率)的大小、障礙物大小和形狀、障礙物吸波特性以及反射波與入射波之間的夾角、與超聲波放大和整形電路的靈敏度等有關。設定最大有效探測距離為8 m(收發一體封閉型超聲波感測器比較難達到,實際上也沒有必要探測很遠的障礙物,只是設計留有裕量。由於顯示位數有限,也必須對最大探測距離做限制),則循環工作的間隔時間Tm=2S/C=2×8/346A46 ms,加上避免接收超聲波感測器余振的延時和程序執行時間,留足裕量,設定Tm△56 ms。
主程序流程圖如圖5所示。首先是對系統初始化。埠p1.0、P3.3置0;設置堆棧,中斷允許總控制位EA允許中斷(EA=1);允許外部中斷0中斷(EX0=1),採用邊沿觸發方式(IT0=1);設置定時器T0允許中斷(ET0=1),以16位工作方式定時約56 ms;設置定時器T1以16位工作方式定時/計數,計數初值0000H,然後啟動T0定時。設置顯示數據初值為三位BCD碼999(cm),對應字形段碼顯示「---」。四路探測處理完畢後,將四組數據中的最小值送入顯示緩沖區,通過LED數碼管顯示。同時該值與設定的100 cm值比較,若四組數據中的最小值小於100 cm,P3.7埠置0,Q2三極體導通,有源蜂鳴器得電發出報警聲。
由於單片機採用12 MHz的晶振,1個機器周期為1μs,所以計數器每計一個數就是1μs,定時器T1工作模式設置為16位定時/計數器模式,則其最大定時65.536 ms。由於定時器T0每56 ms產生中斷,執行T0中斷服務程序時停止T1計時,所以T1計時不會產生溢出中斷。一輪四路探測處理完畢所用時間大約是56 ms×4=224 ms,用時很短,而倒車速度又比較慢,所以可以做到實時動態顯示。
3.2 T0中斷服務程序
T0中斷服務程序流程圖如圖6所示。每隔56 ms分別按後左→後左中→後右中→後右順序選通下一路超聲波發射與回波接收電路,調用超聲波發生子程序,送出16個40 kHz的超聲波脈沖電壓,定時器T1開始計時,定時器T0開始定時56 ms,使每路工作56 ms。
為了避免接收到超聲波感測器余振的直射波產生的中斷申請,延時2.8 ms後,才允許外部中斷0中斷,等待接收返回的超聲波信號。所以,最小探測距離(盲區)Smin=Ct/2=346×0.002 8/2△0.48 m。四路探測處理完畢,將四路中最小值送入顯示緩沖區。若在四路探測中有些路在有效探測范圍內發射的超聲波未遇障礙物,無返回波,外部中斷0不產生中斷申請信號,或者是進入探測盲區,外部中斷0產生的中斷申請不被受理,則定時器T1計時到定時器T0產生中斷,在T0中斷服務程序中,用三位BCD碼999(三位十進制數最大值999 cm)置夠四組數據。若顯示緩沖區的四組數據都是999時,則對應字形段碼顯示「---」。倒車伊始,LED數碼顯示器就顯示「-.--」,表明在安全距離內沒有障礙物;若發出報警聲後,又顯示「-.--」,表明進入了探測盲區。
3.3 外部中斷0服務程序
外部中斷O服務程序流程圖如圖7所示。單片機一旦接收到返回超聲波信號(即INT0引腳由高電平跳變為低電平),立即進入外部中斷0服務程序。首先停止定時器T1計時,禁止外部中斷0中斷。然後將定時器T1中的數N,也即將超聲波往返所用的時間N(單位:μs),按式S=CT/2=(346 x N×10-6)/2=173×N÷10 000計算,即得被測物的距離(單位:cm),將計算結果以百位、十位、個位BCD碼方式送入比較大小的緩沖區,以備比較大小使用。然後等待定時器T0定時56 ms中斷的產生,繼續下一路的探測處理。
3.4 超聲波發生子程序
超聲波發生子程序通過P3.3埠發送16個周期是25μs(即頻率40 kHz,1個周期內高電平持續13μs、低電平持續12 μs)的矩形脈沖電壓。脈沖串個數在10~20個比較合適。脈沖個數太少,發射強度小,探測距離短;脈沖個數太多,發射持續時間長,在離障礙物距離近時,脈沖串尚未發射完畢,先發射出去的脈沖產生的回波就到達接收端,影響測距結果,造成測距盲區增大。
4 實現應用分析
本系統在實驗室條件下進行了可行性的研究設計,要實際應用中就必須考慮測量精度和工作穩定性的問題。因此,本系統可採取幾項措施來提高測量精度和工作穩定性。
(1)超聲波的傳播速度與溫度有關。為了適應不同環境溫度下的測距需要,提高測量精度,硬體電路上可增加檢測車外環境溫度的環節。單片機根據實測的溫度值,再計算確定超聲波的傳播速度,即C=331.4+0.6lt。t是環境溫度。或者在不增加硬體成本情況下,可考慮通過實驗數據分析,找到測量值與實際值偏差特點和規律,通過軟體編程對測量數據進行校正處理。
(2)軟體設計中採用數字濾波中的算術平均濾波程序對每個測距點進行連續多次測量,取平均值作為該測距點的測量數據,以提高數據采樣的可靠性。要盡量減小探測盲區,所設定的延時時間可根據實際所用超聲波感測器余振時間而定,可在實際調試中確定最小延時時間。
(3)倒車雷達安裝在車上,倒車雷達的工作環境非常惡劣,汽車倒車工作時,高壓點火產生很強的電磁輻射,會影響電路正常工作。所以在硬體及軟體方面要考慮採取抗干擾措施,提高系統工作的可靠性。如用金屬殼屏蔽電路,採用屏蔽線連接超聲波感測器;在滿足測量距離的情況下,可適當調大超聲波電信號放大和整形電路中檢波電容C3的容量。硬體上可增加「看門狗」電路,軟體設計添加指令冗餘、軟體陷阱、或設置軟體「看門狗」,防止程序「跑飛」或者進入死循環。對於駕駛員來說,倒車時主要關心的是車後方有無障礙物、以及障礙物離車大約有多遠等問題。由於車子制動時存在慣性,倒車遇到障礙物時,駕駛員總要提前制動。考慮性價比,倒車雷達測量精度不必很高。但從倒車安全考慮,此時的測量顯示值寧大勿小。
5 結 語
本系統充分利用了單片機的內部資源,用軟體編程產生超聲波矩形脈沖,代替硬體的超聲波發生電路,節省了硬體成本。採用一塊集成器件實現超聲波接收放大和整形,避免了採用多級集成運放組成高增益放大電路易產生自激等問題。實驗表明設計可行。在不增加硬體成本時,通過完善軟體設計,可提高系統測量精度和工作的可靠性,能夠滿足使用要求。在考慮功能擴展時,可以採用帶「看門狗」的AT89S52單片機,以增加擴展埠。在超聲波測距的基礎上,如可增加防盜報警功能、車載蓄電池電壓檢測功能等,若增加微型攝像頭和小型液晶顯示器,便成為可直接觀察車後方的可視倒車雷達。本系統實用性強,性價比高。
6. 單片機超聲波測距系統原理
超聲波測距學習板,可應用於汽車倒車、建築施工工地以及一些工業現場的位置監控,也可用於如液位、井深、管道長度的測量等場合。要求測量范圍在0.27~4.00m,測量精度1cm,測量時與被測物體無直接接觸,能夠清晰穩定地顯示測量結果。超聲波測距原理
超聲波發生器內部結構有兩個壓電晶片和一個共振板。當它的兩極外加脈沖信號,其頻率等於壓電晶片的固有振盪頻時,壓電晶片將會發生共振,並帶動共振板振動,便產生超聲波。反之,如果兩電極間未外加電壓,當共振板接收到超聲波本時,將壓迫壓電晶片作振動,將機械能轉換為電信號,就成為超聲波接收器。在超聲探測電路中,發射端得到輸出脈沖為一系列方波,其寬度為發射超聲的時間間隔,被測物距離越大,脈沖寬度越大,輸出脈沖個數與被測距離成正比。超聲測距大致有以下方法:① 取輸出脈沖的平均值電壓,該電壓 (其幅值基本固定 )與距離成正比,測量電壓即可測得距離;② 測量輸出脈沖的寬度,即發射超聲波與接收超聲波的時間間隔 t,故被測距離為 S=1/2vt。本測量電路採用第二種方案。由於超 聲波 的聲速 與溫度有關,如果溫度變化不大,則可認為聲速基本不變 。如果測距精度要求很高,則應通 過溫度補償 的方法加以校正。超聲波測距適用於高精度的中長距離測量。因為超聲波在標准空氣中的傳播速度為331.45米/秒,由單片機負責計時,單片機使用12.0M晶振,所以此系統的測量精度理論上可以達到毫米級。
採用AT89C51或AT89S51單片機,晶振:12M,單片機用P1.0口輸出超聲波換能器所需的40K方波信號,利用外中斷0口監測超聲波接收電路輸出的返回信號,顯示電路採用簡單的4位共陽LED數碼管,斷碼用74LS244,位碼用8550驅動.
超聲波測距的演算法設計: 超聲波在空氣中傳播速度為每秒鍾340米(15℃時)。X2是聲波返回的時刻,X1是聲波發聲的時刻,X2-X1得出的是一個時間差的絕對值,假定X2-X1=0.03S,則有340m×0.03S=10.2m。由於在這10.2m的時間里,超聲波發出到遇到返射物返回的距離。
硬體部分採用AT89C51或AT89S51單片機,晶振:12M,單片機用P1.0口輸出超聲波換能器所需的40K方波信號,利用外中斷0口監測超聲波接收電路輸出的返回信號,顯示電路採用簡單的4位共陽LED數碼管,斷碼用74LS244,位碼用8550驅動. 主要由單片機系統及顯示電路、超聲波發射電路和超聲波檢測接收電路三部分組成。採用AT89S51來實現對CX20106A紅外接收晶元和TCT40-10系列超聲波轉換模塊的控制。單片機通過P1.0引腳經反相器來控制超聲波的發送,然後單片機不停的檢測INT0引腳,當INT0引腳的電平由高電平變為低電平時就認為超聲波已經返回。計數器所計的數據就是超聲波所經歷的時間,通過換算就可以得到感測器與障礙物之間的距離。
1.單片機系統及顯示電路
單片機採用89S51或其兼容系列。採用12MHz高精度的晶振,以獲得較穩定的時鍾頻率,減小測量誤差。
單片機用P1.0埠輸出超聲波轉化器所需的40KHz方波信號,利用外中斷0口檢測超聲波接受電路輸出的返回信號。顯示電路採用簡單實用的4位共陽LED數碼管,段碼用74LS244驅動,位碼用PNP三極體驅動。單片機系統及顯示電路如下圖所示.
使用CX20106A集成電路對接收探頭受到的信號進行放大、濾波。其總放大增益80db。以下是CX20106A的引腳注釋。
1腳:超聲信號輸入端,該腳的輸入阻抗約為40kΩ。
2腳:該腳與地之間連接RC串聯網路,它們是負反饋串聯網路的一個組成部分,改變它們的數值能改變前置放大器的增益和頻率特性。增大電阻R1或減小C1,將使負反饋量增大,放大倍數下降,反之則放大倍數增大。但C1的改變會影響到頻率特性,一般在實際使用中不必改動,推薦選用參數為R1=4.7Ω,C1=1μF。
3腳:該腳與地之間連接檢波電容,電容量大為平均值檢波,瞬間相應靈敏度低;若容量小,則為峰值檢波,瞬間相應靈敏度高,但檢波輸出的脈沖寬度變動大,易造成誤動作,推薦參數為3.3μf。
4腳:接地端。
5腳:該腳與電源間接入一個電阻,用以設置帶通濾波器的中心頻率f0,阻值越大,中心頻率越低。例如,取R=200kΩ時,f0≈42kHz,若取R=220kΩ,則中心頻率f0≈38kHz。
6腳: 該腳與地之間接一個積分電容,標准值為330pF,如果該電容取得太大,會使探測距離變短。
7腳:遙控命令輸出端,它是集電極開路輸出方式,因此該引腳必須接上一個上拉電阻到電源端,推薦阻值為22kΩ,沒有接受信號是該端輸出為高電平,有信號時則產生下降。 8腳:電源正極,4.5~5V。
軟硬體調試及性能
超聲波測距儀的製作和調試,其中超聲波發射和接收採用Φ16的超聲波換能器TCT40-16F1(T發射)和TCT40-16S1(R接收),中心頻率為40kHz,安裝時應保持兩換能器中心軸線平行並相距4~8cm,其餘元件無特殊要求。若能將超聲波接收電路用金屬殼屏蔽起來,則可提高抗干擾能力。根據測量范圍要求不同,可適當調整與接收換能器並接的濾波電容C4的大小,以獲得合適的接收靈敏度和抗干擾能力。
硬體電路製作完成並調試好後,便可將程序編譯好下載到單片機試運行。根據實際情況可以修改超聲波發生子程序每次發送的脈沖寬度和兩次測量的間隔時間,以適應不同距離的測量需要。根據所設計的電路參數和程序,測距儀能測的范圍為0.07~5.5m,測距儀最大誤差不超過1cm。系統調試完後應對測量誤差和重復一致性進行多次實驗分析,不斷優化系統使其達到實際使用的測量要求。後續工作需實驗後才能驗證 根據參考電路和集成的電路器件測距范圍有限10m以內為好。
7. 51單片機超聲波測距的問題
關鍵這個電路是硬體設計好就可以。做一個40khz的發射電路。。。用2051的一個io控制電源。。。動態掃描led顯示
另外再做一個40khz的接收電路。。。二者頻率對准。。。接收電路接收到發射信號的時候輸出一個電壓觸發中斷,先接通40khz發射電路的工作電壓。。。單片機開始計時。。。等侍接收電路觸發中斷。當有中斷。停止計時。。。
這個時間除以2再乘以超聲波在空氣中傳播速度。應該就是等於你要測試的距離。。。
這是參考源代碼,可能不全,僅作參考!
#include
#define
unit
unsigned
int
#define
uchar
unsigned
char
sbit
fs="p3"^0;
//發送端;
sbit
h="p3"^7;
sbit
l="p3"^5;
//數碼管位選端;
sbit
m="p3"^4;
uchar
tab[16]=\{0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0,0x60,0x25,0x3c,0x23,0x34,0x74};//段碼;
uchar
u[3];
//顯示數組;
unit
count,b;
void
delay(unit
a)
//延時;
\{
unit
m;
for(m=0;m
=300)
\{
b=(17*count)/1000;
u[0]=b%10;
u[1]=(b/10)%10;
u[2]=(b/100)%10;
display();
}
}
void
over()interrupt
1
//t0溢出為無效測量fff;
\{
u[0]=15;
u[1]=15;
u[2]=15;
display();
}
void
main()
\{
fs=0;
delay(8600);
th0=0;
tl0=0;
tmod=0x01;
tr0=1;
ea=1;
et0=1;
pt0=1;
tx();
it0=1;
ie=0x83;
}