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