引言:通過本文可以了解DS18B20溫度傳感器工作原理、硬件設(shè)計、DS18B20單總線接口驅(qū)動編寫。
1. 概述
DS18B20是常用的數(shù)字溫度傳感器,其輸出的是數(shù)字信號,具有體積小,硬件開銷低,抗干擾能力強,精度高的特點。
DS18B20數(shù)字溫度傳感器接線方便,經(jīng)封裝成后可應(yīng)用于多種場合,如電纜溝測溫,高爐水循環(huán)測溫,鍋爐測溫,機房測溫,農(nóng)業(yè)大棚測溫,潔凈室測溫,彈藥庫測溫等各種非極限溫度場合。具有耐磨耐碰,體積小,使用方便,封裝形式多樣等特點,適用于各種狹小空間設(shè)備數(shù)字測溫和控制領(lǐng)域。
2.原理學(xué)習(xí)
2.1 芯片概述
DS18B20數(shù)字溫度計提供9到12bit分辨率的溫度測量,可以通過可編程非易失性存儲單元實現(xiàn)溫度的下限和上限報警。DS18B20采用單總線協(xié)議與上位機進行通信,只需要一根信號線和一根地線。它的溫度測量范圍為-55℃~ +125℃(-67°F to +257°F)。在-10℃~70℃范圍內(nèi)的測試精度可以達到±0.5℃。此外它還可以工作在寄生模式下,直接通過信號線對芯片供電,從而不需要額外的供電電源。每個DS18B20都有一個全球唯一的64位序列號,可以將多個DS18B20串聯(lián)在同一跟單總線上進行組網(wǎng),只需要一個處理器就可以控制分布在大面積區(qū)域中的多顆DS18B20。這種組網(wǎng)方式特別適合HVAC環(huán)境控制,建筑、設(shè)備、糧情測溫和工業(yè)測溫以及過程監(jiān)測控制等應(yīng)用領(lǐng)域。
2.2 管腳描述
圖2:常見封裝管腳定義
DS18B20管腳描述如下表所示。
表1:DS18B20管腳描述
2.3 芯片內(nèi)部結(jié)構(gòu)
圖3:DS18B20內(nèi)部結(jié)構(gòu)
2.4 硬件設(shè)計
DS18B20可以通過管腳VDD外部電源供電,也可以工作于寄生電源模式。
(1)寄生電源模式硬件設(shè)計
如圖所示,當(dāng)總線處于高電平狀態(tài),DQ與外部上拉電阻連接通過單總線對器件供電。同時處于高電平狀態(tài)的總線信號對內(nèi)部電容(Cpp)充電(如圖3所示),在總線處于低電平狀態(tài)時,該電容提供能量給器件,該提供能量的方式成為“寄生電源”。當(dāng)DS18B20處于寄生電源模式時,VDD管腳必須接地。
寄生電源模式下,單總線和CPP在大部分操作中能夠提供充分的滿足規(guī)定時序和電壓的電流(見直流電特性和交流電特性節(jié))給DS18B20。然而,當(dāng)DS18B20正在執(zhí)行溫度轉(zhuǎn)換或從寄存器向EEPROM傳送數(shù)據(jù)時,工作電流可高達1.5mA。這個電流可能會引起連接在單總線上的弱上拉電阻不可接受的壓降,這需要更大的電流,而此時CPP無法提供。為了保證DS18B20有充足的供電,當(dāng)進行溫度轉(zhuǎn)換或復(fù)制數(shù)據(jù)到EEPORM操作時,必須給單總線提供一個強上拉,采用MOSFET直接把總線上拉到電源上的方式實現(xiàn),如圖4所示。
圖4:溫度轉(zhuǎn)換器件寄生電源模式硬件設(shè)計
(2)外部供電模式硬件設(shè)計
對DS18B20供電的另外一種方法是傳統(tǒng)的從VDD管腳接入一個外部電源,如圖5所示。這樣做的好處是單總線上不需要強上拉,而且總線不用在溫度轉(zhuǎn)換期間總保持高電平。
圖5:使用外部電源供電硬件設(shè)計
寄生電源模式在遠距離測試或空間受限的應(yīng)用場合是非常有用的。
對于溫度高于100℃時,不推薦使用寄生電源,因為DS18B20在這種溫度下表現(xiàn)出的漏電流比較大,通信可能無法進行。在類似這種溫度的情況下,強烈推薦使用DS18B20的VDD管腳供電。
2.5 寄存器詳解
(1) 64bit只讀寄存器
圖6:64bit ROM編碼
每顆DS18B20都有一個全球唯一的存儲在ROM中的64位編碼。最低8bit是單線系列編碼:28h。接著的48位是一個唯一的序列號。最后高8bit是低56bit編碼的CRC編碼。CRC的詳細解釋見CRC發(fā)生器節(jié)。64位ROM和ROM操作控制區(qū)允許DS18B20作為單總線器件并按照詳述于單總線系統(tǒng)節(jié)的單總線協(xié)議工作。
(2)存儲器結(jié)構(gòu)
DS18B20的存儲器結(jié)構(gòu)如圖7所示。
圖7:DS18B20的存儲器結(jié)構(gòu)
(1)byte0和byte1:分別為溫度寄存器的LSB和MSB,這兩個字節(jié)的存儲器為只讀存儲器;
這個兩個字節(jié)寄存器用來存儲溫度傳感器輸出的數(shù)據(jù),寄存器格式如圖8所示。
圖8:溫度寄存器格式
溫度與數(shù)據(jù)數(shù)據(jù)格式對應(yīng)關(guān)系如圖9所示。"S"bit表示溫度符號位,上電復(fù)位時,溫度寄存器默認值為+85℃。
圖9:溫度/數(shù)據(jù)關(guān)系
(2)byte2和byte3:是TH和TL,注意當(dāng)報警功能不能使用時,TH和TL寄存器可以被當(dāng)作普通寄存器使用。TH,TL和配置寄存器均為非易失性的可擦除寄存器(EEPROM),該存儲的數(shù)據(jù)在器件掉電后不會消失。
圖10:TH,TL寄存器格式
(3)byte4:配置寄存器。
配置寄存器允許用戶將溫度測量分辨率設(shè)定為9,10,11或12位,對應(yīng)的溫度分辨率分別為0.5℃、0.25℃、0.125℃和0.0625℃,芯片在上電狀態(tài)下默認的精度為12位。
配置寄存器的bit7和bit0到bit4被器件保留,禁止寫入;在讀數(shù)據(jù)時,它們?nèi)勘憩F(xiàn)為邏輯1。
圖11:配置寄存器格式
表2:傳感器精度配置表
(4)byte5:被器件保留,禁止寫入。
(5)byte6和byte7:用戶可以使用;
(6)byte8:只讀,包含以上八個字節(jié)的CRC碼。
2.6 DS18B20操作流程
通過單總線訪問DS18B20的執(zhí)行步驟如下:
步驟1:初始化;
步驟2:ROM操作指令;
步驟3:DS18B20功能指令。每一次DS18B20的操作都必須滿足以上步驟,若是缺少步驟或是順序混亂,器件將不會有返回值。搜索ROM命令和報警搜索命令除外。當(dāng)這兩個命令執(zhí)行時,主控制器必須返回步驟1。
2.7 單總線協(xié)議詳解
DS18B20采用單總線協(xié)議,通過一個單線端口通信。DS18B20需要嚴(yán)格的單總線協(xié)議以確保數(shù)據(jù)的完整性。協(xié)議定義了幾種單總線信號的類型:復(fù)位脈沖、存在脈沖、寫0、寫1、讀0和讀1。所有這些信號,除存在脈沖外,都是由總線控制器發(fā)出的。
(1)初始化:復(fù)位脈沖和存在脈沖
所有和DS18B20間的通信都以初始化序列開始,初始化序列如圖12所示。一個復(fù)位脈沖跟著一個存在脈沖表明DS18B20已經(jīng)準(zhǔn)備好發(fā)送和接收數(shù)據(jù)。
圖 12:初始化時序
如圖所示,初始化包括兩個階段:
①復(fù)位脈沖階段:總線控制器拉低總線并保持480us以發(fā)出(TX)一個復(fù)位脈沖信號,然后釋放總線;
②檢測存在脈沖階段:當(dāng)總線被釋放后,進入接收狀態(tài)(RX)。上拉電阻將總線拉到高電平。當(dāng)DS18B20檢測到IO引腳上的上升沿后,等待15~60us,然后發(fā)出一個由60~240us低電平信號構(gòu)成的存在脈沖。
(2)寫時序
DS18B20有兩種寫時序:寫1時序和寫0時序??偩€控制器通過寫1時序來寫邏輯1;通過寫0時序來寫邏輯0。寫時序必須最少持續(xù)60us,包括兩個寫周期之間至少1us的恢復(fù)時間。當(dāng)總線控制器把數(shù)據(jù)線從邏輯高電平拉低到低電平的時候,寫時序開始(見圖13)。
圖 13:寫時序
總線控制器要寫產(chǎn)生一個寫時序,必須把數(shù)據(jù)線拉到低電平然后釋放,且需在15us內(nèi)釋放總線。當(dāng)總線被釋放后,上拉電阻將總線拉高。總線控制器要生成寫0時隙,必須把數(shù)據(jù)線拉到低電平且繼續(xù)保持至少60us。
總線控制器初始化寫時序后,DS18B20在一個15us到60us的窗口內(nèi)對信號線DQ進行采樣。如果線上是高電平,就是寫1。反之,如果線上是低電平,就是寫0。
(3)讀時序
總線控制器發(fā)起讀時序時,DS18B20僅被用來傳輸數(shù)據(jù)給控制器。因此,總線控制器在發(fā)出讀寄存器指令[BEh]或讀電源模式指令[B4h]后必須立刻開始讀時序,以便DS18B20提供請求的數(shù)據(jù)。除此之外,總線控制器在發(fā)出發(fā)送溫度轉(zhuǎn)換指令平[44h]或召回EEPROM指令[B8h]之后讀時序,詳見DS18B20功能指令節(jié)。
圖 14:讀時序
所有讀時序必須最少60us,包括兩個讀周期間至少1us的恢復(fù)時間。當(dāng)總線控制把數(shù)據(jù)線從高電平拉低到低電平時,讀時序開始,數(shù)據(jù)線必須至少保持1us,然后總線被釋放(見圖14)。在總線控制器發(fā)出讀時序后,DS18B20過拉高或拉低總線上來傳輸1或0。當(dāng)傳輸0結(jié)束后,總線將被釋放,通過上拉電阻回到高電平空閑狀態(tài)。從DS18B20輸出的數(shù)據(jù)在讀時序的下降沿出現(xiàn)后15us內(nèi)有效。因此,總線控制器在讀時序開始15us內(nèi)釋放總線然后采樣總線狀態(tài),以讀取數(shù)據(jù)線的狀態(tài)。
3.實戰(zhàn)操作
3.1 軟件設(shè)計
本文要利用LCD1602實現(xiàn)DS18B20溫度及時間實時顯示。具體功能如下:
(1)DS18B20單總線接口驅(qū)動功能;
(2)溫度值HEX轉(zhuǎn)BCD碼功能;
(3)時鐘計時器功能;
(4)LCD1602顯示DS18B20實時溫度及時間顯示。軟件功能模塊劃分如圖15所示。
圖15:軟件功能模塊框圖
各個模塊功能:
(1)ds18b20_test.v模塊為頂層模塊,實現(xiàn)模塊間互聯(lián);(2)ds18b20_driver.v實現(xiàn)芯片單總線接口通信功能;
(3)hex_bcd.v實現(xiàn)溫度值HEX轉(zhuǎn)BCD碼功能;
(4)clock_timer.v實現(xiàn)時鐘計時器功能;
(5)lcd1602_driver.v實現(xiàn)DS18B20實時溫度及時間顯示。
DS18B20接口驅(qū)動ds18b20_driver.v軟件實現(xiàn)流程圖如圖16所示。
圖15:DS18B20溫度讀取控制流程圖
3.2 測試結(jié)果
軟件下載至電路板,顯示在LCD1602上,如圖11所示,可以看到DS18B20溫度及時間已經(jīng)正確顯示。
圖1:DS18B20溫度及時間顯示