「雕爺學(xué)編程」Arduino動(dòng)手做(39)——DS18B20溫度傳感器

37款傳感器與模塊的提法,在網(wǎng)絡(luò)上廣泛流傳,其實(shí)Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑒于本人手頭積累了一些傳感器和模塊,依照實(shí)踐出真知(一定要?jiǎng)邮肿觯┑睦砟?,以學(xué)習(xí)和交流為目的,這里準(zhǔn)備逐一動(dòng)手試試做實(shí)驗(yàn),不管成功與否,都會(huì)記錄下來(lái)---小小的進(jìn)步或是搞不定的問(wèn)題,希望能夠拋磚引玉。?

【Arduino】108種傳感器模塊系列實(shí)驗(yàn)(資料+代碼+圖形+仿真)

實(shí)驗(yàn)三十九:DS18B20單總線數(shù)字溫度傳感器模塊


DS18B20

是世界第一片支持"一線總線"接口的溫度傳感器,一線總線獨(dú)特而且經(jīng)濟(jì)的特點(diǎn),使用戶可輕松組建傳感器網(wǎng)絡(luò),為測(cè)量系統(tǒng)構(gòu)建系統(tǒng)引入全新要概念。



DS18B20 的內(nèi)部結(jié)構(gòu)主要由64 位ROM、溫度靈敏元件、內(nèi)部存儲(chǔ)器和配置寄存器4 部分組成,如上圖所示。

( 1) 64 位ROM。它的內(nèi)容是64 位序列號(hào),它可以被看作是該DS18B20 的地址序列碼,其作用是使每個(gè)DS18B20 都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20 的目的。

( 2) 溫度靈敏元件。它完成對(duì)溫度的測(cè)量,測(cè)量后的結(jié)果存儲(chǔ)在2 個(gè)8 b 的溫度寄存器中。

( 3) 內(nèi)部存儲(chǔ)器。內(nèi)部存儲(chǔ)器包括一個(gè)高速暫存RAM 和一個(gè)非易失性的可電擦除的E2 PROM,后者存放高溫度和低溫度觸發(fā)器TH、TL 以及配置寄存器。


測(cè)溫原理

用一個(gè)高溫度系數(shù)的振蕩器確定一個(gè)門(mén)周期,內(nèi)部計(jì)數(shù)器在這個(gè)門(mén)周期內(nèi)對(duì)一個(gè)低溫度系數(shù)的振蕩器的脈沖進(jìn)行計(jì)數(shù)來(lái)得到溫度值。計(jì)數(shù)器被預(yù)置到對(duì)應(yīng)于-55攝氏度的一個(gè)值。如果計(jì)數(shù)器在門(mén)周期結(jié)束前到達(dá)0,則溫度寄存器(同樣初始化到-55攝氏度)的值增加,表明所測(cè)溫度大于-55攝氏度。

1。溫度系數(shù)振蕩器是指一種振蕩器,它的振蕩頻率與溫度之間有一個(gè)特定的關(guān)系,即不同的溫度對(duì)應(yīng)不同的振蕩頻率。反之,測(cè)量出振蕩器的輸出頻率,就可測(cè)量出溫度值。

2.高溫度系數(shù)振蕩器:它的振蕩頻率受溫度的影響很大,溫度稍有變化,頻率就會(huì)變化很多,即對(duì)溫度敏感,多用于溫度傳感器。

3.低溫度系數(shù)振蕩器:它的振蕩頻率受溫度的影響很小,即使溫度變化很大,它的頻率也基本不變。?

??同時(shí),計(jì)數(shù)器被復(fù)位到一個(gè)值,這個(gè)值由斜坡式累加器電路確定,斜坡式累加器電路用來(lái)補(bǔ)償感溫振蕩器的拋物線特性。然后計(jì)數(shù)器又開(kāi)始計(jì)數(shù)直到 0,如果門(mén)周期仍未結(jié)束,將重復(fù)這一過(guò)程。 斜坡式累加器用來(lái)補(bǔ)償感溫振蕩器的非線性,以期在測(cè)溫時(shí)獲得比較高的分辨力。這是通過(guò)改變計(jì)數(shù)器對(duì)溫度每增加一度所需計(jì)數(shù)的的值來(lái)實(shí)現(xiàn)的。因此,要想獲得所需的分辨力,必須同時(shí)知道在給定溫度下計(jì)數(shù)器的值和每一度的計(jì)數(shù)值。


主要特性

(1) 獨(dú)特的單線接口方式,與單片機(jī)連接時(shí)僅需要一條口線;

(2) 測(cè)溫范圍為- 55~ + 125℃,在- 10~ + 85℃范圍內(nèi)精度為±0. 5 ℃;

(3) 通過(guò)編程可實(shí)現(xiàn)9~ 12 位的數(shù)字讀數(shù)方式;

(4) 用戶可自設(shè)定非易失性的報(bào)警上下限值;

(5) 外圍電路簡(jiǎn)單,使用時(shí)不需要外圍元件,可用數(shù)據(jù)總線供電,電壓范圍為3. 0 ~ 5. 5 V 無(wú)需備用電源;

(6)無(wú)需外部元件,獨(dú)特的一線接口,電源和信號(hào)混合在一起;

(7)每個(gè)芯片唯一編碼,支持聯(lián)網(wǎng)尋址,零功耗等待;

(8)DS18B20 有TO 92、SOIC 及CSP 封裝,其中VDD 為外接供電電源輸入端,GND 為公共地,DQ為數(shù)字信號(hào)輸出端;

(9)適用于冷凍庫(kù),糧倉(cāng),儲(chǔ)罐,GPS衛(wèi)星定位系統(tǒng),電訊機(jī)房,電力機(jī)房,電纜線槽等測(cè)溫和控制領(lǐng)域。


部件描述

存儲(chǔ)器---DS18B20的存儲(chǔ)器包括高速暫存器RAM和可電擦除RAM,可電擦除RAM又包括溫度觸發(fā)器TH和TL,以及一個(gè)配置寄存器。存儲(chǔ)器能完整的確定一線端口的通訊,數(shù)字開(kāi)始用寫(xiě)寄存器的命令寫(xiě)進(jìn)寄存器,接著也可以用讀寄存器的命令來(lái)確認(rèn)這些數(shù)字。當(dāng)確認(rèn)以后就可以用復(fù)制寄存器的命令來(lái)將這些數(shù)字轉(zhuǎn)移到可電擦除RAM中。當(dāng)修改過(guò)寄存器中的數(shù)時(shí),這個(gè)過(guò)程能確保數(shù)字的完整性。高速暫存器RAM是由8個(gè)字節(jié)的存儲(chǔ)器組成;用讀寄存器的命令能讀出第九個(gè)字節(jié),這個(gè)字節(jié)是對(duì)前面的八個(gè)字節(jié)進(jìn)行校驗(yàn)。

64-位光刻ROM---前8位是DS18B20的自身代碼,接下來(lái)的48位為連續(xù)的數(shù)字代碼,最后的8位是對(duì)前56位的CRC校驗(yàn)。64-位的光刻ROM又包括5個(gè)ROM的功能命令:讀ROM,匹配ROM,跳躍ROM,查找ROM和報(bào)警查找。?

外部電源的連---DS18B20可以使用外部電源VDD,也可以使用內(nèi)部的寄生電源。當(dāng)VDD端口接3.0V—5.5V的電壓時(shí)是使用外部電源;當(dāng)VDD端口接地時(shí)使用了內(nèi)部的寄生電源。無(wú)論是內(nèi)部寄生電源還是外部供電,I/O口線要接5KΩ左右的上拉電阻。

配置寄存器---配置不同的位數(shù)來(lái)確定溫度和數(shù)字的轉(zhuǎn)化。可以知道R1,R0是溫度的決定位,由R1,R0的不同組合可以配置為9位,10位,11位,12位的溫度顯示。這樣就可以知道不同的溫度轉(zhuǎn)化位所對(duì)應(yīng)的轉(zhuǎn)化時(shí)間,四種配置的分辨率分別為0.5℃,0.25℃,0.125℃和0.0625℃,出廠時(shí)以配置為12位。

溫度的讀取---DS18B20在出廠時(shí)以配置為12位,讀取溫度時(shí)共讀取16位,前5個(gè)位為符號(hào)位,當(dāng)前5位為1時(shí),讀取的溫度為負(fù)數(shù);當(dāng)前5位為0時(shí),讀取的溫度為正數(shù)。溫度為正時(shí)讀取方法為:將16進(jìn)制數(shù)轉(zhuǎn)換成10進(jìn)制即可。溫度為負(fù)時(shí)讀取方法為:將16進(jìn)制取反后加1,再轉(zhuǎn)換成10進(jìn)制即可。例:0550H = +85 度,F(xiàn)C90H = -55 度。


使用要點(diǎn)

DS18B20 采用的是單線總線協(xié)議方式,即在一條數(shù)據(jù)線上實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸,而單片機(jī)硬件上不支持單總線協(xié)議,因此必須采用軟件方法來(lái)模擬單總線的協(xié)議是序來(lái)完成對(duì)DS18B20 芯片的訪問(wèn)。由于DS18B20 是在一根I/ O 線上讀寫(xiě)數(shù)據(jù),因此對(duì)讀寫(xiě)的數(shù)據(jù)位有嚴(yán)格的時(shí)序要求,它有嚴(yán)格的通信協(xié)議來(lái)保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號(hào)的時(shí)序: 初始化時(shí)序、讀時(shí)序、寫(xiě)時(shí)序。所有時(shí)序都是將單片機(jī)作為主設(shè)備,DS18B20 作為從設(shè)備,而每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)主動(dòng)啟動(dòng)寫(xiě)時(shí)序開(kāi)始,如果要求DS18B20 回送數(shù)據(jù),在進(jìn)行寫(xiě)命令后,主機(jī)需啟動(dòng)讀時(shí)序完成數(shù)據(jù)接收。


幾個(gè)應(yīng)用電路


DS18B20單總線數(shù)字溫度傳感器模塊

一、尺寸:長(zhǎng)28mm X寬12mm X高10mm

二、主要芯片:18B20溫度傳感器

三、工作電壓:直流5V


模塊特點(diǎn)

1、分辨率調(diào)整范圍:9-12位

2、帶安裝孔方便安裝,孔徑:2.5

3、溫度測(cè)量范圍:-55~+125℃

4、溫度測(cè)量精度:0.5℃

5、工作電壓:DC5V

6、數(shù)字信號(hào)輸出


引腳接線

Arduino Uno? ?? ?<------>? ?? ?? ?18B20溫度傳感器模塊??

Pin 3? ?? ?? ?? ?? ?? ?<------>? ?? ?? ? OUT (S)? ?? ?

5V? ?? ?? ?? ?? ?? ?? ? <------>? ?? ?? ? VCC? ?

GND? ?? ?? ?? ?? ?? ? <------>? ?? ?? ? GND??


搜索、下載庫(kù)文件-DallasTemperature



后來(lái)又安裝了一個(gè)庫(kù)-OneWire

/*

【Arduino】108種傳感器模塊系列實(shí)驗(yàn)(資料+代碼+圖形+仿真)

實(shí)驗(yàn)三十九:DS18B20單總線數(shù)字溫度傳感器模塊

*/

#include <OneWire.h>

#include <DallasTemperature.h>

#define ONE_WIRE_BUS 3

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

void setup(void)

{

??Serial.begin(9600);

??Serial.println("Dallas Temperature IC Control Library Demo");

??sensors.begin();

}

void loop(void)

{

??Serial.print(" Requesting temperatures...");

??sensors.requestTemperatures();

??Serial.println("DONE");

??Serial.print("Temperature for Device 1 is: ");

??Serial.print(sensors.getTempCByIndex(0));??

??

??delay(500);

}


用手觸摸DS18B20,溫度升高



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容