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