何宗虎, 張德祥, 張玲君
摘 要:提出采用單總線數(shù)字式溫度傳感器DS18B20 和單片機(jī)組成的新型高精度溫度測(cè)量?jī)x的設(shè)計(jì)。介紹了溫度傳感器DS18B20的結(jié)構(gòu)、特點(diǎn)和工作原理,設(shè)計(jì)了DS18B20和AT89S52單片機(jī)的溫度測(cè)量系統(tǒng)硬件電路和軟件編程,主要包括溫度采集、溫度顯示及報(bào)警控制等功能。整個(gè)系統(tǒng)具有結(jié)構(gòu)簡(jiǎn)單,測(cè)量精度高,傳輸距離遠(yuǎn),抗干擾能力強(qiáng),溫度讀取方便和造價(jià)低等一系列優(yōu)點(diǎn),適用于生產(chǎn)生活及科學(xué)研究中對(duì)溫度的測(cè)量,應(yīng)用前景十分廣闊。
關(guān)鍵詞:溫度測(cè)量; 單片機(jī); DS18B20; 數(shù)碼管顯示
中圖分類號(hào):TN876-34
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2011)09-0130-03
Design of High-accuracy Temperature Detecting System Based on Single Chip Microcomputer
HE Zong-hu, ZHANG De-xiang, ZHANG Ling-jun
(Institute of Electrical Engineering and Automation, Anhui University, Hefei 230039, China)
Abstract: A new high-accuracy temperature detecting system based on single-bus digital temperature sensor DS18B20 and single chip microcomputer (SCM) is proposed. In this paper, the structure, characteristics and working principle of temperature sensor DS18B20 is introduced. Hardware circuit and software programming (including temperature acquisition, temperature display and alarm control functions) of the temperature measurement system are designed based on DS18B20 and AT89S52 SCM. The whole system has a series of advantages of simple structure, high detection accuracy, long transmission distance, strong anti-interference ability, easy to read temperature and low cost. It has a bright application future in daily life and scientific research for temperature measurement.
Keywords: temperature measurement; SCM; DS18B20; nixie display
0 引 言
溫度是工業(yè)生產(chǎn)過(guò)程和實(shí)驗(yàn)過(guò)程中比較重要的一個(gè)參數(shù),精確的溫度測(cè)量和及時(shí)的顯示溫度是很重要的。目前溫度測(cè)量系統(tǒng)種類繁多,功能參差不齊。單片機(jī)具有體積小,價(jià)格便宜,通用性和靈活性強(qiáng)的特點(diǎn),利用單片機(jī)設(shè)計(jì)溫度測(cè)量系統(tǒng),既可以滿足功能要求,又經(jīng)濟(jì)實(shí)惠。數(shù)字溫度測(cè)量傳感器DS18B20是單一總線的高精度測(cè)量器件,它克服了以前模擬式傳感器與微機(jī)接口時(shí)需要的A/D轉(zhuǎn)換器及其他復(fù)雜外圍電路的缺點(diǎn)[1]。本文就是運(yùn)用單片機(jī)及其接口和集成單總線溫度傳感器DS18B20構(gòu)建一個(gè)高精度的溫度測(cè)量和顯示系統(tǒng),并且通過(guò)開(kāi)關(guān)進(jìn)行溫度上限的設(shè)置,如果溫度超過(guò)設(shè)定值就會(huì)報(bào)警或進(jìn)行相應(yīng)的控制命令。設(shè)計(jì)的電路簡(jiǎn)單,易于實(shí)現(xiàn),而且還具有一定的擴(kuò)展功能,可以擴(kuò)展成多點(diǎn)采集和更復(fù)雜的功能。
1 系統(tǒng)硬件設(shè)計(jì)
整個(gè)系統(tǒng)主要由主控中心(單片機(jī)) 、溫度傳感器DS18B20、數(shù)碼管顯示及開(kāi)關(guān)控制等功能模塊組成[2-3]??梢酝ㄟ^(guò)開(kāi)關(guān)調(diào)節(jié)報(bào)警溫度的上限,既可以使上限增加,也可以使上限減小,這樣就可以用于不同場(chǎng)合了,系統(tǒng)的框圖如圖1所示。
圖1 系統(tǒng)硬件結(jié)構(gòu)框圖
1.1 溫度傳感器DS18B20
DS18B20是美國(guó)Dallas半導(dǎo)體公司生產(chǎn)的數(shù)字式溫度傳感器,提供9位溫度讀數(shù),指示溫度[4-5]。溫度信息通過(guò)單線接口送入DS18B20或者從DS18B20送出,所以從處理器到DS18B20僅需連接一條線。讀、寫(xiě)和完成溫度變換所需的電源可以由數(shù)據(jù)本身提供,而不需要外部電源。這使得DS18B20與單片機(jī)接口變得很簡(jiǎn)單,克服了模擬式傳感器與微機(jī)接口時(shí)需要的A/D轉(zhuǎn)換及其他復(fù)雜外圍電路的缺點(diǎn),而且它具有結(jié)構(gòu)簡(jiǎn)單、成本低、體積小、抗干擾能力強(qiáng)、使用簡(jiǎn)單等優(yōu)點(diǎn)。最重要的是DS18B20的ROM中存有其芯片的惟一標(biāo)識(shí)碼,即任意兩個(gè)DS18B20的標(biāo)識(shí)碼是不同的,特別適合與微處理芯片構(gòu)成多點(diǎn)溫度測(cè)量控制系統(tǒng)。DS18B20是DS1820的改進(jìn)型,分辨率為9~12位可編程控制,由其寄存器R0,R1的兩位狀態(tài)決定。測(cè)量范圍從-55~+125 ℃,增量值為0.5 ℃。
DS18B20在內(nèi)部以時(shí)鐘周期個(gè)數(shù)計(jì)數(shù)來(lái)測(cè)量溫度,并且提供0.5 ℃的分辨率。溫度讀數(shù)以16位、符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供。需要注意的是在DS18B20中溫度以1/2 ℃LSB(最低有效位) 形式表示時(shí),產(chǎn)生以下9位格式:
MSB LSB
1
11100110
1.2 鍵盤(pán)控制設(shè)計(jì)
系統(tǒng)工作前先由用戶自己設(shè)定一個(gè)兩位溫度值作為報(bào)警值,打開(kāi)電源,單片機(jī)復(fù)位初始化,閉合開(kāi)關(guān)中斷程序,按復(fù)位開(kāi)關(guān),每按一次報(bào)警值就會(huì)在初始化的基礎(chǔ)上加1 ℃,數(shù)碼管顯示設(shè)定值[6-8]。用戶進(jìn)行核對(duì)查看顯示的數(shù)字值是否與設(shè)置值一樣,然后打開(kāi)開(kāi)關(guān)進(jìn)行周圍溫度測(cè)量值傳輸。由于報(bào)警值可以由用戶自己設(shè)定,故系統(tǒng)能適應(yīng)各種不同溫度的環(huán)境。
1.3 其他的部分
系統(tǒng)主要采用的是7段共陽(yáng)極數(shù)碼管顯示測(cè)量的溫度值,由發(fā)光二極管和蜂鳴器進(jìn)行報(bào)警。如果測(cè)的溫度值高于設(shè)定值1 ℃,報(bào)警系統(tǒng)就會(huì)報(bào)警(發(fā)光二極管點(diǎn)亮,蜂鳴器鳴響)。這樣可以從聲音和視覺(jué)上收到系統(tǒng)的警報(bào)。
1.4 系統(tǒng)的電路原理圖
系統(tǒng)的電路原理圖如圖2所示。
圖2 系統(tǒng)電路原理圖
2 軟件設(shè)計(jì)
系統(tǒng)開(kāi)始工作時(shí),首先進(jìn)行I/O口初始化、報(bào)警值初始化,然后判斷開(kāi)關(guān)是否閉合,由用戶自己在原報(bào)警值的基礎(chǔ)上更改,確定后由單片機(jī)控制軟件發(fā)出溫度讀取指令,通過(guò)數(shù)字溫度傳感器DS18B20采集當(dāng)前溫度值,轉(zhuǎn)換后經(jīng)過(guò)單總線傳輸給單片機(jī),單片機(jī)經(jīng)過(guò)處理由數(shù)碼管顯示,如果超出設(shè)置的報(bào)警值1 ℃,系統(tǒng)就會(huì)報(bào)警(發(fā)光二極管點(diǎn)亮、蜂鳴器鳴響) [9-10]。系統(tǒng)的軟件部分主要是由中斷子程序、讀寫(xiě)DB18B20程序、顯示程序和報(bào)警系統(tǒng)四部分組成,主程序流程圖如圖3所示。
圖3 主程序流程圖
設(shè)計(jì)的部分程序如下:
#include
#include
#include
sbit DQ = P3^2;//定義DS18B20的數(shù)據(jù)口
sbit SET=P3^3;//定義報(bào)警值的控制開(kāi)關(guān)
unsigned char TAP[10]= //共陽(yáng)極,不帶點(diǎn)
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};
unsigned char TAP2[10]=//共陽(yáng)極,帶點(diǎn)
{0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,};
//定義一個(gè)存放轉(zhuǎn)換后溫度值的數(shù)組,溫度值為字符型(ASCII碼),小數(shù)點(diǎn)后保留2位
unsigned char str[10];
//延時(shí)子程序,延時(shí)(10*D+3)us
void delay_10us(unsigned char D)
{unsigned char i;
for (i=0;i {_nop_();//空操作,一個(gè)指令周期 _nop_(); } } //DS18B20初始化 void INIT(void) {DQ = 0; delay_10us(50); //等待500 μs DQ = 1;//釋放18B20數(shù)據(jù)線。 delay_10us(9); //等待90 μs while (!DQ);//等待18B20準(zhǔn)備好 } //讀DS18B20的程序 unsigned char READ(void) {unsigned char i; unsigned char D = 0; for (i=0;i<8;i++) //讀8位數(shù)據(jù) {D=D>>1; //先讀數(shù)據(jù)低位 DQ = 0; _nop_ (); DQ = 1; //釋放18B20數(shù)據(jù)線 for (j=1;j<9;j++) {_nop_(); } if(DQ) D += 0x80; //如果數(shù)據(jù)線上是″1″,D最高位為″1″,否則為″0″ delay_10us (6); } return D;//返回值為D,即讀出的一個(gè)字節(jié)數(shù)據(jù)。 } //寫(xiě)DS18B20的程序 void WRITE(unsigned char D) {unsigned char i; for (i=0;i<8;i++) {DQ = 0; if (D & 0x01) DQ = 1; elseDQ = 0; delay_10us(8); DQ = 1; D = D >> 1;//右移一位,準(zhǔn)備寫(xiě)下一位 } } //顯示程序(str數(shù)組內(nèi)元素是ASCII碼,所以要減去48) void display(void) {unsigned char i; unsigned char j=100; while(j--) { for (i=0;i<255;i++) { P0 = TAP [str[0]-48]; P2 = 0x1; } for (i=0;i<255;i++) { P0 = TAP2[str[1]-48]; P2 = 0x2; } for (i=0;i<255;i++) {P0 = TAP[str[3]-48]; P2 = 0x4; } for(i=0;i<255;i++) {P0 = TAP[str[4]-48]; P2 = 0x8; } } } //主程序 void main() {unsigned char warning=30; unsigned char TMP_H = 0; unsigned char TMP_L = 0; shortTMP= 0; //短整型數(shù)據(jù) float TMP_F = 0; //浮點(diǎn)型數(shù)據(jù) P1_0=0; //開(kāi)機(jī)時(shí)測(cè)試溫度超限警報(bào)LED燈 while(1) { while(!SET) //報(bào)警值確定 { delay_10us(5); while(!SET) { if(P1_0==0) warning+=1;//增加上限 else if(P1_1==0) warning+=1;//減小上限 elsewarning+=0; str[0]=warning/10+48; str[1]=warning%10+48; str[3]=48; str[4]=48; display(); delay_10us(5); } } INIT(); //初始化DS18B20 WRITE(0xCC);//跳過(guò)ROM配置 WRITE(0x44);//開(kāi)始轉(zhuǎn)換溫度 display(); //默認(rèn)至少等待750 ms,用于溫度轉(zhuǎn)換 INIT();//初始化DS18B20 WRITE(0xCC);//跳過(guò)ROM配置 WRITE(0xBE);//準(zhǔn)備讀取溫度值 TMP_L=READ(); //讀取溫度值的低8位 TMP_H=READ(); //讀取溫度值的高4位 TMP=TMP_H; TMP=(TMP<<8) | TMP_L;//高位左移8位與低位相或(加) 賦值于TMP TMP_F=TMP * 0.0625;//計(jì)算溫度值 sprintf(str,″%.2f″,TMP_F);//將浮點(diǎn)數(shù)轉(zhuǎn)換成字符型,存入str數(shù)組 if(TMP_F>=warning)P1_0=0; //如果溫度值大于等于報(bào)警值,報(bào)警 else P1_0=1; } } 3 結(jié) 語(yǔ) 基于C51系列單片機(jī)和DS18B20數(shù)字溫度傳感器的溫度測(cè)量系統(tǒng)結(jié)構(gòu)簡(jiǎn)單、成本低、操作方便,比較好推廣,而且也可以根據(jù)情況進(jìn)行擴(kuò)展,比如進(jìn)行多點(diǎn)采集等。 參考文獻(xiàn) [1]劉衛(wèi)民.集成溫度傳感器DS1820原理及應(yīng)用[J].黑龍江科技信息,2008(21):52. [2]楊偉偉.淺談基于單片機(jī)的溫度測(cè)控系統(tǒng)設(shè)計(jì)[J].信息與電腦:理論版,2010(2):50-51. [3]何錫才.傳感器及其應(yīng)用電路[M].北京:電子工業(yè)出版社,2002. [4]李虹,溫秀梅,高振天.基于MSP430單片機(jī)和DS18B20的小型測(cè)溫系統(tǒng)[J].微計(jì)算機(jī)信息,2006,22(2):137-138. [5]檀永,陳小平.基于DS1620的溫度變送器設(shè)計(jì)[J].江蘇電器,2006(4):4-6,10. [6]張立科.單片機(jī)典型外圍器件及應(yīng)用實(shí)例[M].北京:人民郵電出版社,2006. [7]鄔楊波.一種基于VHDL的7段LED數(shù)碼管顯示控制器[J].機(jī)電工程,2008,25(7):51-54. [8]馬臣崗, 孟立凡.基于單總線式無(wú)線溫度采集系統(tǒng)設(shè)計(jì)[J].電子設(shè)計(jì)工程,2010(3):31-33. [9]劉瑞新.單片機(jī)原理及應(yīng)用教程[M].北京:機(jī)械工業(yè)出版社,2003. [10]張義和,王敏男,許宏昌.例說(shuō)51單片機(jī)[M].北京:人民郵電出版社,2008. 2011年5月1日第34卷第9期現(xiàn)代電子技術(shù)Modern Electronics TechniqueMay 2011Vol.34 No.9 注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文