物聯網開發硬體應用
Would you like to react to this message? Create an account in a few clicks or log in to continue.
物聯網開發硬體應用

提升國內高職學生物聯網開發硬體應用入門技術 待進入科技大學再升級為物聯網開發硬體設計人員


您沒有登錄。 請登錄註冊

DS-18B20 數位溫度感測器介紹

向下  內容 [第1頁(共1頁)]

1DS-18B20 數位溫度感測器介紹 Empty DS-18B20 數位溫度感測器介紹 周一 11月 09, 2015 9:21 pm

Admin


Admin

1、DS18B20 的主要特性
1.1、適應電壓範圍更寬,電壓範圍:3.0~5.5V,在寄生電源方式下可由數 據線供電
1.2、獨特的單線介面方式,DS18B20 在與微處理器連接時僅需要一條口線即可實現微處理器與 DS18B20 的
雙向通訊
1.3、 DS18B20 支援多點組網功能,多個 DS18B20 可以並聯在唯一的三線上,實現組網多點測溫
1.4、DS18B20 在使用中不需要任何週邊元件,全部傳感元件及轉換電路集成在形如一只三極管的積體電路

1.5、溫範圍-55℃~+125℃,在-10~+85℃時精度為±0.5℃
1.6、可編程 的解析度為 9~12 位元,對應的可分辨溫度分別為 0.5℃、0.25℃、0.125℃和 0.0625℃,可實現
高精度測溫
1.7、在 9 位解析度時最多在 93.75ms 內把溫度轉換為數位,12 位元解析度時最多在 750ms 內把溫度值轉換
為數位,速度更快
1.8、測量結果直接輸出數位溫度信號,以"一 線匯流排"串列傳送給 CPU,同時可傳送 CRC 校驗碼,具有極
強的抗干擾糾錯能力
1.9、負壓特性:電源極性接反時,晶片不會因發熱而燒毀, 但不能正常工作。
2、DS18B20 的外形和內部結構
DS18B20 內部結構主要由四部分組成:64 位元光刻 ROM 、溫度感測器、非揮發的溫度報警觸發器 TH 和 T
L、配置寄存器。
DS18B20 的外形及管腳排列如下圖 1:
DS18B20 引腳定義:
(1)DQ 為數位信號輸入/輸出端;
(2)GND 為電源地;
(3)VDD 為外接供電電源輸入端(在寄生電源接線方式時接地)。
圖 2: DS18B20 內部結構圖 圖 3: DS18B20 測溫原理框圖
3、DS18B20 工作原理
DS18B20 的讀寫時序和測溫原理與 DS1820 相同,只是得到的溫度值的位元數因解析度不同而不同,且溫度
轉換時的延時時間由 2s 減為 750ms。 DS18B20 測溫原理如圖 3 所示。圖中低溫度係數晶振的振盪頻率受溫
度影響很小,用於產生固定頻率的脈衝信號送給計數器 1。高溫度係數晶振 隨溫度變化其振盪率明顯改
變,所產生的信號作為計數器 2 的脈衝輸入。計數器 1 和溫度寄存器被預置在-55℃所對應的一個基數值。
計數器 1 對 低溫度係數晶振產生的脈衝信號進行減法計數,當計數器 1 的預置值減到 0 時,溫度寄存器的
值將加 1,計數器 1 的預置將重新被裝入,計數器 1 重 新開始對低溫度係數晶振產生的脈衝信號進行計
數,如此迴圈直到計數器 2 計數到 0 時,停止溫度寄存器值的累加,此時溫度寄存器中的數值即為所測溫
度。圖 3 中的斜率累加器用於補償和修正測溫過程中的非線性,其輸出用於修正計數器 1 的預置值。
DS18B20 有 4 個主要的資料部件:
(1)光刻 ROM 中的 64 位序列號是出廠前被光刻好的,它可以看作是該 DS18B20 的位址序列碼。64 位光
刻 ROM 的排列是:開始 8 位元 (28H)是產品類型標號,接著的 48 位是該 DS18B20 自身的序列號,最後
8 位是前面 56 位的迴圈冗餘校驗碼(CRC=X8+X5+X4+1)。光刻 ROM 的作用 是使每一個 DS18B20 都各不
相同,這樣就可以實現一根匯流排上掛接多個 DS18B20 的目的。
(2)DS18B20 中的溫度感測器可完成對溫度的測量,以 12 位轉化為例:用 16 位元符號擴展的二進位補數
讀數形式提供,以 0.0625℃/LSB 形式表達,其中 S 為符號位元。
表 1: DS18B20 溫度值格式表
這是 12 位元轉化後得到的 12 位元資料,存儲在 18B20 的兩個 8 比特的 RAM 中,二進位中的前面 5 位元是
符號位元,如果測得的溫度大於 0, 這 5 位為 0,只要將測到的數值乘於 0.0625 即可得到實際溫度;如果溫
度小於 0,這 5 位為 1,測到的數值需要取反加 1 再乘於 0.0625 即可得到實際 溫度。 例如+125℃的數位輸
出為 07D0H,+25.0625℃的數位輸出為 0191H,-25.0625℃的數位輸出為 FF6FH,-55℃的數位輸出為 FC90H

表 2: DS18B20 溫度資料表

(3)DS18B20 溫度感測器的記憶體 DS18B20 溫度感測器的內部記憶體包括一個高速暫存 RAM 和一個非易
失性的可電擦除的 EEPRAM,後者存放高溫度和低溫度觸發器 TH、TL 和結構寄存器。
(4)配置寄存器 該位元組各位的意義如下:
表 3: 配置寄存器結構
TM R1 R0 1 1 1 1 1
低五位一直都是"1",TM 是測試模式位元,用於設置 DS18B20 在工作模式還是在測試模式。在 DS18B20 出
廠時該位被設置為 0,用 戶不要去改動。R1 和 R0 用來設置解析度,如下表所示:(DS18B20 出廠時被設
置為 12 位)
表 4: 溫度解析度設置表
R1 R0 解析度 溫度最大轉換時間
0 0 9 位 93.75ms
0 1 10 位 187.5ms
1 0 11 位 375ms
1 1 12 位 750ms
4、高速暫存記憶體
高速暫存記憶體由 9 個位元組組成,其分配如表 5 所示。當溫度轉換命令發佈後,經轉換所得的溫度值以
二位元組補數形式存放在 高速暫存記憶體的第 0 和第 1 個位元組。單片機可通過單線介面讀到該資料,讀
取時低位元在前,高位在後,資料格式如表 1 所示。對應的溫度計算: 當符號位元 S=0 時,直接將二進位
位元轉換為十進位;當 S=1 時,先將補數變為原碼,再計算十進位值。表 2 是對應的一部分溫度值。第九
個位元組是 冗餘檢驗位元組。
表 5: DS18B20 暫存寄存器分佈
寄存器內容 位元組位址
溫度值低位元 (LS Byte) 0
溫度值高位 (MS Byte) 1
高溫限值(TH) 2
低溫限值(TL) 3
配置寄存器 4
保留 5
保留 6
保留 7
CRC 校驗值 8
根據 DS18B20 的通訊協定,主機(單片機)控制 DS18B20 完成溫度轉換必須經過三個步驟:每一次讀寫之
前都要對 DS18B20 進行 復位操作,復位成功後發送一條 ROM 指令,最後發送 RAM 指令,這樣才能對 DS1
8B20 進行預定的操作。重定要求主 CPU 將資料線下拉 500 微秒,然後 釋放,當 DS18B20 收到信號後等待
16~60 微秒左右,後發出 60~240 微秒的存在低脈衝,主 CPU 收到此信號表示重定成功。
表 6: ROM 指令表
指 令 約定代碼 功 能
讀 ROM 33H 讀 DS1820 溫度感測器 ROM 中的編碼(即 64 位元位址)
符合 ROM 55H 發出此命令之後,接著發出 64 位元 ROM 編碼,訪問單匯流排上與該編碼相對應的
DS1820 使之作出回應,為下一步對該 DS1820 的讀寫作準備。
搜索 ROM 0FOH 用於確定掛接在同一匯流排上 DS1820 的個數和識別 64 位 ROM 地址。為操作各器件
作好準備。
跳過 ROM 0CCH 忽略 64 位 ROM 地址,直接向 DS1820 發溫度變換命令。適用于單片工作。
告警搜索命令 0ECH 執行後只有溫度超過設定值上限或下限的片子才做出回應。
表 6: RAM 指令表
指 令 約定代碼 功 能
溫度變換 44H 啟動 DS1820 進行溫度轉換,12 位元轉換時最長為 750ms(9 位為 93.75ms)。結果存
入內部 9 位元組 RAM 中。
讀暫存器 0BEH 讀內部 RAM 中 9 位元組的內容
寫暫存器 4EH 發出向內部 RAM 的 3、4 位元組寫上、下限溫度資料命令,緊跟該命令之後,是傳
送兩位元組的資料。
複製暫存器 48H 將 RAM 中第 3 、4 位元組的內容複製到 EEPROM 中。
重調 EEPROM 0B8H 將 EEPROM 中內容恢復到 RAM 中的第 3 、4 位元組。
讀供電方式 0B4H 讀 DS1820 的供電模式。寄生供電時 DS1820 發送“ 0 ",外接電源供電 DS1820 發送
“ 1 "。
5、DS18B20 的應用電路
DS18B20 測溫系統具有測溫系統簡單、測溫精度高、連接方便、佔用口線少等優點。下面就是 DS18B20 幾
個不同應用方式下的 測溫電路圖:
5.1、DS18B20 寄生電源供電方式電路圖
如下面圖 4 所示,在寄生電源供電方式下,DS18B20 從單線信號線上汲取能量:在信號線 DQ 處於高電平期
間把能量儲存在內部 電容裏,在信號線處於低電平期間消耗電容上的電能工作,直到高電平到來再給寄生
電源(電容)充電。
獨特的寄生電源方式有三個好處:
1)進行遠距離測溫時,無需本地電源
2)可以在沒有常規電源的條件下讀取 ROM
3)電路更加簡潔,僅用一根 I/O 口實現測溫
要想使 DS18B20 進行精確的溫度轉換,I/O 線必須保證在溫度轉換期間提供足夠的能量,由 於每個 DS18B2
0 在溫度轉換期間工作電流達到 1mA,當幾個溫度感測器掛在同一根 I/O 線上進行多點測溫時,只靠 4.7K
上拉電阻就無法提供足夠的 能量,會造成無法轉換溫度或溫度誤差極大。
因此,圖 4 電路只適應于單一溫度感測器測溫情況下使用,不適宜採用電池供電系統中。並 且工作電源 VC
C 必須保證在 5V,當電源電壓下降時,寄生電源能夠汲取的能量也降低,會使溫度誤差變大。

圖 4 圖 5
5.2、DS18B20 寄生電源強上拉供電方式電路圖
改進的寄生電源供電方式如下面圖 5 所示,為了使 DS18B20 在動態轉換週期中獲得足夠的電流供應,當進
行溫度轉換或拷貝到 E2 記憶體操作時,用 MOSFET 把 I/O 線直接拉到 VCC 就可提供足夠的電流,在發出
任何涉及到拷貝到 E2 記憶體或啟動溫度轉換的指令後,必須在最 多 10μS 內把 I/O 線轉換到強上拉狀態。
在強上拉方式下可以解決電流供應不走的問題,因此也適合於多點測溫應用,缺點就是要多佔用一根 I/O 口
線進行強上拉切換。
注意:在圖 4 和圖 5 寄生電源供電方式中,DS18B20 的 VDD 引腳必須接地
5.3、DS18B20 的外部電源供電方式
在外部電源供電方式下,DS18B20 工作電源由 VDD 引腳接入,此時 I/O 線不需要強上拉,不存在電源電流
不足的問題,可以保證轉換精度,同時在匯流排上理論可以掛接任意多個 DS18B20 感測器,組成多點測溫
系統。注意:在外部供電的方式下,DS18B20 的 GND 引腳不能懸空 ,否則不能轉換溫度,讀取的溫度總是
85℃。
圖 6:外部供電方式單點測溫電路 圖 7:外部供電方式的多點測溫電路圖

外部電源供電方式是 DS18B20 最佳的工作方式,工作穩定可靠,抗干擾能力強,而且電路也比較簡單,可
以開發出穩定可靠的多點溫度監控系統。站長推薦大家在開發中使用外部電源供電方式,畢竟比寄生電源
方式只多接一根 VCC 引線。在外接電源方式下,可以充分發揮 DS18B20 寬電源電壓範圍的優點,即使電源
電壓 VCC 降到 3V 時,依然能夠保證溫度量精度。
6、DS1820 使用中注意事項
DS1820 雖然具有測溫系統簡單、測溫精度高、連接方便、佔用口線少等優點,但在實際應用中也應注意以
下幾方面的問題:
6.1、較小的硬體開銷需要相對複雜的軟體進行補償,由於 DS1820 與微處理器間採用串列資料傳送,因
此 ,在對 DS1820 進行讀寫編程時,必須嚴格的保證讀寫時序,否則將無法讀取測溫結果。在使用 PL/M、
C 等高階語言進行系統程式設計時,對 DS1820 操作部分最好採用組合語言實現。
6.2、在 DS1820 的有關資料中均未提及單匯流排上所掛 DS1820 數量問題,容易使人誤認為可以掛任意多個
DS1820,在實際應用中並非如此。當單匯流排上所掛 DS1820 超過 8 個時,就需要解決微處理器的匯流排驅
動問題,這一點在進行多點測溫系統設計時要加以注意。
6.3、連接 DS1820 的匯流排電纜是有長度限制的。試驗中,當採用普通信號電纜傳輸長度超過 50m 時,讀
取的測溫資料將發生錯誤。當將匯流排電纜改為雙絞線帶遮罩電纜時,正常通訊距離可達 150m,當採用每
米絞合次數更多的雙絞線帶遮罩電纜時,正常通訊距離進一步加長。這種情況主要是由匯流排分佈電容使
信號波形產生畸變造成的。因此,在用 DS1820 進行長距離測溫系統設計時要充分考 慮匯流排分佈電容和
阻抗匹配問題。
6.4、在 DS1820 測溫程式設計中,向 DS1820 發出溫度轉換命令後,程式總要等待 DS1820 的返回信號,一
旦 某個 DS1820 接觸不好或斷線,當程式讀該 DS1820 時,將沒有返回信號,程式進入閉環。這一點在進行
DS1820 硬體連接和軟體設計時也要給予 一定的重視。 測溫電纜線建議採用遮罩 4 芯雙絞線,其中一對線
接地線與信號線,另一組接 VCC 和地線,遮罩層在源端單點接地。




//DS18B20設定
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

//esp8266設定
#define SSID "你的無線網路SSID"
#define PASSWORD "你的無線網路密碼"

#include "uartWIFI.h"
#include <SoftwareSerial.h>
WIFI wifi;

#define IP "184.106.153.149" // thingspeak.com
String GET = "GET /update?key=填入你的thinhspeakAPI金鑰";

void setup()
{
sensors.begin(); // Start up the ds18b20 library
wifi.begin();
bool b = wifi.Initialize(STA, SSID, PASSWORD);
if(!b)
{
DebugSerial.println("Init error");
}
delay(8000); //make sure the module can have enough time to get an IP address
String ipstring = wifi.showIP();
DebugSerial.println("My IP address:");
DebugSerial.println(ipstring); //show the ip address of module

String wifistring = wifi.showJAP();
DebugSerial.println(wifistring); //show the name of current wifi access port

}
void loop()
{
//DS18B20讀取
sensors.requestTemperatures();
float sensor_ds18temp = sensors.getTempCByIndex(0);

String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += IP;
cmd += "\",80";
Serial.println(cmd);
delay(2000);
if(Serial.find("Error")){
return;
}
cmd = GET;
cmd += "&field1=";
cmd += sensor_ds18temp;
cmd += "\r\n";
Serial.print("AT+CIPSEND=");
Serial.println(cmd.length());
if(Serial.find(">")){
Serial.print(cmd);
}else{
Serial.println("AT+CIPCLOSE");
}

}

https://iotboard.666forum.com

回頂端  內容 [第1頁(共1頁)]

這個論壇的權限:
無法 在這個版面回復文章