標(biāo)題: 帶溫度補償?shù)某暡y距系統(tǒng)單片機課程設(shè)計報告 [打印本頁]

作者: 51hei小明    時間: 2018-4-12 02:30
標(biāo)題: 帶溫度補償?shù)某暡y距系統(tǒng)單片機課程設(shè)計報告
下面是做出來的實物圖:

傳感與檢測技術(shù)課程設(shè)計

設(shè)計報告


項    目:帶溫度補償?shù)某暡y距系統(tǒng)設(shè)計

班    級:_______141_______________

姓    名:______鄭*_______________

學(xué)    號:____1412*_____________  

評定成績:____________________________



摘要

在日常生活和工業(yè)控制中,經(jīng)常會需要進(jìn)行位置監(jiān)控和距離測量,超聲波測距就是其中的一種方法,由于聲音的傳播速度和溫度有關(guān),因此,超聲波測距的精度受溫度影響比較大,要實現(xiàn)高精度的超聲波測距,須考慮溫度變化對聲速的影響,從而進(jìn)行必要的補償。本文以AT89S52 單片機為核心,設(shè)計了一種帶溫度補償?shù)某暡y距系統(tǒng)。系統(tǒng)包括單片機、超聲波發(fā)射及接收模塊、溫度補償模塊、信息顯示模塊。溫度補償模塊采用溫度傳感器DSl8B20 采集環(huán)境溫度,根據(jù)超聲波速度與溫度值的對應(yīng)關(guān)系及時修正波速,以糾正溫度的變化引起超聲波測距系統(tǒng)產(chǎn)生的誤差。


Abstract

In daily life and industrial control, often need to position control and distance measurement is one of the ways of ultrasonic ranging, due to the speed of sound and temperature, therefore, ultrasonic ranging accuracy is affected by temperature is relatively large, in order to achieve high precision ultrasonic ranging, must consider the influence of temperature change on the speed of sound thus, the necessary compensation. Based on the AT89S52 microcontroller as the core, designed a kind of ultrasonic ranging system with temperature compensation. The system consists of microcomputer, ultrasonic transmitting and receiving module, temperature compensation module and information display module. A temperature compensation module with temperature sensor D Sl8B20 collecting temperature, velocity correction in time according to the corresponding relationship between ultrasonic velocity and temperature, changes in temperature caused by the error correction of ultrasonic ranging system.


一、前言

課題背景:

在日常生活和工業(yè)控制中,經(jīng)常會需要進(jìn)行位置監(jiān)控和距離測量,可用的方法很多,有激光測距、雷達(dá)測距、超聲波測距。與微波雷達(dá)測距、激光測距相比,超聲波具有方向指向性強、能量消耗比較緩慢、在介質(zhì)中的傳播距離比較遠(yuǎn)等優(yōu)點。但是,由于聲音的傳播速度和溫度有關(guān),一般情況下,溫度每變化1℃,聲速會變化大約0. 61 m/s。因此,超聲波測距的精度受溫度影響比較大,要實現(xiàn)高精度的超聲波測距,須考慮溫度變化對聲速的影響,從而進(jìn)行必要的補償。

國內(nèi)外發(fā)展現(xiàn)狀:

近十年來,國內(nèi)科研人員在超聲波回波信號處理方法、新型超聲波換能器研發(fā)、超聲波發(fā)射脈沖選取等方面進(jìn)行了大量理論分析與研究,并針對超聲測距的常見影響因素提出溫度補償、接收回路串入自動增益調(diào)節(jié)環(huán)節(jié)等提高超聲波測距精度的措施。目前國產(chǎn)低功率超聲波探頭,一般不能用于探測15m以外的物體,美國AIRMAR公司生產(chǎn)的Airducer AR30超聲波傳感器的作用距離可達(dá)30m,但價格較高。隨著傳感器和單片機控制技術(shù)的不斷發(fā)展,非接觸式檢測技術(shù)已被廣泛應(yīng)用于多個領(lǐng)域。

課題設(shè)計要求:

具體要求為:

1)利用超聲波傳感器實現(xiàn)非接觸式測距,并用溫度傳感器進(jìn)行超聲波補償。要求學(xué)生在查閱各傳感器資料及其應(yīng)用方法的基礎(chǔ)上,設(shè)計出硬件結(jié)構(gòu)圖。

2)掌握根據(jù)硬件結(jié)構(gòu)圖設(shè)計并繪制硬件電路圖,并搭建、安裝和制作硬件。

3)掌握利用各種儀器設(shè)備,如萬用表、示波器等,對硬件進(jìn)行調(diào)試的基本方法

4)記錄實驗數(shù)據(jù),采用數(shù)據(jù)處理方法和相關(guān)軟件對實驗數(shù)據(jù)進(jìn)行處理并加以分析,與真實數(shù)據(jù)結(jié)果對比,得出有意義的結(jié)論。

二、整體方案設(shè)計

系統(tǒng)方案結(jié)構(gòu)框圖:

方案一:

         

系統(tǒng)工作原理和功能:

本系統(tǒng)工作時,由單片機提供 40 k Hz 的脈沖信號,經(jīng)放大后通過超聲波發(fā)射器輸出。超聲波在空氣中傳播,在到達(dá)被測物體時被反射回來,由超聲波接收器接收。當(dāng)超聲波接收器接收到反射波時,先經(jīng)放大器放大,用鎖相環(huán)電路檢波處理后產(chǎn)生一個負(fù)跳變,在 INT0 產(chǎn)生一個中斷請求信號,單片機響應(yīng)外部中斷請求,執(zhí)行外部中斷服務(wù)程序。單片機在啟動發(fā)射電路時同時啟動單片機內(nèi)部的定時器 T0,利用定時器記錄超聲波發(fā)射的時間和收到反射波的時間。在外部中斷程序中讀取時間差,計算距離。其中溫度補償環(huán)節(jié)為:溫度補償環(huán)節(jié),設(shè)超聲波速度為v,往返時間為 t,溫度為 T,v = 331.5 + 0. 61T,距離為速度除以二可得。

方案二:

系統(tǒng)工作原理和功能:

接口向觸發(fā)引腳發(fā)送≥10 μs 的脈沖觸發(fā)信號,該模塊內(nèi)部將發(fā)出 8 個 40 kHz 周期電平并檢測回波,一旦檢測到有回波信號,則 3 腳輸出回響信號,所測的距離與回響信號的脈沖寬度成正比,由此可通過發(fā)射信號到收到回響信號的時間間隔計算得到距離。

超聲波時序圖如下:

   

方案比較選擇:有系統(tǒng)總體框圖可以看出方案二的結(jié)構(gòu)更為簡單,而且HC-SR04模塊將超聲波發(fā)射、接收電路集成在一起,使用方便,價格也便宜,所以選擇方案二。
三、傳感器工作原理

1)溫度傳感器DS18B20

       DS18B20的引腳圖如右圖所示:其中UDD接電源,GND接地,I/O為數(shù)據(jù)輸入/輸出口。                                                  
DS18B20的讀寫時序和測溫原理與DS1820相同,只是得到的溫度值的位數(shù)因分辨率不同而不同,且溫度轉(zhuǎn)換時的延時時間由2s減為750ms。 DS18B20測溫原理如圖所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號送給計數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號作為計數(shù)器2的脈沖輸入。計數(shù)器1和溫度寄存器被預(yù)置在-55℃所對應(yīng)的一個基數(shù)值。計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計數(shù),當(dāng)計數(shù)器1的預(yù)置值減到0時,溫度寄存器的值將加1,計數(shù)器1的預(yù)置將重新被裝入,計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計數(shù),如此循環(huán)直到計數(shù)器2計數(shù)到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即為所測溫度。圖中的斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正計數(shù)器1的預(yù)置值。





HC-SR04模塊的引腳圖如圖所示:

                       VCC              Trig   Echo   GND

Vcc、 Trig(控制端)、 Echo(接收端)、 Gnd,工作原理如下:

(1)采用IO 觸發(fā)測距,給至少10us 的高電平信號;

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

(3)有信號返回,通過IO 輸出一高電平,高電平持續(xù)的時間就是

(4)超聲波從發(fā)射到返回的時間.測試距離=(高電平時間*聲速)/2;

四、硬件電路設(shè)計

整體硬件設(shè)計原理圖如下圖所示:

1)溫度測量模塊


溫度測量選擇DS18B20,單片機口接 DS18B20 數(shù)據(jù)總線,控制 DS18B20 進(jìn)行溫度轉(zhuǎn)換和傳輸數(shù)據(jù),數(shù)據(jù)總線接10kΩ的上拉電阻,作用是使總線控制器在溫度轉(zhuǎn)換期間無需一直保持高電平。DS18B20 protel 硬件圖如右圖所示。

本次設(shè)計采用HC-SR04模塊,采用單片機IO 觸發(fā)測距,給至少10us 的高電平信號;模塊自動發(fā)送8 個40khz 的方波,自動檢測是否有信號返回;有信號返回,通過IO 輸出一高電平,高電平持續(xù)的時間就是超聲波從發(fā)射到返回的時間.測試距離=(高電平時間*聲速)/2;HC-SR04硬件protel圖如下圖所示:

本次顯示用到數(shù)碼管為共陰極數(shù)碼管,顯示內(nèi)容為溫度值和檢測的距離值,單片機控制其段選碼和位選碼就能控制數(shù)碼管的點亮情況,同時本次試驗所用的數(shù)碼管的顯示方式為動態(tài)顯示。數(shù)碼管的protel硬件圖如下圖所示:

五、軟件設(shè)計及仿真調(diào)試

                                       
主函數(shù)流程圖

               
加入溫度傳感和超聲波模塊后的流程
由于在proteus軟件中找不到超聲波傳感器,所以就用了一個方波作為單片機接收到的回響信號,仿真結(jié)果如下圖所示:
圖中左邊顯示的是溫度29度,右邊顯示的是測得的距離290cm。

改變回響信號頻率或改變溫度值,測得的距離也將不同,如下圖所示:


增大回響信號頻率,顯示結(jié)果如下:

增大溫度值,顯示結(jié)果如下:

同時還可以用示波器觀察發(fā)射信號和回響信號波形,如下圖所示:

圖中黃色的代表發(fā)射信號脈沖(20us左右),紅色代表回響信號波形。


最后做出的硬件調(diào)試結(jié)果如圖所示:左邊顯示的是補償前的距離,右邊顯示的是補償后的距離


      

  

   

由上圖可以看出溫度對超聲波測距有影響,而且隨著距離的增大,所補償?shù)木嚯x也越多,這是因為距離越大,超聲波傳播時間也越長,這樣溫度對聲速的變化也會凸顯出來。

六、設(shè)計總結(jié)及改進(jìn)思路

    1)系統(tǒng)技術(shù)特點:

本次課程設(shè)計采用HC-SR04超聲波測距模塊測出距離,考慮到溫度對聲速的影響,需要將溫度值檢測出來,然后修正聲速值,單片機發(fā)送一個大于10us的發(fā)射脈沖,然后檢測HC-SR04模塊的回響信號的高電平時間,測試距離=(高電平時間*聲速)/2,然后將距離值同數(shù)碼管顯示出來。

     2)技術(shù)層面的改進(jìn):

本次課程設(shè)計顯示模塊采用的是數(shù)碼管,實驗時發(fā)現(xiàn)顯示時會出現(xiàn)閃爍問題,還存在顯示空間不足的缺陷,8位數(shù)碼管只能顯示溫度值和補償后的距離值,或者顯示補償前后的距離值,因此可以采用lcd液晶顯示,既解決了顯示閃爍的問題,又有足夠的空間顯示。

    為期將近三天的傳感及檢測課程設(shè)計,在克服一個又一個困難的過程中,鞏固了我們所學(xué)的理論知識,還培養(yǎng)我的實際動手能力,還培養(yǎng)我們在實際的工程設(shè)計中查閱專業(yè)資料、工具書或參考書,掌握工程設(shè)計手段和軟件工具,并能用設(shè)計報告表達(dá)設(shè)計思想和結(jié)果的能力。

這次課程設(shè)計不僅培養(yǎng)了我的設(shè)計思想和仿真及編寫程序的能力,更檢驗了我對本門課學(xué)習(xí)的情況,培養(yǎng)我們嚴(yán)肅認(rèn)真的學(xué)習(xí)態(tài)度。過程中我通過集體討論設(shè)計方法、設(shè)計步驟等問題,使我感受到團隊合作的重要性。真正做到理論聯(lián)系實際,提高動手能力和分析問題、解決問題的能力,并能用設(shè)計報告表達(dá)設(shè)計思想和結(jié)果的能力正是我們這次課程設(shè)計的目的。


單片機源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #include <intrins.h>
  5. sbit RX=P2^1;
  6. sbit TX=P2^0;
  7. unsigned long  time=0;
  8. unsigned int  timer=0;
  9. unsigned char posit=0;
  10. unsigned long S=0;
  11. unsigned long S0=0;
  12. uchar c[7];
  13. uint temp;// variable of temperature
  14. uint t;
  15. float v;
  16. bit flag1;            // sign of the result positive or negative
  17. bit flag =0;
  18. sbit  DS=P2^2;           //define interface
  19. sbit  dula=P2^6;
  20. sbit  wela=P2^7;
  21. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  22.                         0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  23. unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
  24.                         0x87,0xff,0xef};
  25. unsigned char code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

  26. void delay(uint count)      //delay
  27. {
  28.   uint i;
  29.   while(count)
  30.   {
  31.     i=200;
  32.     while(i>0)
  33.     i--;
  34.     count--;
  35.   }
  36. }
  37. void dsreset(void)       //send reset and initialization command
  38. {
  39.   uint i;
  40.   DS=0;
  41.   i=103;
  42.   while(i>0)i--;
  43.   DS=1;
  44.   i=4;
  45.   while(i>0)i--;
  46. }

  47. bit tmpreadbit(void)       //read a bit
  48. {
  49.    uint i;
  50.    bit dat;
  51.    DS=0;i++;          //i++ for delay
  52.    DS=1;i++;i++;
  53.    dat=DS;
  54.    i=8;while(i>0)i--;
  55.    return (dat);
  56. }

  57. uchar tmpread(void)   //read a byte date
  58. {
  59.   uchar i,j,dat;
  60.   dat=0;
  61.   for(i=1;i<=8;i++)
  62.   {
  63.     j=tmpreadbit();
  64.     dat=(j<<7)|(dat>>1);
  65.   }
  66.   return(dat);
  67. }

  68. void tmpwritebyte(uchar dat)   //write a byte to ds18b20
  69. {
  70.   uint i;
  71.   uchar j;
  72.   bit testb;
  73.   for(j=1;j<=8;j++)
  74.   {
  75.     testb=dat&0x01;
  76.     dat=dat>>1;
  77.     if(testb)     //write 1
  78.     {
  79.       DS=0;
  80.       i++;i++;
  81.       DS=1;
  82.       i=8;while(i>0)i--;
  83.     }
  84.     else
  85.     {
  86.       DS=0;       //write 0
  87.       i=8;while(i>0)i--;
  88.       DS=1;
  89.       i++;i++;
  90.     }

  91.   }
  92. }

  93. void tmpchange(void)  //DS18B20 begin change
  94. {
  95.   dsreset();
  96.   delay(1);
  97.   tmpwritebyte(0xcc);  // address all drivers on bus
  98.   tmpwritebyte(0x44);  //  initiates a single temperature conversion
  99. }

  100. uint tmp()               //get the temperature
  101. {
  102.   float tt;
  103.   uchar a,b;
  104.   dsreset();
  105.   delay(1);
  106.   tmpwritebyte(0xcc);
  107.   tmpwritebyte(0xbe);
  108.   a=tmpread();
  109.   b=tmpread();
  110.   temp=b;
  111.   temp<<=8;             //two byte  compose a int variable
  112.   temp=temp|a;
  113.   tt=temp*0.0625;
  114.   temp=tt*10+0.5;
  115.   return temp;
  116. }

  117. /*void zh(uint temp)
  118. {
  119.    uchar A1,A2,A2t,A3;
  120.    A1=temp/100;
  121.    A2t=temp%100;
  122.    A2=A2t/10;
  123.    A3=A2t%10;
  124.    c[0]=table[A1];
  125.    c[1]=table1[A2];
  126.    c[2]=table[A3];

  127. }*/
  128.     void Conut()
  129. {
  130. ime=TH0*256+TL0;
  131. time=time*12/11.0592;
  132. TH0=0;
  133. TL0=0;
  134. v=331.5+0.607*t;
  135. S0=(long)(0.17*time);
  136. S= (long)(time*v/2000);     //??????CM
  137. if((S>=4000)||flag==1) //
  138. {            
  139. flag=0;
  140.                             S=0;
  141. //c[4]=0x30;
  142. //c[5]=0x50;
  143.               //c[6]=0x50;
  144. //              c[7]=0x79;
  145.                            
  146.               }
  147. else
  148. {
  149. c[4]=table[S%10000/1000];
  150. c[5]=table[S%1000/100];
  151. c[6]=table1[S%100/10];
  152. c[7]=table[S%10/1];
  153. c[0]=table[S0%10000/1000];
  154. c[1]=table[S0%1000/100];
  155. c[2]=table1[S0%100/10];
  156. c[3]=table[S0%10/1];
  157.                 }
  158. }

  159. /********************************************************/
  160.    void  zd3()  interrupt 3                             //T1
  161.   {
  162. TH1=0xf8;
  163. TL1=0x30;
  164. timer++;
  165. if(timer>=100)
  166. {
  167. timer=0;
  168. flag1=1;
  169.             
  170. }
  171.   }
  172. void zd0() interrupt 1
  173.   {
  174.     flag=1;
  175.   }

  176. void hc_sr04()
  177. {
  178. TX=1;                                                          //800MS
  179. _nop_();
  180. _nop_();
  181. _nop_();
  182. _nop_();
  183. _nop_();
  184. _nop_();
  185. _nop_();
  186. _nop_();
  187. _nop_();
  188. _nop_();
  189. _nop_();
  190. _nop_();
  191. _nop_();
  192. _nop_();
  193. _nop_();
  194. _nop_();
  195. _nop_();
  196. _nop_();
  197. _nop_();
  198. _nop_();
  199. _nop_();
  200. TX=0;
  201. …………
  202. …………
  203. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載(下文底部可下載完整的word格式論文+原理圖):
http://www.torrancerestoration.com/bbs/dpj-112538-1.html




作者: cyh1323    時間: 2019-12-18 00:54
超聲波測距




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1