基于DS18B20的傳感器課程設計_第1頁
基于DS18B20的傳感器課程設計_第2頁
基于DS18B20的傳感器課程設計_第3頁
基于DS18B20的傳感器課程設計_第4頁
基于DS18B20的傳感器課程設計_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)字溫度傳感器余曉聰電子科學系 08電科2班 080702236摘 要:本文介紹了基于單片機stc89c52的溫度測量系統(tǒng)的設計方案與硬件實現(xiàn)。采用溫度傳感器ds18b20采集溫度數(shù)據(jù),數(shù)碼管顯示溫度數(shù)據(jù),按鍵設置溫度上下限?;谶@個基礎上可以用于各種溫度的控制,如溫控飲水機、風扇、咖啡機、冰箱、空調等。關鍵子:單片機;數(shù)字溫度傳感器引 言隨著社會的發(fā)展,溫度的測量及控制越來越重要。本文采用單片機stc89c52設計了溫度實時測量系統(tǒng)。單片機能夠根據(jù)溫度傳感器ds18b20所采集的溫度數(shù)據(jù)來控制其他操作。從而把溫度控制在設定的范圍內。所有的溫度數(shù)據(jù)通過數(shù)碼管顯示。此方法能對溫度進行精確有效的控

2、制。通過對單片機進行編程能減少電路的復雜性進行更多的控制。正 文1 系統(tǒng)總體設計系統(tǒng)主要包括單片機模塊、溫度采集模塊、溫度顯示模塊,溫度上下限調整模塊等四部分。系統(tǒng)總體框架如圖1所示。單片機處理模塊溫度采集模塊溫度顯示模塊溫度上下限調整模塊圖1 系統(tǒng)總體框架報警模塊2 單元模塊21單片機處理模塊處理模塊是整個設計方案的核心,它控制了溫度的采集、處理與顯示、溫度上下限值的設定。本文采用stc89c52rc作為處理模塊。這是stc公司推出的8051系列微處理器。它的特點是價格低、功耗低、高可靠、無法解密,內部flash擦寫次數(shù)為100,000次以上。圖2是該芯片的引腳圖。圖2 stc89c52引腳

3、圖 圖3是stc89c52的最小系統(tǒng)。圖322溫度采集模塊溫度由dallas 半導體公司的一線數(shù)字化溫度傳感器ds18b20采集。ds18b20測溫范圍為-55+125,測溫分辨率可達0.0625,被測溫度用16位二進制形式串行輸出。用戶設定的上下限溫度儲存在eeprom中,掉電后依然保存。cpu只需一根端口線就能與諸多ds18b20通信。占用微處理器的端口少,可節(jié)省大量的引線和邏輯電路。圖4為ds18b20的引腳圖。圖4 ds18b20是通過一種片上溫度測量技術來測量溫度的。圖5示出了溫度測量電路的方框圖。圖5由圖5可知ds18b20用一個高溫度系數(shù)的振蕩器確立一個門周期,內部計數(shù)器在這個門

4、周期內對一個低溫度系數(shù)的振蕩器的脈沖進行計數(shù)來得到溫度值。計數(shù)器被預置到對應與-55的一個值。如果計數(shù)器在門周期結束前到達0,則溫度寄存器(同樣被預置到-55)的值增加,表明所測的溫度大于-55。同時計數(shù)器被復位到一個值,這個值由斜坡式累加器電路確定,斜坡式累加器電路用來補償感溫振蕩器的拋物線特性。然后計數(shù)器又開始計數(shù)直到0,如果門周期仍未結束,將重復這一過程。斜坡式累加器用來補償感溫振蕩器的非線性,以及在測溫時獲得比較高的分辨力。這是通過改變計數(shù)器對溫度每增加一度所需計數(shù)的值來實現(xiàn)的。因此,要想獲得所需的分辨力,必須同時知道給定溫度下計數(shù)器的值和每一度的計數(shù)值。ds18b20內部對此計算的結

5、果可提供0.0625的分辨力。溫度以16bit帶符號位擴展的二進制補碼形式讀出。表1給出了溫度值和輸出數(shù)據(jù)的關系。 表1溫度數(shù)據(jù)輸出(二進制)數(shù)據(jù)輸出(十六進制)+1250000 0111 1101 000007d0+25.06250000 0001 1001 00010191+0.50000 0000 0000 1000000800000 0000 0000 00000000-0.51111 1111 1111 1000fff8-25.06251111 1110 0110 1111ffce-551111 1100 1001 0000fc90二進制的低四位是小數(shù)數(shù)據(jù),高五位是符號位。正溫度時,

6、讀到的16位數(shù)據(jù)乘以0.0625就可以得到實際溫度。若是負溫度則要把讀到的數(shù)據(jù)按位取反再加1,之后按正溫度轉換,前面加符號就行了。另一種轉換方法就是分離出低四位,中間七位和高五位。低四位乘以0.0625就可以得到小數(shù)部分的值,中間八位直接就是整數(shù)部分的值。高四位就是判斷符號的。 ds18b20內部有一個9字節(jié)的高速存儲器用于存儲溫度值。其中前兩個字節(jié)是測得的溫度數(shù)據(jù),第一個字節(jié)的內容是溫度的低八位,第二個字節(jié)是溫度的高八位,第三和第四字節(jié)是溫度上限th與溫度下限tl的易失性拷貝,第五字節(jié)是結構寄存器的易失性拷貝,第6,7,8這三個字節(jié)用于內部計算,第九個字節(jié)是冗余檢驗字節(jié)crc,可用來保證通信

7、的正取性。當溫度轉換命令發(fā)出后,經轉換所得的溫度值以二字節(jié)補碼形式存放在此存儲器的第1和第2個字節(jié)。單片機可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后。通過單線總線端口訪問ds18b20的協(xié)議如下:初始化、rom操作命令、存儲器操作命令、執(zhí)行/數(shù)據(jù)。rom操作命令:read rom 33h 這個命令允許總線控制器讀到ds18b20的8位系列編碼、唯一的序列號和8位crc碼。只有在總線上存在單只ds18b20的時候才能使用這個命令。如果總線上不止一個從機時,當所有從機試圖同時傳送信號時就會發(fā)生數(shù)據(jù)沖突。match rom 55h 匹配rom命令,后跟64位rom序列,讓總線控制器在多點總線

8、上定位一只特定的ds18b20。只有和64為rom序列完全匹配的ds18b20才能響應隨后的儲存操作命令。skip rom cch 這條命令允許總線控制器不用提供64位rom編碼就使用儲存器操作命令,在單點總線情況下用以節(jié)省時間。如果總線上不止一個從機,在skip rom命令之后跟著發(fā)一條讀命令,由于多個從機同時傳送信號,總線上就會發(fā)生數(shù)據(jù)沖突。search rom f0h 當一個系統(tǒng)初次啟動時,總線控制器可能不知道單線總線上有多少器件或它們的64位rom編碼。搜索rom命令允許總線控制器用排除法識別總線上的所有從機的64位編碼。alarm search ech 這條命令的流程圖和search

9、 rom相同。然而,只有在最近一次測溫后遇到符合報警條件的情況,ds18b20才會響應這條命令。表2為命令設置。 表2命令說明協(xié)議單線總線發(fā)出協(xié)議后溫度轉換命令convert t開始溫度轉換44h<讀溫度忙狀態(tài)>存儲器命令read scratchpad讀取暫存器和crc字節(jié)beh<讀數(shù)據(jù)直到9字節(jié)>writeschratchpad把字節(jié)寫入暫存器的地址2和3(th和tl溫度報警促發(fā))4eh<寫兩個字節(jié)到地址2和3>copy scratchpad把暫存器內容拷貝到非易失性存儲器中(僅指地址2和3)48h<讀拷貝狀態(tài)>recall e2把非易失性存儲

10、器中的值召回暫存器(溫度報警觸發(fā))b8h<讀溫度忙狀態(tài)>read power supply標識ds18b20的供電模式b4h<讀供電狀態(tài)>ds18b20具體的命令和時序圖請參考文獻1。圖6為ds18b20的電路連接圖。圖6ds18b20有兩種供電接法,圖6采用的是接入外部電源。這樣做的好處是i/o線上不需要加強上拉,而且總線控制器用在溫度轉換期間總保持高電平。這樣在轉換期間可以允許在單線總線上進行其他數(shù)據(jù)的往來。另外,在單總線上可以掛任意多片ds18b20,而且如果它們都使用外部電源的話,就可以先發(fā)一個skip rom命令,再接一個convert t命令,讓它們同時進行

11、溫度轉換。注意當加上外部電源時,gnd引腳不能懸空。23溫度顯示模塊由于此文重在說明ds18b20的功能及使用,所以顯示部分就采用簡單的數(shù)碼管顯示。只顯示兩位整數(shù)和一位小數(shù),負溫度就不顯示了。圖6為數(shù)碼管的連接圖。圖724溫度上下限調整模塊圖7為溫度上下限調整模塊。圖8所選按鍵是輕觸開關。按一次s1后,會在數(shù)碼管顯示ds18b20內儲存的溫度上限。按第2次后就能調節(jié)溫度的上限,通過s3和s4來調節(jié)。按下第3次后恢復到溫度的顯示。s2是調節(jié)溫度下限的。操作方法和s1一樣。25報警電路該模塊只是用發(fā)光二極管表示。燈亮就報警。如圖9圖93 總體原理圖 圖10為電路的總體原理圖。圖10圖104 程序本

12、程序是采用c語言寫的。/*功能說明按s1查看溫度上下限按s2、s3可改變上下限,按s2減1,按s3加1如果實際溫度超過上下限或18b20不存在,則報警*/#include <reg52.h> #include <intrins.h>#define uint unsigned int#define uchar unsigned char#define flag1 f0 /18b20存在標志sbit io=p22;sbit key1=p10;/查看溫度上下限sbit key2=p11;/ 減1sbit key3=p12;/ 加1 sbit wei1=p21;/第一個數(shù)碼管位

13、選sbit wei2=p23;/第二個數(shù)碼管位選sbit wei3=p24;/第三個數(shù)碼管位選sbit bj=p25;uchar count;/key1按下的次數(shù)uchar code disp=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/ uchar code xiaoshu16=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;uchar a,b,h,l;/從ds18b20讀出來的數(shù)據(jù)uchar shi,ge,xiao,temp;uchar delay1;/作延時用void delay(uint i); /延時11us

14、*ivoid deal_with();void display();void reset();uchar read();/讀一個字節(jié)void write(uchar dat); /寫一個字節(jié)到ds18b20/void beep(); /報警void keyscan();void set();/改變溫度上下限和精度void copy();/復制溫度上下限到romvoid check(); /把當前溫度與上下限比較void main() while(1) reset();/改變上下限和精度 while(flag1) /beep(); /報警reset(); reset(); write(0xcc)

15、;/ 跳過讀序號列號的操作 write(0x44); / 啟動溫度轉換 reset(); write(0xcc);/ 跳過讀序號列號的操作 write(0xbe); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度 a=read();/溫度低位 b=read();/溫度高位 h=read();/溫度上限 l=read();/溫度下限 if(count=0) /如果無鍵按下 deal_with(); display(); keyscan(); check(); void delay(uint i) /延時11us *iwhile(i-);void deal_with()b=b<<

16、;4;/舍棄符號位 xiao=a;a=a>>4;/舍棄小數(shù)xiao=xiao&0x0f;/得到小數(shù)temp=b|a; /得到溫度整數(shù)部分shi=temp/10;ge=temp%10;void display()uchar d;wei1=0;wei2=0;wei3=0;p0=dispshi;wei1=1;wei2=0;wei3=0;delay(100);wei1=0;wei2=0;wei3=0;d=dispge;p0=d&0x7f;/顯示小數(shù)點 wei1=0;wei2=1;wei3=0;delay(100); wei1=0;wei2=0;wei3=0;p0=dispx

17、iaoshuxiao;wei1=0;wei2=0;wei3=1;delay(100);void reset()/改變上下限和精度函數(shù)flag1=1; io=1; delay(8); /稍做延時 io=0; delay(80);/延時大于480us io=1; delay(6); flag1=io;/如果flag是0,則初始化成功 delay(20);uchar read()/讀一個字節(jié)uchar k,dat=0;for(k=0;k<8;k+)io=0; dat>>=1;io=1;if(io)dat=dat|0x80;delay(4);return dat;void write

18、(uchar dat) /寫一個字節(jié)到ds18b20uchar j;for(j=0;j<8;j+)io=0;dat=dat>>1; /把dat的最低位送到io口io=cy;delay(5);io=1;delay1=1;/延時2usdelay(4);void beep()/報警函數(shù)uchar i;for(i=0;i<50;i+)delay(100);bj=0; bj=1; void keyscan()p1=0xff;if(p1!=0xff)display();/去抖if(p1!=0xff)if(key1=0)count+;/key1按下的次數(shù)if(count=3)count=0;if(key2=0)/減一if(count=0);else if(count=1)h-;/溫度上限set();/改變上下限溫度和精度copy();/復制溫度上下限到romelse if(count=2)l-;/溫度下限set();copy();if(key3=0)/加一if(count=0);else if(count=1)h+;set();copy();else if(count=2)l+;set();copy();p1=0xff;/清零while(p

溫馨提示

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

最新文檔

評論

0/150

提交評論