摘 要:探討工業(yè)場合溫度測量處理方法及系統(tǒng)構(gòu)成。根據(jù)數(shù)字溫度傳感器DS18B20的特點,構(gòu)成溫度測量系統(tǒng)。利用簡單的接口與單片機(jī)組成一個溫度測量系統(tǒng),通過鍵盤和LED顯示數(shù)碼管對系統(tǒng)進(jìn)行控制和顯示,給出用DS18B20和AT89C51單片機(jī)構(gòu)成的溫度測量系統(tǒng)的應(yīng)用電路和參考程序。利用DS18B20的單總線結(jié)構(gòu),占用系統(tǒng)的端口少,非常適合遠(yuǎn)距離多點溫度檢測系統(tǒng)。
關(guān)鍵詞:DS18B20;AT89C51;溫度;測量
中圖分類號:TP212 文獻(xiàn)標(biāo)識碼:B
文章編號:1004-373X(2008)10-157-03
Temperature Measurement System Based on DS18B20
ZHAO Yongjie1,XU Yuan2
(1.Nanyang Radio and TV University,Nanyang,473066,China;2.Nanyang Institute of Technology,Nanyang,473004,China)
Abstract:Exploring the methods and system structure of temperature measurement in industrial situation.Methods Forming temperature measurement system by means of digital temperature sensor DS18B20.Creating a temperature measurement system by using simple I/O port and single chip microcomputer which has keyboard and LED,and providing the applied circuit and reference program by means of DS18B20 and AT89C51.According to the structure characteristics of DS18B20,which occupy less system ports.This temperature measurement system is appropriate to temperature test system based on long-distance and multi-ports.
Keywords:DS18B20;AT89C51;temperature;measurement
在許多工業(yè)場合中都要進(jìn)行溫度檢測和溫度控制,常用方法是采用溫度傳感進(jìn)行檢測,配合單片機(jī)進(jìn)行控制。DS18B20是美國DALLAS公司生產(chǎn)的“一線總線”接口的數(shù)字化傳感器,他具有微型化、低功耗、抗干擾能力強(qiáng)、易與微處理器接口等優(yōu)點,可直接將溫度轉(zhuǎn)化成串行數(shù)字信號供微處理器接收處理。利用這種溫度傳感器構(gòu)成的溫度測量系統(tǒng)電路非常簡單、易于實現(xiàn),并且適用于幾乎所有類型的單片機(jī)。
1 DS18B20介紹
1.1 DS18B20功能特點
DS18B20功能特點:3.0~5.5 V單電源供電;微型化、低功耗、抗干擾能力強(qiáng)、易與微處理器接口;溫度測量范圍為-55~+125 ℃,測溫分辨率可達(dá)0.5 ℃;3引腳TO-92小體積封裝或8引腳μSOP封裝;可編程為9~12位A/D轉(zhuǎn)換精度;只需一根端口線就能與微處理器通訊;每只DS18B20有惟一的序列號并可存入其ROM中,便于實現(xiàn)多芯片多點測量;在使用中不需要任何外圍元件;用戶可自設(shè)定非易失性的報警上下限值。
1.2 DS18B20引腳功能
DS18B20引腳分布如圖1所示。
1.3 DS18B20內(nèi)部結(jié)構(gòu)
DS18B20內(nèi)部由64位閃速ROM、觸發(fā)器TH和TL、高速暫存存儲器、配置寄存器和8位CRC發(fā)生器等組成。
圖1DS18B20引腳
(1) 64位閃速ROM的結(jié)構(gòu)如下:
8位檢驗CRC48位序列號8位工廠代碼
開始8位是產(chǎn)品類型的編號,接著是每個器件的惟一的序號,共有48位,最后8位是前56位的CRC校驗碼,這也是多個DS18B20可以采用一線進(jìn)行通信的原因。
(2) 非易失性溫度報警觸發(fā)器TH和TL,可通過軟件寫入用戶報警上下限。
(3) 高速暫存存儲器:
DS18B20溫度傳感器的內(nèi)部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的E2PROM。后者用于存儲TH,TL值,數(shù)據(jù)先寫入RAM,經(jīng)校驗后再傳給E2PROM。而配置寄存器為高速暫存器中的第5個字節(jié),他的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率,DS18B20工作時按此寄存器中的分辨率將溫度轉(zhuǎn)換為相應(yīng)精度的數(shù)值。
1.4 DS18B20的初始化
由于DS18B20單線通信功能是分時完成的,他有嚴(yán)格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20的各種操作必須按協(xié)議進(jìn)行。操作協(xié)議為:初始化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲器操作命令→處理數(shù)據(jù)。
2 單片機(jī)溫度測量系統(tǒng)硬件設(shè)計
2.1 系統(tǒng)的硬件結(jié)構(gòu)
系統(tǒng)的硬件結(jié)構(gòu)如圖2所示。以單片機(jī)AT89C51為核心,由溫度傳感器DS18B20、鍵盤和LED顯示電路、電源電路及時鐘電路等組成。
圖2 系統(tǒng)硬件結(jié)構(gòu)
2.2 電源電路
電源電路中主要使用的是由交流220 V,50 Hz的市電轉(zhuǎn)換成直流電,該部分電路由降壓、整流、濾波、穩(wěn)壓4部分組成,穩(wěn)壓集成塊采用7805。
2.3 數(shù)據(jù)采集
數(shù)據(jù)采集電路如圖3所示。 Atmel的AT89C51單片機(jī),內(nèi)有4 kB閃爍可編程可擦除只讀存儲器,128 B的數(shù)據(jù)存儲器空間,可直接推動LED。由溫度傳感器DS18B20采集被控對象的實時溫度,提供給AT89C51的P3.7口作為數(shù)據(jù)輸入。
圖3 單片機(jī)89C51與溫度傳感器DS18B20的連接圖
2.4 接口電路
P1口接4×4行列鍵盤,P1.0~P1.3與行線相連,每條行線接10 kB的電阻到電源,P1.4~P1.7與列線相連。P0口用作7段數(shù)碼管的字段選擇信號,控制數(shù)碼管的字段LED發(fā)光,P2口的P2.0~P2.3用于產(chǎn)生4位數(shù)碼管的位選擇信號,控制應(yīng)該顯示的7段數(shù)碼管發(fā)光。
3 軟件設(shè)計
3.1 系統(tǒng)程序流程圖
系統(tǒng)程序流程圖如圖4所示。
圖4 系統(tǒng)程序流程圖
3.2 溫度部分軟件設(shè)計
DS18B20的一線工作協(xié)議流程是:初始化→ROM操作指令→存儲器操作指令→數(shù)據(jù)傳輸。其工作時序包括初始化時序、寫時序和讀時序。故主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過3個步驟:每一次讀寫之前都要對DS18B20進(jìn)行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求CPU將數(shù)據(jù)線下拉500 μs,然后釋放,DS18B20收到信號后等待16~60 μs左右,發(fā)出60~240 μs的低脈沖,CPU收到此信號表示復(fù)位成功。部分函數(shù)如下:
3.2.1 初始化函數(shù)
初始化函數(shù):
void TxReset(void)
{ uint i;
DQ = 0;
i = 100;
while (i>0) i--;
DQ = 1; // 產(chǎn)生上升沿
i = 4;
while (i>0) i--;}
3.2.2 等待應(yīng)答函數(shù)
等待應(yīng)答函數(shù):
void RxWait(void)
{ uint i;
while(DQ);
while(~DQ); // 檢測到應(yīng)答脈沖
i = 4;
while (i>0) i--; }
3.2.3 讀數(shù)據(jù)函數(shù)
讀數(shù)據(jù)函數(shù):
uchar RdByte(void)
{ uchar i,j,b;
b = 0;
for (i=1;i<=8;i++)
{ j = RdBit();
b = (j<<7)|(b>>1);
}
return(b);}
3.2.4 寫數(shù)據(jù)函數(shù)
寫數(shù)據(jù)函數(shù):
void WrByte(uchar b)
{ uint i;
uchar j;
bit btmp;
for(j=1;j<=8;j++)
{ btmp = b0x01;
b = b>>1; // 取下一位(由低位向高位)
if (btmp)
{ /* 寫1 */
DQ = 0;
i++;i++; // 延時,使得15 μs以內(nèi)拉高
DQ = 1;
i = 8;
while(i>0) i-; // 整個寫1時隙不低于60 μs
}
else
{ /* 寫0 */
DQ = 0;
i = 8;
while(i>0) i--; // 保持低在60~120 μs之間
DQ = 1;
i++;
i++; } } }
[BT4+*3]3.2.5 啟動溫度轉(zhuǎn)換函數(shù)
啟動溫度轉(zhuǎn)換函數(shù):
void convert(void)
{ TxReset(); // 產(chǎn)生復(fù)位脈沖,初始化DS18B20
RxWait(); // 等待DS18B20給出應(yīng)答脈沖
delay(1); // 延時
WrByte(0xcc); // skip rom 命令
WrByte(0x44); // convert T 命令
}
3.2.6 讀取溫度值函數(shù)
讀取溫度值函數(shù):
void RdTemp(void)
{ TxReset(); // 產(chǎn)生復(fù)位脈沖,初始化DS18B20
RxWait(); // 等待DS18B20給出應(yīng)答脈沖
delay(1); // 延時
WrByte(0xcc); // skip rom 命令
WrByte(0xbe); // read scratchpad 命令
tplsb = RdByte(); // 溫度值低位字節(jié)(其中低4位為二進(jìn)制的“小數(shù)”部分)
tpmsb = RdByte(); // 高位值高位字節(jié)(其中高5位為符號位)
}
4 結(jié) 語
溫度傳感器DS18B20轉(zhuǎn)化溫度的方法非常簡潔且精度高、測試范圍較廣。單片機(jī)體積小、重量輕、抗干擾能力強(qiáng)、對環(huán)境要求不高、價格低廉、可靠性高、靈活性好。因此這種溫度測量系統(tǒng)能應(yīng)用于各種場合,具有很大的應(yīng)用價值。
參 考 文 獻(xiàn)
[1]田俊英.基于51單片機(jī)的溫度測試系統(tǒng)的設(shè)計與實現(xiàn)[J]. 現(xiàn)代電子技術(shù),2007,30(10):15-17.
[2]MAXIM公司.MAXIM產(chǎn)品資料全集[M/CD].2000.
[3]吉雷.Protel 99從入門到精通[M].西安:西安電子科技大學(xué)出版社,2000.
[4]林伸茂.8051單片機(jī)徹底研究基礎(chǔ)篇[M].北京:中國電力出版社,2007.
作者簡介 趙永杰 男,1975年出生,南陽廣播電視大學(xué),講師,在讀碩士研究生。研究方向為嵌入式系統(tǒng)。
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。