DS1620實(shí)現(xiàn)高分辨率溫度測(cè)量
DS1620是DALLAS半導(dǎo)體公司的溫度傳感器家庭成員之一,是新型數(shù)字式溫度傳感器。其測(cè)溫范圍寬(-55℃~+125℃),感應(yīng)能力精確,不需A/D轉(zhuǎn)換電路,直接將溫度值轉(zhuǎn)換成數(shù)字量。其外圍電路簡(jiǎn)單,可以不需要PC機(jī)和單片機(jī)等的支持,獨(dú)立進(jìn)行工作??蓮V泛應(yīng)用于溫度控制,溫度測(cè)量,工作系統(tǒng)及任何熱敏感系統(tǒng)中。
本文引用地址:http://cafeforensic.com/article/255670.htmDS1620為8引腳DIP或SOIC封裝,其引腳符號(hào)及功能見表1。
表1
引腳號(hào) | 符 號(hào) | 功 能 |
1 | DQ | 3線數(shù)據(jù)輸入/輸出端 |
2 | CLK/CONV | 3線時(shí)鐘輸入端/獨(dú)立工作端 |
3 | RST | 3線箝位輸入端(低電平復(fù)位) |
4 | GND | 接地端 |
5 | THIGH | 高溫觸發(fā)端 |
6 | TLOW | 低溫觸發(fā)端 |
7 | TCOM | 高溫/低溫結(jié)合觸發(fā)端 |
8 | VDD | +5V 電源端 |
測(cè)溫原理
DS1620通過專有的片載溫度測(cè)量技術(shù)進(jìn)行溫度測(cè)量。其測(cè)溫原理如圖1所示。
計(jì)數(shù)器和溫度寄存器預(yù)選設(shè)置為-55℃的基值,計(jì)數(shù)器對(duì)流經(jīng)低溫系數(shù)振蕩器的脈沖進(jìn)行計(jì)數(shù),計(jì)數(shù)脈沖的周期由高溫系數(shù)振蕩器決定。如果計(jì)數(shù)器在高溫系數(shù)振蕩器發(fā)出結(jié)束信號(hào)之前到達(dá)0,則溫度寄存器開始增值,表示溫度值在-55℃之上。同時(shí),計(jì)數(shù)器預(yù)設(shè)一個(gè)數(shù)值,此數(shù)值由非線性補(bǔ)償累加器決定,以補(bǔ)償振蕩器測(cè)溫過程中的拋物線性,即非線性。然后計(jì)數(shù)器重復(fù)進(jìn)行計(jì)數(shù)。如此循環(huán),最終溫度寄存器中的數(shù)字量即為所測(cè)溫度值。
溫度值的換算在DS1620內(nèi)部進(jìn)行,分辨率為0.5℃。DS1620的溫度值以1/2℃LSB(最低有效位)表示,9位數(shù)據(jù)格式如下:(T=25.5℃)
0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
非線性補(bǔ)償累加器的作用為補(bǔ)償測(cè)溫振蕩器的非線性誤差,改變每℃增值的計(jì)數(shù)器數(shù)值。若得知計(jì)數(shù)器中的數(shù)值和在補(bǔ)測(cè)溫度下每℃的計(jì)數(shù)(非線性補(bǔ)償累加器中的值),便可以實(shí)現(xiàn)高分辨率溫度測(cè)量。
DS1620在正常測(cè)溫情況下分辨率為0.5℃,根據(jù)其測(cè)溫工作原理,可以將其分辨率提高到0.1℃~0.05℃,以適應(yīng)需要精確溫度值的工業(yè)測(cè)量及控制系統(tǒng)。
大多數(shù)Dallas數(shù)字式溫度傳感器都能通過將最低有效位(LSB)置位或清零,以確保0.5℃的分辨率。傳感的誤差范圍由不同數(shù)值的LSB數(shù)字化決定。例如25℃至26℃之間的溫度值可參考表2。
表2
實(shí)際溫度值 | 置位/清零LSB | 直接讀數(shù) |
25 | 清零 | 25 |
25.1 | 清零 | 25 |
25.2 | 清零 | 25 |
25.3 | 置位 | 25.5 |
25.4 | 置位 | 25.5 |
25.5 | 置位 | 25.5 |
25.6 | 置位 | 25.5 |
25.7 | 置位 | 25.5 |
25.8 | 清零 | 26 |
25.9 | 清零 | 26 |
26 | 清零 | 26 |
由表可知,對(duì)于每一次讀入的溫度值,都以1/2LSB為單位進(jìn)行四舍五入計(jì)算,DS1620的1/2LSB為0.25℃,它在進(jìn)行高分辨率測(cè)量的計(jì)算中必須考慮在內(nèi)。
DS1620讀進(jìn)的原始數(shù)據(jù)為9位,對(duì)所讀數(shù)據(jù)減去最低有效位,使可得到高分辨率值。計(jì)算過程為:將讀入的溫度可存器二進(jìn)制數(shù)字量轉(zhuǎn)化成帶符號(hào)整數(shù),即temp read;然后對(duì)DS1620執(zhí)行特定的控制指令,使可得到保留在計(jì)數(shù)器中的數(shù)值,即轉(zhuǎn)換停止后的計(jì)數(shù)器保留數(shù)cont remain:以另一特定控制指令或指令集讀出非線性累加器中的數(shù)值,即在此溫度下每℃的計(jì)數(shù)值count per degree,得知這些參數(shù)后,通過如下公式:
實(shí)際值=temp read 1/2LSB+(count per degree count remain)/count per degree
實(shí)際的精確溫度值便可計(jì)算出來,分辨率高達(dá)0.1℃。
DS1620的工作方式及狀態(tài)檢測(cè)位由設(shè)置寄存器決定,在進(jìn)行溫度轉(zhuǎn)換之前首先要對(duì)其初始化,由PC機(jī)或單片機(jī)設(shè)定設(shè)置寄存器的相應(yīng)位。設(shè)置寄存器格式如下:
DONE | THF | TLF | * | * | * | CPU | ISHOT |
DONE(D7)位為1時(shí)表示溫度轉(zhuǎn)換已經(jīng)完成,為0時(shí)表示轉(zhuǎn)換正在進(jìn)行。注意此位只在單次轉(zhuǎn)換方式時(shí)有效。
THF(D6)TLF(D5)位分別為高于高溫極限值或低于低溫極限值時(shí)置位。
ISHOT(D0)位為1時(shí)表示以溫度單次轉(zhuǎn)換方式運(yùn)行,為0時(shí)表示連續(xù)方式。
CPU(D1)位為1時(shí)表示DS1620以3線串行接口與PC機(jī)或單片機(jī)通信,為0時(shí)表示獨(dú)立工作方式。
*表示無關(guān)位。
在DS1620以CPU方式工作時(shí),PC機(jī)或單片機(jī)的程序流程如圖2所示。
在實(shí)現(xiàn)過程中注意下面問題:
1.實(shí)現(xiàn)過程中必須用到兩條特殊指令:讀計(jì)數(shù)器指令(A0H)和裝載計(jì)數(shù)器指令(41H),這兩條指令在DS1620使用手冊(cè)上查不到。前一條指令的作用為讀出計(jì)數(shù)器中的數(shù)值,后一條指令的作用為將非線性累加器中的數(shù)值裝入計(jì)數(shù)器。
2.在數(shù)據(jù)傳輸過程中,DQ線上數(shù)據(jù)的傳輸順序?yàn)長(zhǎng)SB(最低有效位)在先,MSB(最高有效位)在最后。例如設(shè)置寄存器狀態(tài)字節(jié)的傳送,第一位ISHOT位(D0),其次為CPU位(D1),依次下去,第八位為DONE位(D7)。
3.從DQ引腳上讀取數(shù)據(jù)時(shí),設(shè)置寄存器的狀態(tài)為8位數(shù)據(jù),而溫度數(shù)據(jù)為9位,這在編程時(shí)要加以區(qū)別??梢跃幾x取8位數(shù)據(jù)和9位數(shù)據(jù)的子函數(shù)分別調(diào)用,也可只編讀取9位的程序,但在判斷設(shè)置寄存器狀態(tài)時(shí)只取前8位。
4.注意在常溫下,每次寫入DS1620存儲(chǔ)器都需要近10ms,所以在寫指令之后不能立即對(duì)DS1620進(jìn)行讀寫訪問,通常加10ms的延時(shí)。
5.DS1620是以STOP(RST=0)作為一次數(shù)據(jù)通信的結(jié)束。因此在每次設(shè)置操作結(jié)束或讀取8位溫度數(shù)據(jù)后,都要將RST引腳復(fù)位為低電平,然后置為高電平重新開始工作。
6.以在溫度單次轉(zhuǎn)換方式工作時(shí),每次轉(zhuǎn)換完成并讀取溫度值之后,都要重新發(fā)送開始溫度轉(zhuǎn)換指令(EE H)。而在連續(xù)轉(zhuǎn)換方式只需開始發(fā)送轉(zhuǎn)換指令,DS1620會(huì)在一次溫度轉(zhuǎn)換完成后,繼續(xù)進(jìn)行一睛次轉(zhuǎn)換,時(shí)間間隔為1秒。此時(shí)停止轉(zhuǎn)換指令(22H)將暫停溫度轉(zhuǎn)換,開始轉(zhuǎn)換指令會(huì)重新開始轉(zhuǎn)換。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論