溫度感測器DS18B20工作原理

2023-02-04 18:42:02 字數 3635 閱讀 4063

溫度感測器:

ds18b20是dallas公司生產的一線式數字溫度感測器,具有3引腳to-92小體積封裝形式;溫度測量範圍為-55℃~+125℃,可程式設計為9位~12位a/d轉換精度,測溫解析度可達0.0625℃,被測溫度用符號擴充套件的16位數字量方式序列輸出;其工作電源既可在遠端引入,也可採用寄生電源方式產生;多個ds18b20可以併聯到3根或2根線上,cpu只需一根埠線就能與諸多ds18b20通訊,占用微處理器的埠較少,可節省大量的引線和邏輯電路。以上特點使ds18b20非常適用於遠距離多點溫度檢測系統。

2 ds18b20的內部結構

ds18b20內部結構如圖1所示,主要由4部分組成:64位rom、溫度感測器、非揮發的溫度報警觸發器th和tl、配置暫存器。ds18b20的管腳排列如圖2所示,dq為數碼訊號輸入/輸出端;gnd為電源地;vdd為外接供電電源輸入端(在寄生電源接線方式時接地,見圖4)。

rom中的64位序列號是出廠前被光刻好的,它可以看作是該ds18b20的位址序列碼,每個ds18b20的64位序列號均不相同。64位rom的排的迴圈冗餘校驗碼(crc=x8+x5+x4+1)。rom的作用是使每乙個ds18b20都各不相同,這樣就可以實現一根匯流排上掛接多個ds18b20的目的。

圖1 ds18b20的內部結構

圖2ds18b20的管腳排列

ds18b20中的溫度感測器完成對溫度的測量,用16位符號擴充套件的二進位制補碼讀數形式提供,以0.0625℃/lsb形式表達,其中s為符號位。例如+125℃的數字輸出為07d0h,+25.

0625℃的數字輸出為0191h,-25.0625℃的數字輸出為ff6fh,-55℃的數字輸出為fc90h。

溫度值高位元組

高低溫報警觸發器th和tl、配置暫存器均由乙個位元組的eeprom組成,使用乙個儲存器功能命令可對th、tl或配置暫存器寫入。其中配置暫存器的格式如下:

r1、r0決定溫度轉換的精度位數:r1r0=「00」,9位精度,最大轉換時間為93.75ms;r1r0=「01」,10位精度,最大轉換時間為187.

5ms;r1r0=「10」,11位精度,最大轉換時間為375ms;r1r0=「11」,12位精度,最大轉換時間為750ms;未程式設計時預設為12位精度。

高速暫存器是乙個9位元組的儲存器。開始兩個位元組包含被測溫度的數字量資訊;第3、4、5位元組分別是th、tl、配置暫存器的臨時拷貝,每一次上電復位時被重新整理;第6、7、8位元組未用,表現為全邏輯1;第9位元組讀出的是前面所有8個位元組的crc碼,可用來保證通訊正確。

3 ds18b20的工作時序

ds18b20的一線工作協議流程是:初始化→rom操作指令→儲存器操作指令→資料傳輸。其工作時序包括初始化時序、寫時序和讀時序,如圖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與微處理器的典型連線圖

假設微控制器系統所用的晶振頻率為12mhz,根據ds18b20的初始化時序、寫時序和讀時序,分別編寫了3個子程式:init為初始化子程式,write為寫(命令或資料)子程式,read為讀資料子程式,所有的資料讀寫均由最低位開始。

datequp1.0

…… init:clrea

ini10:setbdat

movr2,#200

ini11:clrdat

djnzr2,ini11;主機發復位脈衝持續3μs×200=600μs

setbdat;主機釋放匯流排,口線改為輸入

movr2,#30

in12:djnzr2,ini12;ds18b20等待2μs×30=60μs

clrc

orlc,dat;ds18b20資料線變低(存在脈衝)嗎?

jcini10;ds18b20未準備好,重新初始化

movr6,#80

ini13:orlc,dat

jcini14;ds18b20資料線變高,初始化成功

djnzr6,ini13;資料線低電平可持續3μs×80=240μs

sjmpini10;初始化失敗,重來

ini14:movr2,#240

in15:djnzr2,ini15;ds18b20應答最少2μs×240=480μs

retwrite:clrea

movr3,#8;迴圈8次,寫乙個位元組

wr11:setbdat

movr4,#8

rrca;寫入位從a中移到cy

clrdat

wr12:djnzr4,wr12

;等待16μs

movdat,c;命令字按位依次送給ds18b20

movr4,#20

wr13:djnzr4,wr13

;保證寫過程持續60μs

djnzr3,wr11

;未送完乙個位元組繼續

setbdat

retread:clrea

movr6,#8;迴圈8次,讀乙個位元組

rd11:clrdat

movr4,#4

nop;低電平持續2μs

setbdat;口線設為輸入

rd12:djnzr4,rd12

;等待8μs

movc,dat

;主機按位依次讀入ds18b20的資料

rrca;讀取的資料移入a

movr5,#30

rd13:djnzr5,rd13

;保證讀過程持續60μs

djnzr6,rd11

;讀完乙個位元組的資料,存入a中

setbdat

ret主機控制ds18b20完成溫度轉換必須經過三個步驟:初始化、rom操作指令、儲存器操作指令。必須先啟動ds18b20開始轉換,再讀出溫度轉換值。

假設一線僅掛接乙個晶元,使用預設的12位轉換精度,外接供電電源,可寫出完成一次轉換並讀取溫度值子程式getwd。

getwd:lcallinit

mova,#0cch

lcallwrite;發跳過rom命令

mova,#44h

lcallwrite;發啟動轉換命令

lcallinit

mova,#0cch;發跳過rom命令

lcallwrite

mova,#0beh;發讀儲存器命令

lcallwrite

lcallread

movwdlsb,a

;溫度值低位位元組送wdlsb

lcallread

movwdmsb,a

;溫度值高位位元組送wdmsb

ret…… 子程式getwd讀取的溫度值高位位元組送wdmsb單元,低位位元組送wdlsb單元,再按照溫度值位元組的表示格式及其符號位,經過簡單的變換即可得到實際溫度值。

如果一線上掛接多個ds18b20、採用寄生電源連線方式、需要進行轉換精度配置、高低限報警等,則子程式getwd的編寫就要複雜一些,限於篇幅,這一部分不再詳述,請參閱相關內容。

我們已成功地將ds18b20應用於所開發的「家用採暖洗浴器」控制系統中,其轉換速度快,轉換精度高,與微處理器的介面簡單,給硬體設計工作帶來了極大的方便,能有效地降低成本,縮短開發周期。

DS18B20數字溫度感測器

dallas半導體公司的數位化溫度感測器ds1820是世界上第一片支援 一線匯流排 介面的溫度感測器,體積更小 適用電壓更寬 更經濟。一線匯流排獨特而且經濟的特點,使使用者可輕鬆地組建溫度感測器網路,為測量系統的構建引入全新概念。ds18b20 ds1822 一線匯流排 數位化溫度感測器同ds182...

菜鳥的ds18b20總結

之前玩了一下ds18b20,但一直沒有總結,忽然有種總結的衝動,所以就寫了這些。以下的這些只是我個人對部分文件的理解,水平不夠,難免會有誤,請各位指正,一 初始化,如圖一 資料線拉低至少480us後再將其拉高,大約等待15 60us,就會收到60 240us的低電平的存在脈衝,其後資料線會恢復被拉高...

我寫DS18B20總結

unsigned int n for n 0 n void chushihua dq 0 delay 600 送480us脈衝 根據時序 dq 1 delay 35 大約60us左右 這樣就完成了ds18b20的初始化工作。初始化之後要向資料埠dq寫資料,寫0或者是1 當主機匯流排從高電平拉到低電平...