溫度感測器:
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 當主機匯流排從高電平拉到低電平...