一、DS18B20的主要特性
(1)適應(yīng)電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電
(2)獨(dú)特的單線接口方式,DS18B20在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊
(3)DS18B20支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測(cè)溫
(4)DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)
(5)溫范圍-55℃~+125℃,在-10~+85℃時(shí)精度為±0.5℃
(6)可編程的分辨率為9~12位,對(duì)應(yīng)的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實(shí)現(xiàn)高精度測(cè)溫
(7)在9位分辨率時(shí)最多在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時(shí)最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快
(8)測(cè)量結(jié)果直接輸出數(shù)字溫度信號(hào),以"一線總線"串行傳送給CPU,同時(shí)可傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力
(9)負(fù)壓特性:電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀,但不能正常工作。
二、DS18B20的外形和內(nèi)部結(jié)構(gòu)
DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。DS18B20的外形及管腳排列如下圖1:
圖1:DS18B20外形及引腳排列圖
DS18B20引腳定義:
(1)DQ為數(shù)字信號(hào)輸入/輸出端;
(2)GND為電源地;
(3)VDD為外接供電電源輸入端(在寄生電源接線方式時(shí)接地)。
圖2:DS18B20內(nèi)部結(jié)構(gòu)圖 三、DS18B20工作原理
DS18B20的讀寫時(shí)序和測(cè)溫原理與DS1820相同,只是得到的溫度值的位數(shù)因分辨率不同而不同,且溫度轉(zhuǎn)換時(shí)的延時(shí)時(shí)間由2s減為750ms。DS18B20測(cè)溫原理如圖3所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55℃所對(duì)應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,計(jì)數(shù)器1的預(yù)置將重新被裝入,計(jì)數(shù)器1重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測(cè)溫度。圖3中的斜率累加器用于補(bǔ)償和修正測(cè)溫過程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。
圖3:DS18B20測(cè)溫原理框圖
DS18B20有4個(gè)主要的數(shù)據(jù)部件:
(1)光刻ROM中的64位序列號(hào)是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標(biāo)號(hào),接著的48位是該DS18B20自身的序列號(hào),最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。
(2)DS18B20中的溫度傳感器可完成對(duì)溫度的測(cè)量,以12位轉(zhuǎn)化為例:用16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號(hào)位。
表1:DS18B20溫度值格式表 這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測(cè)得的溫度大于0,這5位為0,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度。
例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。
表2:DS18B20溫度數(shù)據(jù)表 (3)DS18B20溫度傳感器的存儲(chǔ)器
DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的EEPRAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。
(4)配置寄存器
該字節(jié)各位的意義如下:
低五位一直都是"1",TM是測(cè)試模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式。在DS18B20出廠時(shí)該位被設(shè)置為0,用戶不要去改動(dòng)。R1和R0用來設(shè)置分辨率,如下表所示:(DS18B20出廠時(shí)被設(shè)置為12位)
表4:溫度分辨率設(shè)置表
| R1
| R0
| 分辨率
| 溫度最大轉(zhuǎn)換時(shí)間
| 0
| 0
| 9位
| 93.75ms
| 0
| 1
| 10位
| 187.5ms
| 1
| 0
| 11位
| 375ms
| 1
| 1
| 12位
| 750ms
|
|
四、高速暫存存儲(chǔ)器
高速暫存存儲(chǔ)器由9個(gè)字節(jié)組成,其分配如表5所示。當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補(bǔ)碼形式存放在高速暫存存儲(chǔ)器的第0和第1個(gè)字節(jié)。單片機(jī)可通過單線接口讀到該數(shù)據(jù),讀取時(shí)低位在前,高位在后,數(shù)據(jù)格式如表1所示。對(duì)應(yīng)的溫度計(jì)算:當(dāng)符號(hào)位S=0時(shí),直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)S=1時(shí),先將補(bǔ)碼變?yōu)樵a,再計(jì)算十進(jìn)制值。表?2是對(duì)應(yīng)的一部分溫度值。第九個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。
表5: DS18B20暫存寄存器分布
| 寄存器內(nèi)容
| 字節(jié)地址
| 溫度值低位(LSByte)
| 0
| 溫度值高位(MSByte)
| 1
| 高溫限值(TH)
| 2
| 低溫限值(TL)
| 3
| 配置寄存器
| 4
| 保留
| 5
| 保留
| 6
| 保留
| 7
| CRC校驗(yàn)值
| 8
|
|
根據(jù)DS18B20的通訊協(xié)議,主機(jī)(單片機(jī))控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個(gè)步驟:每一次讀寫之前都要對(duì)DS18B20進(jìn)行復(fù)位操作,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,當(dāng)DS18B20收到信號(hào)后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號(hào)表示復(fù)位成功。
表6: ROM指令表
| 指令
| 約定代碼
| 功能
| 讀ROM
| 33H
| 讀DS1820溫度傳感器ROM中的編碼(即64位地址)
| 符合 ROM
| 55H
| 發(fā)出此命令之后,接著發(fā)出 64 位 ROM編碼,訪問單總線上與該編碼相對(duì)應(yīng)的 DS1820 使之作出響應(yīng),為下一步對(duì)該 DS1820的讀寫作準(zhǔn)備。
| 搜索 ROM
| 0FOH
| 用于確定掛接在同一總線上 DS1820 的個(gè)數(shù)和識(shí)別 64 位ROM 地址。為操作各器件作好準(zhǔn)備。
| 跳過 ROM
| 0CCH
| 忽略 64 位 ROM 地址,直接向 DS1820發(fā)溫度變換命令。適用于單片工作。
| 告警搜索命令
| 0ECH
| 執(zhí)行后只有溫度超過設(shè)定值上限或下限的片子才做出響應(yīng)。
|
|
表6: RAM指令表
| 指令
| 約定代碼
| 功能
| 溫度變換
| 44H
| 啟動(dòng)DS1820進(jìn)行溫度轉(zhuǎn)換,12位轉(zhuǎn)換時(shí)最長(zhǎng)為750ms(9位為93.75ms)。結(jié)果存入內(nèi)部9字節(jié)RAM中。
| 讀暫存器
| 0BEH
| 讀內(nèi)部RAM中9字節(jié)的內(nèi)容
| 寫暫存器
| 4EH
| 發(fā)出向內(nèi)部RAM的3、4字節(jié)寫上、下限溫度數(shù)據(jù)命令,緊跟該命令之后,是傳送兩字節(jié)的數(shù)據(jù)。
| 復(fù)制暫存器
| 48H
| 將RAM中第3、4字節(jié)的內(nèi)容復(fù)制到EEPROM中。
| 重調(diào) EEPROM
| 0B8H
| 將EEPROM中內(nèi)容恢復(fù)到RAM中的第3、4字節(jié)。
| 讀供電方式
| 0B4H
| 讀DS1820的供電模式。寄生供電時(shí)DS1820發(fā)送“ 0”,外接電源供電 DS1820發(fā)送“ 1 ”。
|
|
五、DS18B20的應(yīng)用電路
DS18B20測(cè)溫系統(tǒng)具有測(cè)溫系統(tǒng)簡(jiǎn)單、測(cè)溫精度高、連接方便、占用口線少等優(yōu)點(diǎn)。下面就是DS18B20幾個(gè)不同應(yīng)用方式下的測(cè)溫電路圖:
[1]、DS18B20寄生電源供電方式電路圖
如下面圖4所示,在寄生電源供電方式下,DS18B20從單線信號(hào)線上汲取能量:在信號(hào)線DQ處于高電平期間把能量?jī)?chǔ)存在內(nèi)部電容里,在信號(hào)線處于低電平期間消耗電容上的電能工作,直到高電平到來再給寄生電源(電容)充電。
獨(dú)特的寄生電源方式有三個(gè)好處:
1)進(jìn)行遠(yuǎn)距離測(cè)溫時(shí),無需本地電源
2)可以在沒有常規(guī)電源的條件下讀取ROM
3)電路更加簡(jiǎn)潔,僅用一根I/O口實(shí)現(xiàn)測(cè)溫
要想使DS18B20進(jìn)行精確的溫度轉(zhuǎn)換,I/O線必須保證在溫度轉(zhuǎn)換期間提供足夠的能量,由于每個(gè)DS18B20在溫度轉(zhuǎn)換期間工作電流達(dá)到1mA,當(dāng)幾個(gè)溫度傳感器掛在同一根I/O線上進(jìn)行多點(diǎn)測(cè)溫時(shí),只靠4.7K上拉電阻就無法提供足夠的能量,會(huì)造成無法轉(zhuǎn)換溫度或溫度誤差極大。
因此,圖4電路只適應(yīng)于單一溫度傳感器測(cè)溫情況下使用,不適宜采用電池供電系統(tǒng)中。并且工作電源VCC必須保證在5V,當(dāng)電源電壓下降時(shí),寄生電源能夠汲取的能量也降低,會(huì)使溫度誤差變大。
注:站長(zhǎng)曾經(jīng)就此電路做過實(shí)驗(yàn),在實(shí)驗(yàn)中,降低電源電壓VCC,當(dāng)?shù)陀?/font>4.5V時(shí),測(cè)出的溫度值比實(shí)際的溫度高,誤差較大。。。當(dāng)電源電壓降為4V時(shí),溫度誤差有3℃之多,這就應(yīng)該是因?yàn)榧纳娫醇橙∧芰坎粔蛟斐傻陌,因此,站長(zhǎng)建議大家在開發(fā)測(cè)溫系統(tǒng)時(shí)不要使用此電路。
圖4
[2]、DS18B20寄生電源強(qiáng)上拉供電方式電路圖
改進(jìn)的寄生電源供電方式如下面圖5所示,為了使DS18B20在動(dòng)態(tài)轉(zhuǎn)換周期中獲得足夠的電流供應(yīng),當(dāng)進(jìn)行溫度轉(zhuǎn)換或拷貝到E2存儲(chǔ)器操作時(shí),用MOSFET把I/O線直接拉到VCC就可提供足夠的電流,在發(fā)出任何涉及到拷貝到E2存儲(chǔ)器或啟動(dòng)溫度轉(zhuǎn)換的指令后,必須在最多10μS內(nèi)把I/O線轉(zhuǎn)換到強(qiáng)上拉狀態(tài)。在強(qiáng)上拉方式下可以解決電流供應(yīng)不走的問題,因此也適合于多點(diǎn)測(cè)溫應(yīng)用,缺點(diǎn)就是要多占用一根I/O口線進(jìn)行強(qiáng)上拉切換。
圖5
注意:在圖4和圖5寄生電源供電方式中,DS18B20的VDD引腳必須接地
[3]、DS18B20的外部電源供電方式
在外部電源供電方式下,DS18B20工作電源由VDD引腳接入,此時(shí)I/O線不需要強(qiáng)上拉,不存在電源電流不足的問題,可以保證轉(zhuǎn)換精度,同時(shí)在總線上理論可以掛接任意多個(gè)DS18B20傳感器,組成多點(diǎn)測(cè)溫系統(tǒng)。注意:在外部供電的方式下,DS18B20的GND引腳不能懸空,否則不能轉(zhuǎn)換溫度,讀取的溫度總是85℃。
圖6:外部供電方式單點(diǎn)測(cè)溫電路 圖7:外部供電方式的多點(diǎn)測(cè)溫電路圖 外部電源供電方式是DS18B20最佳的工作方式,工作穩(wěn)定可靠,抗干擾能力強(qiáng),而且電路也比較簡(jiǎn)單,可以開發(fā)出穩(wěn)定可靠的多點(diǎn)溫度監(jiān)控系統(tǒng)。站長(zhǎng)推薦大家在開發(fā)中使用外部電源供電方式,畢竟比寄生電源方式只多接一根VCC引線。在外接電源方式下,可以充分發(fā)揮DS18B20寬電源電壓范圍的優(yōu)點(diǎn),即使電源電壓VCC降到3V時(shí),依然能夠保證溫度量精度。
六、DS1820使用中注意事項(xiàng)
DS1820雖然具有測(cè)溫系統(tǒng)簡(jiǎn)單、測(cè)溫精度高、連接方便、占用口線少等優(yōu)點(diǎn),但在實(shí)際應(yīng)用中也應(yīng)注意以下幾方面的問題:
1) 較小的硬件開銷需要相對(duì)復(fù)雜的軟件進(jìn)行補(bǔ)償,由于DS1820與微處理器間采用串行數(shù)據(jù)傳送,因此,在對(duì)DS1820進(jìn)行讀寫編程時(shí),必須嚴(yán)格的保證讀寫時(shí)序,否則將無法讀取測(cè)溫結(jié)果。在使用PL/M、C等高級(jí)語言進(jìn)行系統(tǒng)程序設(shè)計(jì)時(shí),對(duì)DS1820操作部分最好采用匯編語言實(shí)現(xiàn)。
2) 在DS1820的有關(guān)資料中均未提及單總線上所掛DS1820數(shù)量問題,容易使人誤認(rèn)為可以掛任意多個(gè)DS1820,在實(shí)際應(yīng)用中并非如此。當(dāng)單總線上所掛DS1820超過8個(gè)時(shí),就需要解決微處理器的總線驅(qū)動(dòng)問題,這一點(diǎn)在進(jìn)行多點(diǎn)測(cè)溫系統(tǒng)設(shè)計(jì)時(shí)要加以注意。
3) 連接DS1820的總線電纜是有長(zhǎng)度限制的。試驗(yàn)中,當(dāng)采用普通信號(hào)電纜傳輸長(zhǎng)度超過50m時(shí),讀取的測(cè)溫?cái)?shù)據(jù)將發(fā)生錯(cuò)誤。當(dāng)將總線電纜改為雙絞線帶屏蔽電纜時(shí),正常通訊距離可達(dá)150m,當(dāng)采用每米絞合次數(shù)更多的雙絞線帶屏蔽電纜時(shí),正常通訊距離進(jìn)一步加長(zhǎng)。這種情況主要是由總線分布電容使信號(hào)波形產(chǎn)生畸變?cè)斐傻。因此,在用DS1820進(jìn)行長(zhǎng)距離測(cè)溫系統(tǒng)設(shè)計(jì)時(shí)要充分考慮總線分布電容和阻抗匹配問題。
4) 在DS1820測(cè)溫程序設(shè)計(jì)中,向DS1820發(fā)出溫度轉(zhuǎn)換命令后,程序總要等待DS1820的返回信號(hào),一旦某個(gè)DS1820接觸不好或斷線,當(dāng)程序讀該DS1820時(shí),將沒有返回信號(hào),程序進(jìn)入死循環(huán)。這一點(diǎn)在進(jìn)行DS1820硬件連接和軟件設(shè)計(jì)時(shí)也要給予一定的重視。
測(cè)溫電纜線建議采用屏蔽4芯雙絞線,其中一對(duì)線接地線與信號(hào)線,另一組接VCC和地線,屏蔽層在源端單點(diǎn)接地。

初始化操作方法:?jiǎn)纹瑱C(jī)先給總線一個(gè)高電平,略微延時(shí),然后拉低總線,至少延時(shí)480us(我們?nèi)?00us),然后拉高總線,等待15~60us的時(shí)間(我們?nèi)?0us),此后DS18B20如果響應(yīng),則會(huì)發(fā)出0,拉低總線,否則為1,單片機(jī)檢測(cè)是否響應(yīng)的時(shí)間在60~240us之內(nèi),之后釋放總線,程序如下:
bit DS18B20_init()//初始化 {
uchar i;
bit flag_response=0;
DQ=1;
_nop_();_nop_();
DQ=0;
delay_us(90); //延時(shí)600us
DQ=1;
delay_us(10); //延時(shí)80us
for(i=0;i<15;i++)
{
_nop_();_nop_();_nop_();_nop_();_nop_();
if(!DQ)
{
flag_response=1;
break;
}
}
delay_us(63);//延時(shí)420us
DQ=1;//釋放總線
return(flag_response);
}
寫操作方法:由于是單總線,讀寫操作都分為寫0和寫1,從一個(gè)字節(jié)的最低位逐次往DS18B20里寫,先使總線產(chǎn)生一個(gè)由1到0的跳變,等待15us(我們?nèi)?3us),然后判斷要寫的那位是1還是0,如果是1,則拉高總線,0則不去操作總線(因?yàn)榭偩開始產(chǎn)生跳變時(shí)已被拉低),等待45us(我們?nèi)?4us)以后釋放總線(這段時(shí)間DS18B20會(huì)采樣,如上圖所示),程序如下:
void DS18B20_write(uchar dat)//寫1個(gè)字節(jié)
{
uchar i;
for(i=0;i<8;i++)
{
DQ=1;
_nop_();_nop_();
DQ=0;
delay_us(1);//延時(shí)13us
if(dat&0x01)
DQ=1;
delay_us(8);//延時(shí)64us
DQ=1;//釋放總線
dat>>=1;
}
} 讀操作方法:使總線產(chǎn)生一個(gè)由1到0的跳變,等待1us,馬上拉高總線,等待大約12個(gè)us(datasheet推薦的采樣時(shí)間是快接近15us的時(shí)候,我們略微提前),單片機(jī)采樣,如果總線被拉低,則讀出的是0,否則就讀出1,然后延時(shí)45us以上(我們?nèi)?5us)釋放總線;注意,讀也是從最低位開始的,這里讀出的0,1加到字節(jié)最高位,讀完后,最高位被移到最低位,實(shí)際上是右移了7次
uchar DS18B20_read()//讀1個(gè)字節(jié)
{
uchar i,dat=0;
for(i=0;i<8;i++)
{
dat>>=1;
DQ=1;
_nop_();_nop_();
DQ=0;
_nop_();
DQ=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//按datasheet上的推薦時(shí)序,略微提前
if(DQ)
dat|=0x80;
delay_us(7); //延時(shí)55us
DQ=1;
}
return dat;
}
|