找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12201|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

帶溫度補(bǔ)償?shù)某暡y距系統(tǒng)單片機(jī)課程設(shè)計(jì)報(bào)告

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:290266 發(fā)表于 2018-4-12 02:30 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
下面是做出來的實(shí)物圖:

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

設(shè)計(jì)報(bào)告


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

班    級(jí):_______141_______________

姓    名:______鄭*_______________

學(xué)    號(hào):____1412*_____________  

評定成績:____________________________



摘要

在日常生活和工業(yè)控制中,經(jīng)常會(huì)需要進(jìn)行位置監(jiān)控和距離測量,超聲波測距就是其中的一種方法,由于聲音的傳播速度和溫度有關(guān),因此,超聲波測距的精度受溫度影響比較大,要實(shí)現(xiàn)高精度的超聲波測距,須考慮溫度變化對聲速的影響,從而進(jìn)行必要的補(bǔ)償。本文以AT89S52 單片機(jī)為核心,設(shè)計(jì)了一種帶溫度補(bǔ)償?shù)某暡y距系統(tǒng)。系統(tǒng)包括單片機(jī)、超聲波發(fā)射及接收模塊、溫度補(bǔ)償模塊、信息顯示模塊。溫度補(bǔ)償模塊采用溫度傳感器DSl8B20 采集環(huán)境溫度,根據(jù)超聲波速度與溫度值的對應(yīng)關(guān)系及時(shí)修正波速,以糾正溫度的變化引起超聲波測距系統(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)常會(huì)需要進(jìn)行位置監(jiān)控和距離測量,可用的方法很多,有激光測距、雷達(dá)測距、超聲波測距。與微波雷達(dá)測距、激光測距相比,超聲波具有方向指向性強(qiáng)、能量消耗比較緩慢、在介質(zhì)中的傳播距離比較遠(yuǎn)等優(yōu)點(diǎn)。但是,由于聲音的傳播速度和溫度有關(guān),一般情況下,溫度每變化1℃,聲速會(huì)變化大約0. 61 m/s。因此,超聲波測距的精度受溫度影響比較大,要實(shí)現(xiàn)高精度的超聲波測距,須考慮溫度變化對聲速的影響,從而進(jìn)行必要的補(bǔ)償。

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

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

課題設(shè)計(jì)要求:

具體要求為:

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

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

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

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

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

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

方案一:

         

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

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

方案二:

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

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

超聲波時(shí)序圖如下:

   

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

1)溫度傳感器DS18B20

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



  • 超聲波模塊HCSR04


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

                       VCC              Trig   Echo   GND

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

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

(2)模塊自動(dòng)發(fā)送8 個(gè)40khz 的方波,自動(dòng)檢測是否有信號(hào)返回;

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

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

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

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

1)溫度測量模塊


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

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

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

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

  • 軟件設(shè)計(jì)流程圖:
                                       
主函數(shù)流程圖

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

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


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

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

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

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


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


      

  

   

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

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

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

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

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

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

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

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


單片機(jī)源程序如下:
  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



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

使用道具 舉報(bào)

沙發(fā)
ID:666657 發(fā)表于 2019-12-18 00:54 來自手機(jī) | 只看該作者
超聲波測距
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表