基于單片機的超聲波測距系統_第1頁
基于單片機的超聲波測距系統_第2頁
基于單片機的超聲波測距系統_第3頁
基于單片機的超聲波測距系統_第4頁
基于單片機的超聲波測距系統_第5頁
已閱讀5頁,還剩20頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、專業綜合性與創新性實驗報告基于單片機的超聲波測距系統 學 院: 交通運輸工程學院 班 級: 交通試驗1101 作 者: 陳凱 指導教師: 肖友剛 時 間: 2014.7.1 摘要STC89C52是STC系列單片機里應用比較廣泛的一款,在自動控制領域里享有很高的價值,以其易用性和多功能性受到了廣大電子設計愛好者的好評。本次設計主要是利用STC89C52單片機、超聲波傳感器完成測距報警系統的制作,以STC89C52為主控芯片,利用超聲波對距離的檢測,將前方物體的距離探測出來,然后單片機處理運算,與設定的報警距離值進行比較判斷,當測得距離小于設定值時,STC89C52發出指令控制蜂鳴器報警。關鍵詞:

2、超聲波傳感器 STC89C52 1 緒論1.1 項目研究背景及意義 由于超聲測距是一種非接觸檢測技術,不受光線、被測對象顏色等的影響,較其它儀器更衛生,更耐潮濕、粉塵、高溫、腐蝕氣體等惡劣環境,具有少維護、不污染、高可靠、長壽命等特點。因此可廣泛應用于紙業、礦業、電廠、化工業、水處理廠、污水處理廠、農業用水、環保檢測、食品(酒業、飲料業、添加劑、食用油、奶制品)、防汛、水文、明渠、空間定位、公路限高等行業中。可在不同環境中進行距離準確度在線標定,可直接用于水、酒、糖、飲料等液位控制,可進行差值設定,直接顯示各種液位罐的液位、料位高度。因此,超聲在空氣中測距在特殊環境下有較廣泛的應用。利用超聲波

3、檢測往往比較迅速、方便、計算簡單、易于實現實時控制,并且在測量精度方面能達到工業實用的指標要求,因此為了使移動機器人能夠自動躲避障礙物行走,就必須裝備測距系統,以使其及時獲取距障礙物的位置信息(距離和方向)。因此超聲波測距在移動機器人的研究上得到了廣泛的應用。同時由于超聲波測距系統具有以上的這些優點,因此在汽車倒車雷達的研制方面也得到了廣泛的應用。2 總體設計方案及論證2.1 總體方案設計 本設計包括硬件和軟件設計兩個部分。模塊劃分為數據采集、按鍵控制、四位數碼管顯示、報警等子模塊。電路結構可劃分為:超聲波傳感器、蜂鳴器、單片機控制電路。就此設計的核心模塊來說,單片機就是設計的中心單元,所以此

4、系統也是單片機應用系統的一種應用。單片機應用系統也是有硬件和軟件組成。硬件包括單片機、輸入/輸出設備、以及外圍應用電路等組成的系統,軟件是各種工作程序的總稱。單片機應用系統的研制過程包括總體設計、硬件設計、軟件設計等幾個階段。系統采用STC89C52單片機作為核心控制單元,當測得的距離小于設定距離時,主控芯片將測得的數值與設定值進行比較處理。然后控制蜂鳴器報警。系統總體的設計方框圖如圖1所示。電源STC89C52主控制器模塊超聲波傳感器模塊按鍵控制4位數碼管顯示模塊蜂鳴器報警模塊圖1 系統方框圖 3 硬件實現及單元電路設計3.1 主控制模塊主控制最小系統電路如圖2所示。 圖2 最小系統硬件電路

5、總設計見圖3,從以上的分析可知在本設計中要用到如下器件: STC89C52、超聲波傳感器、按鍵、四位數碼管、蜂鳴器等一些單片機外圍應用電路。其中D1為電源工作指示燈。電路中用到3個按鍵,一個是設定鍵, 一個加鍵,一個減鍵。圖3 總設計電路圖3.2 電源設計電源部分的設計采用3節5號干電池4.5V供電。3.3 超聲波測試模塊 超聲波模塊采用現成的超聲波模塊,該模塊可提供 2cm-400cm 的非接觸式距離感測功能,測距精度可達高到 3mm。模塊包括超聲波發射器、接收器與控制電路?;竟ぷ髟恚翰捎?IO 口 TRIG 觸發測距,給至少 10us 的高電平信號;模塊自動發送 8 個 40khz 的

6、方波,自動檢測是否有信號返回;有信號返回,通過 IO 口 ECHO 輸出一個高電平,高電平持續的時間就是超聲波從發射到返回的時間。測試距離=(高電平時間*聲速(340M/S)/2。其中VCC 供5V 電源,GND 為地線,TRIG 觸發控制信號輸入,ECHO 回響信號輸出等四支線。超聲波探測模塊HC-SR04的使用方法如下:IO口觸發,給TRIG口至少10us的高電平,啟動測量;模塊自動發送8個40Khz的方波,自動檢測是否有信號返回;有信號返回,通過IO口Echo輸出一個高電平,高電平持續的時間就是超聲波從發射到返回的時間,測試距離=(高電平時間*340)/ 2,單位為m。程序中測試功能主要

7、由兩個函數完成。 實現中采用定時器0進行定時測量,8分頻,TCNTT0預設值0XCE,當timer0溢出中斷發生2500次時為125ms,計算公式為(單位:ms):T = (定時器0溢出次數 * (0XFF - 0XCE)/ 1000 其中定時器0初值計算依據分頻不同而有差異。3.3.1 超聲波換能器完成產生超聲波和接收超聲波這種功能的裝置就是超聲波傳感器,習慣上稱為超聲換能器,或者超聲波探頭。超聲波探頭主要由壓電晶片組成,既可以發射超聲波,也可以接收超聲波。小功率超聲探頭多用作探測方面。它有許多不同的結構,可分直探頭(縱波)、斜探頭(橫波)、表面波探頭(表面波)、蘭姆波探頭(蘭姆波)、雙探頭

8、(一個探頭反射、一個探頭接收)等。超聲探頭的核心是其塑料外套或者金屬外套中的一塊壓電晶片。構成晶片的材料可以有許多種。由于晶片的大小,如直徑和厚度也各不相同,因此每個探頭的性能都是不同的,我們使用前必須預先了解清楚該探頭的性能參數。超聲波傳感器的主要性能指標包括:(1)工作頻率。工作頻率就是壓電晶片的共振頻率。當加到它兩端的交流電壓的頻率和晶片的共振頻率相等時,輸出的能量最大,靈敏度也最高。(2)工作溫度。由于壓電材料的居里點一般比較高,特別時診斷用超聲波探頭使用功率較小,所以工作溫度比較低,可以長時間地工作而不失效。醫療用的超聲探頭的溫度比較高,需要單獨的制冷設備。(3)靈敏度。主要取決于制

9、造晶片本身。機電耦合系數大,靈敏度高。人類能聽到的聲音頻率范圍為:20Hz20kHz,即為可聽聲波,超出此頻率范圍的聲音,即20Hz以下頻率的聲音稱為低頻聲波,20kHz以上頻率的聲音稱為超聲波。超聲波為直線傳播方式,頻率越高,繞射能力越弱,但反射能力越強。為此,利用超聲波的這種性能就可制成超聲波傳感器。另外,超聲波在空氣中的傳播速度較慢,為340ms,這就使得超聲波傳感器使用變得非常簡便。我們選用壓電式超聲波傳感器。它的探頭常用材料是壓電晶體和壓電陶瓷,是利用壓電材料的壓電效應來進行工作的。逆壓電效應將高頻電振動轉換成高頻機械振動,從而產生超聲波,可作為發射探頭;而利用正壓電效應,將超聲振動

10、波轉換成電信號,可作為接收探頭。為了研究和利用超聲波,人們已經設計和制成了許多種超聲波發生器。總體上講,超聲波發生器大體可以分為兩大類:一類是用電氣方式產生超聲波,一類是用機械方式產生超聲波。電氣方式包括壓電型、磁致伸縮型和電動型等;機械方式有加爾統笛、液哨和氣流旋笛等。它們所產生的超聲波的頻率、功率和聲波特性各不相同,因而用途也各不相同。目前較為常用的是壓電式超聲波發生器。 圖6 超聲波傳感器結構 壓電式超聲波發生器實際上是利用壓電晶體的諧振來工作的。超聲波發生器內部結構如圖所示,它有兩個壓電晶片和一個共振板。當它的兩極外加脈沖信號,其頻率等于壓電晶片的固有振蕩頻率時,壓電晶片將會發生共振,

11、并帶動共振板振動,便產生超聲波。反之,如果兩電極間未外加電壓,當共振板接收到超聲波時,將壓迫壓電晶片作振動,將機械能轉換為電信號,這時它就成為超聲波接收器了。如圖6所示。3.4 測距分析超聲波發射器向某一方向發射超聲波,在發射時刻的同時開始計時,超聲波在空氣中傳播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波就立即停止計時。超聲波在空氣中的傳播速度為340m/s,根據計時器記錄的時間t,就可以計算出發射點距障礙物的距離(s),即:s=340t/2最常用的超聲測距的方法是回聲探測法,超聲波發射器向某一方向發射超聲波,在發射時刻的同時計數器開始計時,超聲波在空氣中傳播,途中碰到障礙物面阻擋就

12、立即反射回來,超聲波接收器收到反射回的超聲波就立即停止計時。超聲波在空氣中的傳播速度為340m/s,根據計時器記錄的時間t,就可以計算出發射點距障礙物面的距離s,即:s=340t/2。 由于超聲波也是一種聲波,其聲速V與溫度有關。在使用時,如果傳播介質溫度變化不大,則可近似認為超聲波速度在傳播的過程中是基本不變的。如果對測距精度要求很高,則應通過溫度補償的方法對測量結果加以數值校正。聲速確定后,只要測得超聲波往返的時間,即可求得距離。這就是超聲波測距儀的基本原理。如圖12所示: 超聲波發射 障礙物 S H 超聲波接收圖12 超聲波的測距原理 (3-1) (3-2)式中:L-兩探頭之間中心距離的

13、一半.又知道超聲波傳播的距離為: (3-3)式中:v超聲波在介質中的傳播速度; t超聲波從發射到接收所需要的時間.將(32)、(33)代入(3-1)中得: (3-4)其中,超聲波的傳播速度v在一定的溫度下是一個常數(例如在溫度T=30度時,V=349m/s);當需要測量的距離H遠遠大于L時,則(34)變為: (3-5) 所以,只要需要測量出超聲波傳播的時間t,就可以得出測量的距離H.3.5 時鐘電路的設計XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅動器件,XTAL2應不接。因為一個機器周期含有6個狀態周期,

14、而每個狀態周期為2個振蕩周期,所以一個機器周期共有12個振蕩周期,如果外接石英晶體振蕩器的振蕩頻率為12MHZ,一個振蕩周期為1/12us,故而一個機器周期為1us。如圖13所示為時鐘電路。圖13 時鐘電路圖3.6 復位電路的設計復位方法一般有上電自動復位和外部按鍵手動復位,單片機在時鐘電路工作以后, 在RESET端持續給出2個機器周期的高電平時就可以完成復位操作。例如使用晶振頻率為12MHz時,則復位信號持續時間應不小于2us。本設計采用的是自動復位電路。如圖14示為復位電路。圖14 復位電路圖3.7 聲音報警電路的設計如下圖所示,用一個蜂鳴器和三極管、電阻接到單片機的P13引腳上,構成聲音

15、報警電路,如圖15示為聲音報警電路。圖15 聲音報警電路圖3.8 顯示模塊顯示模塊采用數碼管顯示接口電路如圖16圖16 數碼管電路4 軟件設計4.1 主程序工作流程圖按上述工作原理和硬件結構分析可知系統主程序工作流程圖如下圖17所示;超聲波探測程序流程圖:圖19 超聲波探測程序流程圖圖17 主程序工作流程圖超聲波發射器向某一方向發射超聲波,在發射時刻的同時計數器開始計時,超聲波在空氣中傳播,途中碰到障礙物面阻擋就立即反射回來,超聲波接收器收到反射回的超聲波就立即停止計時。超聲波在空氣中的傳播速度為340m/s,根據計時器記錄的時間t,就可以計算出發射點距障礙物面的距離s,即:s=340t/2。

16、系統初始化報警結束測得距離與設定值比較,小于距離比較,報警是否持續開始啟動報警電路開始報警再次檢測等待下次報警結束YNNYYN5 總結本設計研究了一種基于單片機技術的超聲波智能測距報警系統。該系統通過以STC89C52單片機為工作處理器核心,超聲波傳感器,它是一種新穎的被動式超聲波探測器件,能夠以非接觸測出前方物體距離,并將其轉化為相應的電信號輸出.該報警器的最大特點就是使用戶能夠操作簡單、易懂、靈活;且安裝方便、智能性高、誤報率低。隨著現代人們安全意識的增強以及科學技術的快速發展,相信報警器必將在更廣闊的領域得到更深層次的應用。6 參考文獻 1 吳政江. 單片機控制紅外線防盜報警器J. 錦州

17、師范學院學報, 2001.2 余錫存. 單片機原理及接口技術M. 西安: 西安電子科技大學出版社, 2000.3 李全利. 單片機原理及接口技術M. 北京: 北京航空航天大學出版社, 2004.4 薛均義, 張彥斌. MCS-51系列單片微型計算機及其應用M. 西安: 西安交通大學出版社, 2005.5 徐愛鈞, 彭秀華. 單片機高級語言C51應用程序設計M. 北京: 北京航空航天大學出版社, 2006.附 錄附件1附件2:#include <reg52.h>#include <intrins.h>#include "eepom52.h"#defin

18、e uchar unsigned char #define uint unsigned int/數碼管段選定義 0 1 2 3 4 5 6 7 8 9uchar code smg_du=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff; /斷碼/數碼管位選定義uchar code smg_we=0xe0,0xd0,0xb0,0x70;uchar dis_smg8 =0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8;sbit smg_we1 =

19、P34; /數碼管位選定義sbit smg_we2 = P35;sbit smg_we3 = P36;sbit smg_we4 = P37;sbit c_send = P32;/超聲波發射sbit c_recive = P33;/超聲波接收uchar flag_hc_value; /超聲波中間變量sbit beep = P23; /蜂鳴器IO口定義bit flag_key_b_en,flag_key_set_en; /按鍵蜂鳴器使能uchar smg_i = 3; /顯示數碼管的個位數bit flag_300ms ;bit key_500ms ;long distance; /距離uint s

20、et_d; /距離bit flag_csb_juli; /超聲波超出量程uint flag_time0; /用來保存定時器0的時候的/ 按鍵的IO變量的定義uchar key_can; /按鍵值的變量uchar zd_break_en,zd_break_value; /自動退出設置界面uchar menu_shudu = 10; /用來控制連加的速度bit flag_lj_en; /按鍵連加使能bit flag_lj_3_en; /按鍵連3次連加后使能 加的數就越大了 uchar key_time,flag_value; /用做連加的中間變量uchar menu_1; /菜單設計的變量ucha

21、r a_a;/*1ms延時函數*/void delay_1ms(uint q)uint i,j;for(i=0;i<q;i+)for(j=0;j<120;j+);/*處理距離函數*/void smg_display()dis_smg0 = smg_dudistance % 10;dis_smg1 = smg_dudistance / 10 % 10;dis_smg2 = smg_dudistance / 100 % 10 & 0x7f;/*把數據保存到單片機內部eepom中*/void write_eepom()SectorErase(0x2000);byte_write(

22、0x2000, set_d % 256);byte_write(0x2001, set_d / 256);byte_write(0x2058, a_a);/*把數據從單片機內部eepom中讀出來*/void read_eepom()set_d = byte_read(0x2001);set_d <<= 8;set_d |= byte_read(0x2000);a_a = byte_read(0x2058);/*開機自檢eepom初始化*/void init_eepom()read_eepom();/先讀if(a_a != 1)/新的單片機初始單片機內問EEPOMset_d = 10

23、0;a_a = 1;write_eepom();/*獨立按鍵處理函數*/void key()static uchar key_new = 0,key_old = 0,key_value = 0;if(key_new = 0) /按鍵松開的時候做松手檢測if(P2 & 0x07) = 0x07)key_value +;else key_value = 0;if(key_value >= 5)key_value = 0;key_new = 1;flag_lj_en = 0;/關閉連加使能flag_lj_3_en = 0;/關閉3秒后使能flag_value = 0;/清零key_ti

24、me = 0;write_eepom();else if(P2 & 0x07) != 0x07)key_value +; /按鍵按下的時候else key_value = 0;if(key_value >= 5)key_value = 0;key_new = 0;flag_lj_en = 1; /連加使能zd_break_en = 1; /自動退出設置界使能zd_break_value = 0; /自動退出設置界變量清零flag_key_b_en = 1; /按鍵蜂鳴器使能key_can = 20;if(key_500ms = 1)/連加key_500ms = 0;key_new

25、 = 0;key_old = 1;zd_break_value = 0;if(key_new = 0) && (key_old = 1)switch(P2 & 0x07)case 0x06: key_can = 3; break; /得到k2鍵值case 0x05: key_can = 2; break; /得到k3鍵值case 0x03: key_can = 1; break; /得到k4鍵值/dis_smg3 = smg_dukey_can % 10; key_old = key_new; void smg_we_switch(uchar i)switch(i)ca

26、se 0: smg_we1 = 0; smg_we2 = 1; smg_we3 = 1; smg_we4 = 1; break;case 1: smg_we1 = 1; smg_we2 = 0; smg_we3 = 1; smg_we4 = 1; break;case 2: smg_we1 = 1; smg_we2 = 1; smg_we3 = 0; smg_we4 = 1; break;case 3: smg_we1 = 1; smg_we2 = 1; smg_we3 = 1; smg_we4 = 0; break;/*數碼顯示函數*/void display()static uchar i

27、; i+;if(i >= smg_i)i = 0;/P1 = 0xff; /段選 /P3 = 0xf0 | (P3 & 0x0f); /位選/P3 = smg_wei | (P3 & 0x0f); /位選smg_we_switch(i);P1 = dis_smgi; /段選 void delay()_nop_(); /執行一條_nop_()指令就是1us_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); /*超聲波測距程序*/void send_wave()c_send = 1; /10us的高電平觸發 delay(

28、);c_send = 0; TH0 = 0; /給定時器0清零TL0 = 0;TR0 = 0; /關定時器0定時flag_hc_value = 0;while(!c_recive); /當c_recive為零時等待TR0=1;while(c_recive) /當c_recive為1計數并等待flag_time0 = TH0 * 256 + TL0;if(flag_hc_value > 1) | (flag_time0 > 65000) /當超聲波超過測量范圍時,顯示3個888TR0 = 0;flag_csb_juli = 2;distance = 888;flag_hc_value

29、 = 0;break ;else flag_csb_juli = 1;if(flag_csb_juli = 1)TR0=0; /關定時器0定時distance = TH0; /讀出定時器0的時間distance = distance * 256 + TL0;distance +=( flag_hc_value * 65536);/算出超聲波測距的時間 得到單位是msdistance *= 0.017; / 0.017 = 340M / 2 = 170M = 0.017M 算出來是米if(distance > 350) /距離 = 速度 * 時間distance = 888; /如果大于3

30、.8m就超出超聲波的量程 /*定時器0、定時器1初始化*/void time_init() EA = 1; /開總中斷TMOD = 0X11; /定時器0、定時器1工作方式1ET0 = 1; /開定時器0中斷 TR0 = 1; /允許定時器0定時ET1 = 1; /開定時器1中斷 TR1 = 1; /允許定時器1定時/*按鍵處理數碼管顯示函數*/void key_with()if(key_can = 1)menu_1 +;if(menu_1 >= 2)menu_1 = 0;if(menu_1 = 0)menu_shudu = 20;dis_smg0 = smg_dudistance %

31、10; dis_smg1 = smg_dudistance / 10 % 10 ; dis_smg2 = smg_dudistance / 100 % 10 & 0x7f; smg_i = 3;if(menu_1 = 1)menu_shudu = 1;dis_smg0 = smg_duset_d % 10; dis_smg1 = smg_duset_d / 10 % 10; dis_smg2 = smg_duset_d / 100 % 10 & 0x7f ; dis_smg3 = 0x88;smg_i = 4;if(menu_1 = 1)/設置高溫報警if(flag_lj_3_

32、en = 0) /三次連加之后速度加快menu_shudu = 10 ; /500ms 加減一次else menu_shudu = 1; /250ms 加減一次if(key_can = 2)set_d + ;/按鍵按下未松開自動加三次if(set_d > 350)set_d = 350;dis_smg0 = smg_duset_d % 10; /取小數顯示dis_smg1 = smg_duset_d / 10 % 10 ; /取個位顯示dis_smg2 = smg_duset_d / 100 % 10 & 0x7f; /取十位顯示dis_smg3 = 0x88; /aif(key

33、_can = 3)set_d - ;/按鍵按下未松開自動加三次if(set_d <= 1)set_d = 1;dis_smg0 = smg_duset_d % 10; /取小數顯示dis_smg1 = smg_duset_d / 10 % 10 ; /取個位顯示dis_smg2 = smg_duset_d / 100 % 10 & 0x7f ; /取十位顯示dis_smg3 = 0x88; /a/write_eepom(); /*報警函數*/void clock_h_l()static uchar value;if(distance <= set_d)value +; /消除實際距離在設定距離左右變化時的干擾if(value >= 5)beep =

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論