數(shù)字溫度傳感器DS18B20的原理與應(yīng)用
數(shù)字溫度傳感器DS18B20的原理與應(yīng)用 |
1引言 圖1DS18B20的內(nèi)部結(jié)構(gòu) 圖2DS18B20的管腳排列 (a)初始化時(shí)序 (b)寫時(shí)序 (c)讀時(shí)序 圖3DS18B20的工作時(shí)序圖 DS18B20中的溫度傳感器完成對(duì)溫度的測(cè)量,用16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號(hào)位。例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。 23 22 21 20 2-1 2-2 2-3 2-4 溫度值低字節(jié) MSBLSB S S S S S 22 25 24 溫度值高字節(jié) 高低溫報(bào)警觸發(fā)器TH和TL、配置寄存器均由一個(gè)字節(jié)的EEPROM組成,使用一個(gè)存儲(chǔ)器功能命令可對(duì)TH、TL或配置寄存器寫入。其中配置寄存器的格式如下: 0 R1 R0 1 1 1 1 1 MSBLSB R1、R0決定溫度轉(zhuǎn)換的精度位數(shù):R1R0=“00”,9位精度,*大轉(zhuǎn)換時(shí)間為93.75ms;R1R0=“01”,10位精度,*大轉(zhuǎn)換時(shí)間為187.5ms;R1R0=“10”,11位精度,*大轉(zhuǎn)換時(shí)間為375ms;R1R0=“11”,12位精度,*大轉(zhuǎn)換時(shí)間為750ms;未編程時(shí)默認(rèn)為12位精度。 高速暫存器是一個(gè)9字節(jié)的存儲(chǔ)器。開始兩個(gè)字節(jié)包含被測(cè)溫度的數(shù)字量信息;第3、4、5字節(jié)分別是TH、TL、配置寄存器的臨時(shí)拷貝,每一次上電復(fù)位時(shí)被刷新;第6、7、8字節(jié)未用,表現(xiàn)為全邏輯1;第9字節(jié)讀出的是前面所有8個(gè)字節(jié)的CRC碼,可用來保證通信正確。 3DS18B20的工作時(shí)序 DS18B20的一線工作協(xié)議流程是:初始化→ROM操作指令→存儲(chǔ)器操作指令→數(shù)據(jù)傳輸。其工作時(shí)序包括初始化時(shí)序、寫時(shí)序和讀時(shí)序,如圖3(a)(b)(c)所示。 4DS18B20與單片機(jī)的典型接口設(shè)計(jì) 圖4以MCS-51系列單片機(jī)為例,畫出了DS18B20與微處理器的典型連接。圖4(a)中DS18B20采用寄生電源方式,其VDD和GND端均接地,圖4(b)中DS18B20采用外接電源方式,其VDD端用3V~5.5V電源供電。 假設(shè)單片機(jī)系統(tǒng)所用的晶振頻率為12MHz,根據(jù)DS18B20的初始化時(shí)序、寫時(shí)序和讀時(shí)序,分別編寫了3個(gè)子程序:INIT為初始化子程序,WRITE為寫(命令或數(shù)據(jù))子程序,READ為讀數(shù)據(jù)子程序,所有的數(shù)據(jù)讀寫均由*低位開始。 DATEQUP1.0 …… INIT:CLREA INI10:SETBDAT MOVR2,#200 a)寄生電源工作方式 (b)外接電源工作方式 圖4DS18B20與微處理器的典型連接圖 INI11:CLRDAT DJNZR2,INI11;主機(jī)發(fā)復(fù)位脈沖持續(xù)3μs×200=600μs SETBDAT;主機(jī)釋放總線,口線改為輸入 MOVR2,#30 IN12:DJNZR2,INI12;DS18B20等待2μs×30=60μs CLRC ORLC,DAT;DS18B20數(shù)據(jù)線變低(存在脈沖)嗎? JCINI10;DS18B20未準(zhǔn)備好,重新初始化 MOVR6,#80 INI13:ORLC,DAT JCINI14;DS18B20數(shù)據(jù)線變高,初始化成功 DJNZR6,INI13;數(shù)據(jù)線低電平可持續(xù)3μs×80=240μs SJMPINI10;初始化失敗,重來 INI14:MOVR2,#240 IN15:DJNZR2,INI15;DS18B20應(yīng)答*少2μs×240=480μs RET ;------------------------ WRITE:CLREA MOVR3,#8;循環(huán)8次,寫一個(gè)字節(jié) WR11:SETBDAT MOVR4,#8 RRCA;寫入位從A中移到CY CLRDAT WR12:DJNZR4,WR12 ;等待16μs MOVDAT,C;命令字按位依次送給DS18B20 MOVR4,#20 WR13:DJNZR4,WR13 ;保證寫過程持續(xù)60μs DJNZR3,WR11 ;未送完一個(gè)字節(jié)繼續(xù) SETBDAT RET ;------------------------ READ:CLREA MOVR6,#8;循環(huán)8次,讀一個(gè)字節(jié) RD11:CLRDAT MOVR4,#4 NOP;低電平持續(xù)2μs SETBDAT;口線設(shè)為輸入 RD12:DJNZR4,RD12 ;等待8μs MOVC,DAT ;主機(jī)按位依次讀入DS18B20的數(shù)據(jù) RRCA;讀取的數(shù)據(jù)移入A MOVR5,#30 RD13:DJNZR5,RD13 ;保證讀過程持續(xù)60μs DJNZR6,RD11 ;讀完一個(gè)字節(jié)的數(shù)據(jù),存入A中 SETBDAT RET ;------------------------ 主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個(gè)步驟:初始化、ROM操作指令、存儲(chǔ)器操作指令。必須先啟動(dòng)DS18B20開始轉(zhuǎn)換,再讀出溫度轉(zhuǎn)換值。假設(shè)一線僅掛接一個(gè)芯片,使用默認(rèn)的12位轉(zhuǎn)換精度,外接供電電源,可寫出完成一次轉(zhuǎn)換并讀取溫度值子程序GETWD。 GETWD:LCALLINIT MOVA,#0CCH LCALLWRITE;發(fā)跳過ROM命令 MOVA,#44H LCALLWRITE;發(fā)啟動(dòng)轉(zhuǎn)換命令 LCALLINIT MOVA,#0CCH;發(fā)跳過ROM命令 LCALLWRITE MOVA,#0BEH;發(fā)讀存儲(chǔ)器命令 LCALLWRITE LCALLREAD MOVWDLSB,A ;溫度值低位字節(jié)送WDLSB LCALLREAD MOVWDMSB,A ;溫度值高位字節(jié)送WDMSB RET …… 子程序GETWD讀取的溫度值高位字節(jié)送WDMSB單元,低位字節(jié)送WDLSB單元,再按照溫度值字節(jié)的表示格式及其符號(hào)位,經(jīng)過簡(jiǎn)單的變換即可得到實(shí)際溫度值。 如果一線上掛接多個(gè)DS18B20、采用寄生電源連接方式、需要進(jìn)行轉(zhuǎn)換精度配置、高低限報(bào)警等,則子程序GETWD的編寫就要復(fù)雜一些,限于篇幅,這一部分不再詳述,請(qǐng)參閱相關(guān)內(nèi)容。 我們已成功地將DS18B20應(yīng)用于所開發(fā)的“家用采暖洗浴器”控制系統(tǒng)中,其轉(zhuǎn)換速度快,轉(zhuǎn)換精度高,與微處理器的接口簡(jiǎn)單,給硬件設(shè)計(jì)工作帶來了極大的方便,能有效地降低成本,縮短開發(fā)周期。
|
版權(quán)說明:本文章版權(quán)歸原作者所有,如有版權(quán)爭(zhēng)議請(qǐng)與我們聯(lián)系。
|