久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 35837|回復: 6
打印 上一主題 下一主題
收起左側

超聲波測距語音播報設計論文

  [復制鏈接]
跳轉到指定樓層
樓主
畢業設計超聲波測距語音播報論文

專   業    電子信息工程技術      
學生姓名
班   級
學   號
指導教師
完成日期


摘 要

在空氣介質中超聲測距傳感器因其性能好,價格低廉、使用方便,在現場機器人定位系統、車輛自動導航、車輛安全行駛輔助系統、城市交通管理和高速公路管理監測系統,以及河道、油井和倉庫及料位的探測中都有應用。由于超聲波傳播不易受干擾,能量消耗緩慢,在介質中傳播的距離較遠,因而超聲波經常用于距離的測量,如測距和物位測量等都可以通過超聲波來實現。為此,深入研究超聲波的產生與傳播規律、開發高性能超聲波換能器及其收發電路,對于超聲波檢測技術的發展具有十分重要的現實意義。

本設計介紹了基于單片機控制的超聲測距的原理:由STC89C52控制定時器產生一定頻率脈沖,計算從發射到接收回波時間,從而得到實測距離,數據處理采用,lcd1602顯示距離,WTD588D語音播報。


摘 要
Abstract
第一章 緒論
1.1 課題設計目的及意義
1.1.1設計的目的
1.1.2設計的意義
1.2 國內外研究動態
1.3 本課題研究的主要內容
第二章 總體方案
2.1 方案選擇
2.2 超聲波測距儀的設計思路
2.2.1 超聲波測距原理
2.2.2 超聲波測距原理框圖
2.3 使用元件選擇
第三章 系統的硬件結構設計
3.1 STC89C52單片機的功能及特點
3.2單片機最小系統
3.4 語音播報
3.5 顯示單元
第四章 系統的軟件設計
4.1 主程序流程圖
4.2 超聲波發生子程序和超聲波接收中斷程序
第五章超聲波測距接收
5.1 HC-SR04模塊
5.2 T40、R40超聲波傳感器簡介
5.2.1 超聲波傳感器的基本介紹
5.2.2 超聲波傳感器的主要應用
5.2.3 超聲波傳感器的工作原理
5.3 超聲波發射電路
5.4 超聲波接收電路
5.5 超聲波接收過程
5.6 接收數據處理
第六章總結
致  謝
參考資料
附錄1原理圖
附錄2主要源程序

第一章 緒論

1.1 課題設計目的及意義

1.1.1設計的目的

隨著科學技術的快速發展,超聲波在測距中的應用越來越廣。但就目前的急速水平來說,人們可以具體利用的測距技術還十分有限,因此,這是一個正在蓬勃發展而又有無限前景的技術及產業領域。由于超聲波指向性強,能量消耗緩慢,在介質中傳播的距離較遠,因此超聲波經常用于距離測量,如超聲波測距和物位測量等都可以通過超聲波來實現。利用超聲波檢測往往比較迅速、方便、計算簡單、易于做到實時控制。為了研究和利用超聲波,人們已經設計和制成了許多超聲波發生器。研制具有更高定位精度的被動測距聲納,以滿足水中武器實施全隱蔽攻擊的需求;繼續發展采用低頻線譜檢測的潛艇拖拽線列陣聲納,實現超遠程的被動探測和識別;研制更適合與前還工作的潛艇聲納,特別是解決淺海水中目標識別問題;搭理降低潛艇自噪聲,改善潛艇聲納的工作環境。毋庸置疑,無線的超聲波測距將于自動化智能化接軌,與其他的測距儀集成和融合,形成多測距。隨著測距儀的技術進步,測距儀將從具有單純判斷功能發展到具有學習功能,最終發展到具有創造力。在新的世紀里,面貌一新的測距儀將發揮更大的作用。

1.1.2設計的意義

由于超聲測距是一種非接觸檢測技術,不受光線、被測對象顏色等的影響,較其它儀器更衛生,更耐潮濕、粉塵、高溫、腐蝕氣體等惡劣環境,具有少維護、不污染、高可靠、長壽命等特點,所以超聲波測距系統主要應用于汽車的倒車雷達、機器人自動避障行走、建筑施工工地以及一些工業現場中的液位、井深、管進長度測量等場合。因此研究超聲波測距系統有著很大的現實意義。對本課題的研究與設計,還能進一步提高自己的電路設計水平,深入對單片機的理解和應用。

1.2 國內外研究動態

    國外在提高超聲波測距方面做了大量的研究,國內一些學者也作了相關的研究。目前超聲波測距方法主要有三種:(1)相位檢測法:精度高,但檢測范圍有限;(2)聲波幅值檢測法:易受反射波的影響;(3)渡越時間法:工作方式簡單,直觀。現在對超聲波測距的精度主要取決于所測的超聲波傳輸時間和超聲波在介質中的傳輸速度,二者中以傳輸時間的精度影響較大,所以大部分文獻采用降低傳輸時間的不確定度來提高測距精度。溫度對傳感器的影響也很大,因此,需要用溫度傳感器進行校正,目前相位探測法和聲譜輪廓分析法或二者結合起來的方法是主要的降低探測傳輸不確定度的方法。

1.3 本課題研究的主要內容

超聲波是指頻率高于20KHz的機械波。為了以超聲波作為檢測手段,必須產生超生波和接收超聲波。完成這種功能的裝置就是超聲波換能器。超聲波傳感器有發送器和接收器,但一個超聲波換能器也可具有發送和接收聲波的雙重作用。超聲波換能器是利用壓電效應的原理將電能和超聲波相互轉化,即在發射超聲波的時候,將電能轉換,發射超聲波;而在收到回波的時候,則將超聲振動轉換成電信號。
超聲波測距的原理一般采用渡越時間法TOF(time of flight)。首先測出超聲波從發射到遇到障礙物返回所經歷的時間,再乘以超聲波的速度就得到二倍的聲源與障礙物之間的距離,擬應用以下三種技術:

    a、單片機技術:STC89C52系列的單片機具有體積小,重量輕,結構較為簡單,成本低廉,可以實現一般的控制功能的優點。而且單片機更適用應用于小型的嵌入式系統,因此它得到了廣泛的應用。現代人類生活大部分電子和機械產品中都會集成有單片機。

    b、超聲波測距技術:超聲波測距技術與一般測距技術相比,具有操作方便、系統簡單以及計算簡單的優點。

    c、顯示技術:數據處理,數碼管顯示測出與物體之間的距離。

    d、語音模塊技術:ISD1730A芯片來語音播報距離。

第二章 總體方案

2.1 方案選擇

采用單片機來控制超聲波測距,信號線發射到與超聲波發射器相連的信號端,超聲波發射器向既定方向發射,在發射的同時開始計時,超聲波在空氣中傳播,途中碰到障礙物將產生回波。

2.2 超聲波測距儀的設計思路
2.2.1 超聲波測距原理

超聲波測距的方法有多種,如相位檢測法、聲波幅值檢測法和渡越時間檢測法等。相位檢測法雖然精度高,但檢測范圍有限,聲波幅值檢測法易受反射波的影響。

本測距系統采用超聲波渡越時間檢測法。其原理為:檢測從發射傳感器發射的超聲波經氣體介質傳播到接收傳感器的時間t,這個時間就是渡越時間,然后求出距離l。設l為測量距離,t為往返時間差,超聲波的傳播速度為c,則有l=ct/2。超聲波接收器收到反射波就立即停止計時。再由單機計算出距離,送數碼管顯示測量結果。

超聲波測距的算法設計: 超聲波在空氣中傳播速度為每秒鐘340米(15℃時)。t2是接收超聲波時刻,t1是超聲波聲波發射時刻,t2-t1得出的是一個時間差的絕對值,假定t2-t1=0.03S,則有340m×0.03S=10.2m。由于在這10.2m的時間里,超聲波發出到遇到返射物返回的距離如下: 如圖2-2-1為測距原理[4]

圖2-1測距原理

因為θ/2角度較小,可以忽略不計,所以L≈S。

超聲波發出到遇到返射物返回的距離如下:

L=C x ( t2 -t1 )/ 2

由于超聲波也是一種聲波,其聲速c與空氣溫度有關,一般來說,溫度每升高1攝氏度,聲速增加0.6米/秒。表2-1列出了幾種溫度下的聲速。


表2-1  聲速與溫度的關系表

溫度(攝氏度)

-30

-20

-10

0

10

20

30

100

聲速(米/秒)

313

319

325

323

338

344

349

386


在使用時,如果溫度變化不大,則可認為聲速c是基本不變的,計算時取c為340m/s。如果測距精度要求很高,則可通過改變硬件電路增加溫度補償電路的方法或者在硬件電路基本不變的情況下通過軟件改進算法的方法來加以校正。

2.2.2 超聲波測距原理框圖

     超聲波測距模塊用HC-SR04,溫度傳感器使用DS18B20,微處理器使用STC89C52單片機,顯示部分采用共陽數碼管。HC-SR04集成的發射電路模塊發出超聲波,遇到障礙物產生回波,被接收電路模塊接收,STC89C52單片機統計出聲波傳輸所用時間,經過溫度補償溫,計算出正確的待測距離,同時ISD1730A根據相關數據處理進行組合播報當前測試距離,并且由數碼管顯示。

圖2-2 超聲波測距系統結構圖


2.3 使用元件選擇

由于測量距離的精度和長度要求不是很高,精度達到2cm,測量距離達到2m即可,因此超聲波模塊選用價格低廉且實用的HC-SR04即可。

    控制核心部分選擇實用的STC89C52單片機即可滿足計算和控制要求。

溫度補償的溫度傳感器選擇普遍且實用的DS18B20。

    語音播報:ISD1730A是華邦公司新推出的語音芯片,用來替代已經停產的ISD1400 系列及ISD2500 系列芯片。ISD1730A不僅在錄音時間上有更多的選擇(從20秒到240 秒),而且在功能上繼承14及25系列的所有錄放功能,并增加了一些更加人性化的提示功能及對存儲地址的精確操作。根據我們經營 ISD 系列芯片多年的經驗來看,ISD1700 的音質也較14及25系列有明顯的提高

ISD1700 系列芯片是華邦公司新推出的單片優質語音錄放電路,該芯片提供多項新功能,包括內置專利的多信息管理系統,新信息提示(vAlert ),雙運作模式(獨立&嵌入式),以及可定制的信息操作指示音效。芯片內部包含有自動增益控制、麥克風前置擴大器、揚聲器驅動線路、振蕩器與內

存等的全方位整合系統功能。。

    顯示部分:選擇了四位數碼管。

第五章超聲波測距接收

5.1 HC-SR04模塊

HC-SR04超聲波測距模塊可提供2cm-400cm的非接觸式距離感測功能,其結構簡單,使用單片機控制電路簡單容易,而且價格便宜。該模塊包括超聲波發射、接收與控制電路。實物如圖5-1。

圖5-1  HC-SR04模塊實物圖

基本工作原理

①采用IO口TRIG觸發測距,給至少10us的高電平信號;

②模塊自動發送8個40khz的方波,自動檢測是否有信號返回;

③有信號返回,通過IO口ECHO輸出一個高電平,高電平持續時間就是超

聲波從發射到返回的時間。

電氣參數

HC-SR04模塊參數如下表5-1所示。


表5-1模塊參數
電氣參數
HC-SR04超聲波模塊
工作電壓
DC 5V
工作電流
15mA
工作頻率
40khz
最遠射程
4m
最近射程
2cm
測量角度
15°
輸入觸發信號
10us的TTL脈沖
輸入回響信號
輸出TTL電平信號,與射程成比例
規格尺寸
45*20*15cm

超聲波時序圖
超聲波時序圖如圖5-2所示
圖5-2超聲波時序圖

以上時序圖表明只需要提供一個10us以上脈沖信號,該模塊內部將發出8個40khz周期電平并檢測回波。一旦檢測到有回波信號則輸出回響信號。回響信號的脈沖寬度與測量的距離成正比。由此通過發射信號到收到的回響信號時間間隔可以計算得到距離:

距離=高電平時間*聲速(340m/s)/2。

為防止發射信號對回響信號的影響,測量周期一般要60ms以上。

模塊主要由Em78p153單片機、MAX232、TL074、超聲波傳感器:T40-16、R40-16組成。

Em78p153單片機

①概況描述

Em78p153是采用高速CMOS工藝制造的8位單片機。其內部有512*13位一次性ROM(OTPROM)。因此,用戶可以方便改進完善程序。程序代碼可用EMC編程器寫入芯片。有13位選項位可滿足用戶要求,其中的保護位可用來防止程序被讀出。

②功能特點

工作電壓范圍:2.0V~6.0V;

工作溫度范圍:0℃~70℃;

工作頻率范圍:DC~8MHz;

512×13位片內ROM;32×8位片內寄存器(SDRAM);

片內有4MHz校準RC振蕩器;

2個雙向I/O端口;

8位實時定時/計數器(TCC),信號源、觸發沿可編程選擇,溢出產生中斷;

掉電模式(SLEEP模式);

3個中斷源:TCC溢出中斷、輸入引腳狀態變化中斷、外部中斷;

EM78P153為14腳封裝;封裝形式:SOP、SSOP和DIP。

③引腳分配

Em78p153單片機引腳分配如圖5-3。

圖5-3 Em78p153引腳圖

MAX232

MAX232芯片是美信公司專門為電腦的RS-232標準串口設計的單電源電平轉換芯片,使用+5v單電源供電。MAX232多用于串口通信,起到電平轉換的作用,而本設計只用到其電平轉換,將40kHz的方波由5V轉換成20V,提高發射功率。超聲波發射頭采用共振頻率為40kHz的TCT40-16探頭,接收頭采用RCT40-16。

①MAX232引腳圖

芯片引腳如圖5-4。

圖5-4 MAX232引腳圖

②引腳介紹
第一部分是電荷泵電路。由1、2、3、4、5、6腳和4只電容構成。功能是產生+12v和-12v兩個電源,提供給RS-232串口電平的需要。
第二部分是數據轉換通道。由7、8、9、10、11、12、13、14腳構成兩個數據通道。其中13腳(R1IN)、12腳(R1OUT)、11腳(T1IN)、14腳(T1OUT)為第一數據通道;8腳(R2IN)、9腳(R2OUT)、10腳(T2IN)、7腳(T2OUT)為第二數據通道。
第三部分是供電。15腳GND、16腳VCC(+5v)。
TL074
常用的低噪聲JFET輸入運算放大器,引腳如圖5-5。
圖5-5 TL074引腳圖

1、2、3腳是通道1的輸出端、反相輸入端、同相輸入端,5、6、7腳是通道2的同相輸入端、反相輸入端、輸出端,8、9、10腳是通道3的輸出端、反相輸入端、同相輸入端,12、13、14腳是通道4的同相輸入端、反相輸入端、輸出端,4腳是正電源,11腳是負電源。TL074內部組件數量如下表5-2所示

表5-2 TL074組件
電阻
44
晶體管
56
JFET
6
二極管
4
電容
4
epi-FET
4

T40-16與R40-16

為了研究和利用超聲波,人們已經設計和制成了許多超聲波發生器。總體上講,超聲波發生器可以分為兩大類:

電氣方式產生超聲波, 主要包括壓電型、磁致伸縮型和電動型等;

機械方式產生超聲波,主要包括加爾統笛、液哨和氣流旋笛等。

    它們所產生的超聲波的頻率、功率和聲波特性各不相同,因而用途也各不相同。目前較為常用的是壓電式超聲波發生器。

壓電式超聲波發生器實際上是利用壓電晶體的諧振來工作的。其內部有兩個壓電晶片和一個共振板。當它的兩極外加脈沖信號,其頻率等于壓電晶片的固有振蕩頻率時,壓電晶片發生共振,帶動共振板振動,便產生超聲波。反之,如果兩電極間未外加電壓,當共振板接收到超聲波時,將壓迫壓電晶片作振動,將機械能轉換為電信號,這時它就成為超聲波接收器了。模塊使用T40-16T/R超聲波換能器即為壓電型。

①器件說明

名 稱:壓電陶瓷超聲波傳感器;

型 號:T40-16T/R;

類 別:通用型;

中心頻率:40KHZ;

外 徑:16mm;

使用方式:T為發射頭,R為接收頭,TR為收發兼用;

適用范圍:家用電器及其它電子設備的超聲波遙控裝置;超聲波測距及汽車倒車防撞裝置;液面探測;超聲波接近開關及其它應用的超聲波發射與接收。

②器件性能

1.標稱頻率(KHz):40KHz;

2.發射電壓at10V(0dB=0.02mPa):≥110dB;

3.接收靈敏度at40KHz(0dB=V/ubar):≥-70dB;

4.靜電容量at1KHz,<1V(PF):2000±30%;

5.探測距離(m):0.02-10。

傳感器實物如圖5-5 所示。


圖5-6 傳感器實物圖

HC-SR04模塊集成了發射和接受電路,硬件上不必再自行設計繁復的發射及接收電路,軟件上也無需再通過定時器產生40Khz的方波引起壓電陶瓷共振從而產生超聲波。使用時,只要在控制端‘Trig’發一個大于10us寬度的高電平,就可以在接收端‘Echo’等待高電平輸出。單片機一旦檢測到有輸出就打開定時器開始計時。當此口變為低電平時就停止計時并讀出定時器的值,此值就為此次測距的時間,再根據傳播速度方可算出障礙物的距離。

5.2 T40、R40超聲波傳感器簡介
5-7 元件內部結構
5-8 元件外部結構

5.2.1 超聲波傳感器的基本介紹

超聲波測距換能器是利用超聲波的特性研制而成的換能器。超聲波是一種振動頻率高于聲波的機械波,由換能晶片在電壓的激勵下發生振動產生的,它具有頻率高、波長短、繞射現象小,特別是方向性好、能夠成為射線而定向傳播等特點。超聲波對液體、固體的穿透本領很大,尤其是在陽光不透明的固體中,它可穿透幾十米的深度。超聲波碰到雜質或分界面會產生顯著反射形成反射成回波,碰到活動物體能產生多普勒效應。因此超聲波檢測廣泛應用在工業、國防、生物醫學等方面。

以超聲波作為檢測手段,必須產生超聲波和接收超聲波。完成這種功能的裝置就是超聲波換能器,或者探頭。

超聲波換能器主要由壓電晶片組成,既可以發射超聲波,也可以接收超聲波。小功率超聲探頭多作探測作用。它有許多不同的結構,可分直探頭(縱波)、斜探頭(橫波)、表面波探頭(表面波)、蘭姆波探頭(蘭姆波)、雙探頭(一個探頭反射、一個探頭接收)等。

5.2.2 超聲波傳感器的主要應用

超聲波傳感技術應用在生產實踐的不同方面,而醫學應用是其最主要的應用之一,下面以醫學為例子說明超聲波傳感技術的應用。超聲波在醫學上的應用主要是診斷疾病,它已經成為了臨床醫學中不可缺少的診斷方法。超聲波診斷的優點是:對受檢者無痛苦、無損害、方法簡便、顯像清晰、診斷的準確率高等。因而推廣容易,受到醫務工作者和患者的歡迎。超聲波診斷可以基于不同的醫學原理,我們來看看其中有代表性的一種所謂的A型方法。這個方法是利用超聲波的反射。當超聲波在人體組織中傳播遇到兩層聲阻抗不同的介質界面是,在該界面就產生反射回聲。每遇到一個反射面時,回聲在示波器的屏幕上顯示出來,而兩個界面的阻抗差值也決定了回聲的振幅的高低。

在工業方面,超聲波的典型應用是對金屬的無損探傷和超聲波測厚兩種。過去,許多技術因為無法探測到物體組織內部而受到阻礙,超聲波傳感技術的出現改變了這種狀況。當然更多的超聲波傳感器是固定地安裝在不同的裝置上,“悄無聲息”地探測人們所需要的信號。在未來的應用中,超聲波將與信息技術、新材料技術結合起來,將出現更多的智能化、高靈敏度的超聲波傳感器。

超聲波距離傳感器技術應用

超聲波對液體、固體的穿透本領很大,尤其是在陽光不透明的固體中,它可穿透幾十米的深度。

超聲波碰到雜質或分界面會產生顯著反射形成反射成回波,碰到活動物體能產生多普勒效應。因此超聲波檢測廣泛應用在工業、國防、生物醫學等方面。超聲波距離傳感器可以廣泛應用在物位(液位)監測,機器人防撞,各種超聲波接近開關,以及防盜報警等相關領域,工作可靠,安裝方便, 防水型,發射夾角較小,靈敏度高,方便與工業顯示儀表連接,也提供發射夾角較大的探頭。

5.2.3 超聲波傳感器的工作原理

超聲波是一種在彈性介質中的機械振蕩,有兩種形式:橫向振蕩(橫波)及縱向振蕩(縱波)。在工業中應用主要采用縱向振蕩。超聲波可以在氣體、液體及固體中傳播,其傳播速度不同。另外,它也有折射和反射現象,并且在傳播過程中有衰減。在空氣中傳播超聲波,其頻率較低,一般為幾十KHZ,而在固體、液體中則頻率可用得較高。在空氣中衰減較快,而在液體及固體中傳播,衰減較小,傳播較遠。利用超聲波的特性,可做成各種超聲傳感器,配上不同的電路,制成各種超聲測量儀器及裝置,并在通迅,醫療家電等各方面得到廣泛應用。

超聲波傳感器主要材料有壓電晶體(電致伸縮)及鎳鐵鋁合金(磁致伸縮)兩類。電致伸縮的材料有鋯鈦酸鉛(PZT)等。壓電晶體組成的超聲波傳感器是一種可逆傳感器,它可以將電能轉變成機械振蕩而產生超聲波,同時它接收到超聲波時,也能轉變成電能,所以它可以分成發送器或接收器。有的超聲波傳感器既作發送,也能作接收。這里僅介紹小型超聲波傳感器,發送與接收略有差別,它適用于在空氣中傳播,工作頻率一般為23-25KHZ及40-45KHZ。這類傳感器適用于測距、遙控、防盜等用途。該種有T/R-40-60,T/R-40-12等(其中T表示發送,R表示接收,40表示頻率為40KHZ,16及12表示其外徑尺寸,以毫米計)。另有一種密封式超聲波傳感器(MA40EI型)。它的特點是具有防水作用(但不能放入水中),可以作料位及接近開關用,它的性能較好。超聲波應用有三種基本類型,透射型用于遙控器,防盜報警器、自動門、接近開關等;分離式反射型用于測距、液位或料位;反射型用于材料探傷、測厚等。

由發送傳感器(或稱波發送器)、接收傳感器(或稱波接收器)、控制部分與電源部分組成。發送器傳感器由發送器與使用直徑為15mm左右的陶瓷振子換能器組成,換能器作用是將陶瓷振子的電振動能量轉換成超能量并向空中輻射;而接收傳感器由陶瓷振子換能器與放大電路組成,換能器接收波產生機械振動,將其變換成電能量,作為傳感器接收器的輸出,從而對發送的超進行檢測.而實際使用中,用發送傳感器的陶瓷振子的也可以用做接收器傳感器社的陶瓷振子。控制部分主要對發送器發出的脈沖鏈頻率、占空比及稀疏調制和計數及探測距離等進行控制

5.3 超聲波發射電路

HC-SR04模塊內部超聲波發射電路如圖5-6所示,主要由Em78p153單片機、MAX232及超聲波發射換能器T40組成。

圖5-9 超聲波發射電路

5.4 超聲波接收電路
HC-SR04模塊內部超聲波接收電路如圖5-3所示,主要由TL074運算放大器及超聲波接換能器R40組成。
圖5-10 超聲波接收電路


5.5 超聲波接收過程

    單片機初始化,HC-SR04內部ECHO接口與單片機P1.1的引腳相連,發射接口TRIG與單片機的P1.2引腳相接。

單片機開啟中斷,單片機P1.1給“Trig”接口一個約為20us的高電平,經過HC-SR04模塊內EM78P153發送8個連續的40KHz脈沖的信號,經過MAX232電平轉換,提高發射功率。換能器將電脈沖信號轉換為超聲波發射。

    當單片機的給一個20us的觸發信號時,TRIG由低電平轉換為高電平,TRIG=1,

單片機開時計時,開啟中斷,并記錄時間為T1,接收換能器等待接收回波,ECHO持續為高電平的時間為發射時間。換能器接收回波將超聲波轉換為電信號,送至單片機,記錄時間為T2。超聲波發射的時間為:T2-T1,

計算發射距離為:

L = (T2-T1)xC/2

如果等待回波時間超過65ms時,則無法接收到回波,單片機初始化,重新發射接收下一次回波。

5.6 接收數據處理

單片機初始化函數
5-11程序流程圖

接收過程:上電后先進行初始化,主要是對各變量即定時器0進行初始化,然后單片機給‘Trig’端一個約為20us的高電平,此后在‘Echo’端等待一個高電平,一旦檢測到高電平,則立即打開定時器,開始計時。此后只要定時器0中的值不超過約為65ms(65.5536ms)的計時上限,則認為仍處在有效測量范圍內,并未進入盲區,則在‘Echo’等待低電平的產生,一旦檢測到低電平,立即讀出此時的TH0和TL0,并關閉定時器0。則超聲波從發射到返回總共所用時間為:time=TH0*256+TL0(us),再根據超聲波常溫下(27℃)在空氣中的傳播速度,(約為344m/s)計算出障礙物的距離,在數碼管上進行動態的實時顯示即可。

接收數據處理子程序如下:

              c_send = 1;                                       //10us的高電平觸發
              delay();
              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個888
                            {
                                          TR0 = 0;
                                          flag_csb_juli = 2;
                                          distance = 888;
                                          flag_hc_value = 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);//算出超聲波測距的時間              得到單位是ms
                            distance *= 0.017;               // 0.017 = 340M / 2 = 170M = 0.017M 算出來是米
                            if(distance > 350)                                                        //距離 = 速度 * 時間
                            {            
                                          distance = 888;                                                        //如果大于3.8m就超出超聲波的量程
                            }
              }  
第六章總結

本次設計介紹了一種基于單片機的超聲波測距系統的設計,給出了相應的軟件和硬件的設計方案。

超聲波測距的原理與雷達測距原理相似,通過超聲波發射裝置發出超聲波,根據接收器接到超聲波時的時間差就可以知道距離,也就是說超聲波發射器向某一方向發射超聲波,在發射時刻的同時單片機開始計時,超聲波在空氣中傳播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波單片機就立即停止計時,再利用對應的計算公式就可以求出物體間的間距,這是根據反射原理利用了超聲波指向性強,在介質中傳播距離較遠的特性。

超聲波測距儀硬件電路的設計主要包括單片機的基本電路、超聲波發射接收模塊控制電路、顯示電路、語音模塊,溫度補償五部分部分組成。單片機采用了STC89C52,晶振為12MHz,單片機P1.3端口輸出10us的觸發信號,由定時器T0計得時間間隔,顯示電路采用1602,語音芯片WTD588D。

本次設計的超聲波測距系統滿足倒車測距等所需的測量精度,而且反映速度快、控制簡單、成本低廉等,測距范圍為2cm到350cm。但由于經驗不足還有些地方有待完善。在要求精度較高的地方時,由于超聲波在空氣中的傳播速度受溫度影響有點大,則需考慮到不同溫度時超聲波的傳播速度變換。

總體來說,經過本次設計讓我學到了很多,從中受益匪淺。了解了超聲波測距的原理,并對單片機的開發和電路設計有了更進一步的了解。

致  謝

經過幾個月的努力本次畢業設計已經接近尾聲。畢業設計是對我們知識運用能力的一次全面的考核,培養我們綜合運用所學知識和獨立分析問題并且解決問題的能力。

首先,我要感謝王老師在畢業設計中對我給予的悉心指導和嚴格要求,我要感謝和我一起做畢業設計的同學。在畢業設計的短短3個月里,你們給我提出很多寶貴的意見,給了我不少幫助還有工作上的支持,在此也真誠的謝謝你們。同時,我還要感謝我的寢室同學和身邊的朋友,正是在這樣一個團結友愛,相互促進的環境中,在和他們的相互幫助和啟發中,才有我今天的小小收獲

經過幾個月的努力本次畢業設計已經接近尾聲。畢業設計是對我們知識運用能力的一次全面的考核,培養我們綜合運用所學知識和獨立分析問題并且解決問題的能力。最后再次深深感謝我的導師趙老師以及給予我幫助的同學和朋友。


參考資料

[1] 張國熊. 測控電路[M]. 北京:機械工業出版社,2003.

[2] 閻石. 數字電子技術基礎[M]. 北京:高等教育出版社,2004.

[3] 侯媛彬等. 凌陽單片機原理及其畢業設計精選[M]. 科學出版社,2006.

[4] 李建忠. 單片機原理及應用[M]. 西安:西安電子科技大學出版社,2008.

[5] 霍孟友等. 單片機原理與應用[M]. 北京:機械工業出版社,2004.

[6] 高惠芳.單片機原理及系統設計 杭州電子科技大學電子信息學校,2009

[7] 王安敏,張凱基于STC89C52 單片機的超聲波測距系統 儀表技術與傳感器

[8] 張珩,劉亞杰STC89C52 超聲波測距倒車防撞報警系統 現代電子技術

[9] 彭偉.單片機C語言程序設計設計實訓[M].西安:電子工業出版社,2009.
[10] 徐江海.數碼管顯示電路設計制造[M].合肥:機械工業出版社,2003.
[11] Maurice Wilkes.Progress in Computers.Prestige Lecture delivered to IEE, Cambridge, on 5 February 2004

附錄1原理圖

附錄2主要源程序


單片機源程序如下:
  1. #include
  2. #include
  3. #define uchar unsigned char
  4. #define uint  unsigned int

  5. #include "lcd1602.h"

  6. sbit c_send   = P0^7;                            //超聲波發射
  7. sbit c_recive = P0^6;                            //超聲波接收
  8. uchar flag_hc_value;        //超聲波中間變量


  9. bit flag_300ms ;


  10. long distance;                      //距離
  11. uint set_d;                          //距離
  12. bit flag_csb_juli;        //超聲波超出量程
  13. uint  flag_time0;     //用來保存定時器0的時候的

  14. //  按鍵的IO變量的定義
  15. uchar menu_1;        //菜單設計的變量
  16. uchar a_a;

  17. /***********************語音模塊控制IO口的定義************************/
  18. sbit  VSDA = P0^1;
  19. sbit  VCS  = P0^2;
  20. sbit  VSCL = P0^3;
  21. sbit  VRST = P0^4;
  22. sbit  VBUSY= P0^0;            
  23. uchar yujing[3];

  24. /***************************
  25.                  語音地址的安排
  26. 0 - 9 :  對應數字0到9
  27. 0b    : 點
  28. 0c    : 米
  29. 0d    : 已超出量程
  30. ****************************/


  31. /***********************1ms延時函數*****************************/
  32. void delay_1ms(uint q)
  33. {
  34.               uint i,j;
  35.               for(i=0;i<q;i++)
  36.                             for(j=0;j<120;j++);
  37. }

  38. void  delay_us (unsigned int us)
  39. {

  40.               while(us--)
  41.               {
  42.                             _nop_();
  43.               }
  44. }

  45. /***********************三線發碼子程序************************/
  46. void Send_threelines(unsigned char addr)
  47. {
  48.    unsigned char i;
  49.               VRST=0;
  50.               delay_1ms(5);
  51.               VRST=1;
  52.               delay_1ms(20); /* 復位拉高20ms*/
  53.               VCS=0;
  54.               delay_1ms(5);  /* 片選拉低5ms */
  55.     for(i=0;i<8;i++)
  56.               {
  57.                             VSCL=0;
  58.                             if(addr&0x01)
  59.                             {
  60.                                           VSDA=1;
  61.                             }
  62.                             else
  63.                                           VSDA=0;
  64.                             addr>>=1;
  65.                             delay_us(150); /* 150us */
  66.                             VSCL=1;
  67.                             delay_us(150); /* 150us */
  68.               }
  69.               VCS=1;
  70. }

  71. /***********************處理距離函數****************************/
  72. void smg_display()
  73. {
  74.               yujing[0] = distance % 10;            
  75.               yujing[1] = distance / 10 % 10;            
  76.               yujing[2] = distance / 100 % 10;            
  77. }

  78. void delay()
  79. {
  80.               _nop_();                                        //執行一條_nop_()指令就是1us
  81.               _nop_();
  82.               _nop_();
  83.               _nop_();
  84.               _nop_();
  85.               _nop_();
  86.               _nop_();
  87.               _nop_();
  88.               _nop_();
  89.               _nop_();
  90.               _nop_();
  91.               _nop_();
  92.               _nop_();
  93. }


  94. /*********************超聲波測距程序*****************************/
  95. void send_wave()
  96. {
  97.               c_send = 1;                                       //10us的高電平觸發
  98.               delay();
  99.               c_send = 0;            
  100.               TH0 = 0;                                      //給定時器0清零
  101.               TL0 = 0;
  102.               TR0 = 0;                                                          //關定時器0定時
  103.               flag_hc_value = 0;
  104.               while(!c_recive);                              //當c_recive為零時等待
  105.               TR0=1;
  106.               while(c_recive)                                  //當c_recive為1計數并等待
  107.               {
  108.                             flag_time0 = TH0 * 256 + TL0;
  109.                             if((flag_hc_value > 1) || (flag_time0 > 65000))      //當超聲波超過測量范圍時,顯示3個888
  110.                             {
  111.                                           TR0 = 0;
  112.                                           flag_csb_juli = 2;
  113.                                           distance = 888;
  114.                                           flag_hc_value = 0;
  115.                                           break ;                           
  116.                             }
  117.                             else
  118.                             {
  119.                                           flag_csb_juli = 1;            
  120.                             }
  121.               }
  122.               if(flag_csb_juli == 1)
  123.               {            
  124.                             TR0=0;                                                                                                  //關定時器0定時
  125.                             distance = TH0;                                                             //讀出定時器0的時間
  126.                             distance = distance * 256 + TL0;
  127.                             distance +=( flag_hc_value * 65536);//算出超聲波測距的時間              得到單位是ms
  128.                             distance *= 0.017;               // 0.017 = 340M / 2 = 170M = 0.017M 算出來是米
  129.                             if(distance > 350)                                                        //距離 = 速度 * 時間
  130.                             {            
  131.                                           distance = 888;                                                        //如果大于3.8m就超出超聲波的量程
  132.                             }
  133.               }
  134. }


  135. /*********************定時器0、定時器1初始化******************/
  136. void time_init()               
  137. {
  138.               EA  = 1;                              //開總中斷
  139.               TMOD = 0X11;                //定時器0、定時器1工作方式1
  140.               ET0 = 1;                              //開定時器0中斷
  141.               TR0 = 1;                              //允許定時器0定時
  142.               ET1 = 1;                              //開定時器1中斷
  143.               TR1 = 1;                              //允許定時器1定時            
  144. }


  145. uchar value = 8;
  146. void main()
  147. {
  148.               send_wave();              //測距離函數
  149.               smg_display();              //處理距離顯示函數
  150.               time_init();
  151.               init_1602();
  152.               while(1)
  153.               {
  154.                             if(flag_300ms == 1)
  155.                             {
  156.                                           value ++;
  157.                                           if(value >= 12)                            //5秒鐘自動播放一次
  158.                                           {
  159.                                                         value = 0;
  160.                                                         if(distance == 888)
  161.                                                         {
  162.                                                                       Send_threelines(0x0d);                //超出量程
  163.                                                                       delay_1ms(1000);
  164.                                                         }
  165.                                                         else
  166.                                                         {
  167.                                                                       Send_threelines(yujing[2]);                 //語音播放
  168.                                                                       delay_1ms(400);                                                      
  169.                                                                       Send_threelines(0x0b);
  170.                                                                       delay_1ms(400);
  171.                                                                       Send_threelines(yujing[1]);
  172.                                                                       delay_1ms(400);
  173.                                                                       Send_threelines(yujing[0]);
  174.                                                                       delay_1ms(400);
  175.                                                                       Send_threelines(0x0c);
  176.                                                                       delay_1ms(400);
  177.                                                         }
  178.                                           }                                                                                                                                                                                                      
  179.                                           flag_300ms = 0;
  180.                                           send_wave();              //測距離函數
  181.                                           if(menu_1 == 0)
  182.                                                         smg_display();              //處理距離顯示函數
  183. ……………………

  184. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
超聲波測距語音播報論文.doc (1.08 MB, 下載次數: 108)


評分

參與人數 1黑幣 +1 收起 理由
xgang320 + 1 回帖助人的獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:254412 發表于 2017-12-11 14:30 | 只看該作者
很有用謝謝
回復

使用道具 舉報

板凳
ID:260447 發表于 2017-12-11 23:54 來自手機 | 只看該作者
感謝樓主,學習到了
回復

使用道具 舉報

地板
ID:434071 發表于 2018-11-27 11:43 | 只看該作者
感謝6666666666666
回復

使用道具 舉報

5#
ID:434121 發表于 2018-11-27 13:29 | 只看該作者
感謝!樓主6666
回復

使用道具 舉報

6#
ID:444537 發表于 2018-12-12 15:32 | 只看該作者
感謝樓主!!!
回復

使用道具 舉報

7#
ID:352784 發表于 2020-3-25 19:15 | 只看該作者
不完全正確,需要小改幾個地方
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久精品天堂 | 中文字幕亚洲视频 | 色婷婷国产精品综合在线观看 | 中文字幕在线观看一区 | 国产偷录视频叫床高潮对白 | 九九综合 | 亚洲一区二区免费 | 国产精品无码专区在线观看 | 国产精品视频 | 成人老司机| 亚洲精品久久久久久久久久久久久 | 亚洲人成一区二区三区性色 | 日韩网站免费观看 | 狠狠亚洲 | 国产福利在线看 | 国产97色 | 精品久久久久久 | 免费99精品国产自在在线 | 欧美精品一区三区 | 一级黄色片日本 | 精品少妇一区二区三区在线播放 | 天堂久久av| 国产91久久久久久 | 亚洲欧美综合精品久久成人 | 精品久久久久香蕉网 | 久精品视频 | 亚洲一二三区不卡 | 日韩久久久久久久久久久 | 99这里只有精品视频 | 一区二区三区国产精品 | 久久精品色视频 | 91久久婷婷 | 亚洲欧美日韩在线 | 在线看国产 | 综合久久av | 91污在线 | 欧美午夜精品 | www.99精品 | 精品亚洲一区二区三区 | caoporn免费在线视频 | 一区二区三区小视频 |