DS18B20原理 傳感器參數(shù) 測溫范圍為-55℃到+125℃,在-10℃到+85℃范圍內(nèi)誤差為±0.4° 返回16位二進(jìn)制溫度數(shù)值 主機(jī)和從機(jī)通信使用單總線,即使用單線進(jìn)行數(shù)據(jù)的發(fā)送和接收 在使用中不需要任何外圍元件,獨立芯片即可完成工作 掉電保護(hù)功能 DS18B20 內(nèi)部含有 EEPROM ,通過配置寄存器可以設(shè)定數(shù)字轉(zhuǎn)換精度和報警溫度,在系統(tǒng)掉電以后,它仍可保存分辨率及報警溫度的設(shè)定值 每個DS18B20都有獨立唯一的64位-ID,此特性決定了它可以將任意多的DS18b20掛載到一根總線上,通過ROM搜索讀取相應(yīng)DS18B20的溫度值 寬電壓供電,電壓2.5V~5.5V DS18B20 返回的16位二進(jìn)制數(shù)代表此刻探測的溫度值,其高五位代表正負(fù)。如果高五位全部為1,則代表返回的溫度值為負(fù)值。如果高五位全部為0,則代表返回的溫度值 為正值。后面的11位數(shù)據(jù)代表溫度的絕對值,將其轉(zhuǎn)換為十進(jìn)制數(shù)值之后,再乘以0.0625即可獲得此時的溫度值 傳感器引腳及原理圖DS18B20傳感器的引腳及封裝圖如下: DS18B20一共有三個引腳,分別是: GND:電源地線 DQ:數(shù)字信號輸入/輸出端 VDD:外接供電電源輸入端

單個DS18B20接線方式:VDD接到電源,DQ接單片機(jī)引腳,同時外加上拉電阻,GND接地。 注意這個上拉電阻是必須的,就是DQ引腳必須要一個上拉電阻。 DS18B20上拉電阻首先來看一下什么是場效應(yīng)管(MOSFET),如下圖。

場效應(yīng)管是電壓控制型元器件,只要對柵極施加一定電壓,DS就會導(dǎo)通。 漏極開路:MOS管的柵極G和輸入連接,源極S接公共端,漏極D懸空(開路)什么也沒有接,直接輸出 ,這時只能輸出低電平和高阻態(tài),不能輸出高電平。 那么這個時候會出現(xiàn)三種情況: 下圖a為正常輸出(內(nèi)有上拉電阻):場效應(yīng)管導(dǎo)通時,輸出低電位輸出低電位,截止時輸出高電位 下圖b為漏極開路輸出,外接上拉電阻:場效應(yīng)管導(dǎo)通時,驅(qū)動電流是從外部的VCC流經(jīng)電阻通過MOSFET到GND,輸出低電位,截止時輸出高電位 下圖c為漏極開路輸出,無外接上拉電阻:場效應(yīng)管導(dǎo)通時輸出低電位,截止呈高阻態(tài)(斷開)

總結(jié)一下: 開漏輸出只能輸出低電平,不能輸出高電平。漏極開路輸出高電平時必須在輸出端與正電源(VCC)間外接一個上拉電阻。否則只能輸出高阻態(tài)。 DS18B20 是單線通信,即接收和發(fā)送都是這個通信腳進(jìn)行的。其接收數(shù)據(jù)時為高電阻輸入,其發(fā)送數(shù)據(jù)時是開漏輸出,本身不具有輸出高電平的能力,即輸出0時通過MOS 下拉為低電平,而輸出1時,則為高阻,需要外接上拉電阻將其拉為高電平。因此,需要外接上拉電阻,否則無法輸出1。 外接上拉電阻阻值: DS18B20的工作電流約為1mA,VCC一般為5V,則電阻R=5V/1mA=5KΩ,所以正常選擇4.7K電阻,或者相近的電阻值。 DS18B20寄生電源 DS18B20的另一個特點是不需要再外部供電下即可工作。當(dāng)總線高電平時能量由單線上拉電阻經(jīng)過DQ引腳獲得。高電平同時充電一個內(nèi)部電容,當(dāng)總線低電平時由此電容供應(yīng)能量。這種供電方法被稱為“寄生電源”。另外一種選擇是DSl8B20由接在VDD的外部電源供電。

DS18B20內(nèi)部構(gòu)成 主要由以下3部分組成: 64 位ROM 高速暫存器 存儲器 64位ROM存儲獨有的序列號,ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼,每個DS18B20的64位序列號均不相同。這樣就可以實現(xiàn)一根總線上掛接多個DS18B20的目的。 高速暫存器包含: 溫度傳感器 一個字節(jié)的溫度上限和溫度下限報警觸發(fā)器(TH和TL) 配置寄存器允許用戶設(shè)定9位,10位,11位和12位的溫度分辨率,分別對應(yīng)著溫度的分辨率為:0.5°C,0.25°C,0.125°C,0.0625°C,默認(rèn)為12位分辨率 存儲器:由一個高速的RAM和一個可擦除的EEPROM組成,EEPROM存儲高溫和低溫觸發(fā)器(TH和TL)以及配置寄存器的值,(就是存儲低溫和高溫報警值以及溫度分辨率)

DS18B20溫度讀取與計算 DS18B20采用16位補碼的形式來存儲溫度數(shù)據(jù),溫度是攝氏度。當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補碼形式存放在高速暫存存儲器的第0和第1個字節(jié)。 高字節(jié)的五個S為符號位,溫度為正值時S=1,溫度為負(fù)值時S=0。 剩下的11位為溫度數(shù)據(jù)位,對于12位分辨率,所有位全部有效,對于11位分辨率,位0(bit0)無定義,對于10位分辨率,位0和位1無定義,對于9位分辨率,位0,位1,和位2無定義。

對應(yīng)的溫度計算: 當(dāng)五個符號位S=0時,溫度為正值,直接將后面的11位二進(jìn)制轉(zhuǎn)換為十進(jìn)制,再乘以0.0625(12位分辨率),就可以得到溫度值。 當(dāng)五個符號位S=1時,溫度為負(fù)值,先將后面的11位二進(jìn)制補碼變?yōu)樵a(符號位不變,數(shù)值位取反后加1),再計算十進(jìn)制值。再乘以0.0625(12位分辨率),就可以得到溫度值。 舉兩個例子: 數(shù)字輸出07D0(00000111 11010000),轉(zhuǎn)換成10進(jìn)制是2000,對應(yīng)攝氏度:0.0625x2000=125°C 數(shù)字輸出為 FC90,首先取反,然后+1,轉(zhuǎn)換成原碼為:11111011 01101111,數(shù)值位轉(zhuǎn)換成10進(jìn)制是870,對應(yīng)攝氏度:-0.0625x870=-55°C 溫度對應(yīng)表如下:
 DS18B20工作步驟 DS18B20的工作步驟可以分為三步: 初始化DS18B20 執(zhí)行ROM指令 執(zhí)行DS18B20功能指令 其中第二步執(zhí)行ROM指令,也就是訪問每個DS18B20,搜索64位序列號,讀取匹配的序列號值,然后匹配對應(yīng)的DS18B20,如果我們僅僅使用單個DS18B20,可以直接跳過ROM指令。而跳過ROM指令的字節(jié)是0xCC。 初始化DS18B20 任 何器件想要使用,首先就是需要初始化,對于DS18B20單總線設(shè)備,首先初始化單總線為高電平,然后總線開始也需要檢測這條總線上是否存在 DS18B20這個器件。如果這條總線上存在DS18B20,總線會根據(jù)時序要求返回一個低電平脈沖,如果不存在的話,也就不會返回脈沖,即總線保持為高 電平。 初始化具體時序步驟如下: 單片機(jī)拉低總線至少480us,產(chǎn)生復(fù)位脈沖,然后釋放總線(拉高電平) 這時DS8B20檢測到請求之后,會拉低信號,大約60~240us表示應(yīng)答 DS8B20拉低電平的60~240us之間,單片機(jī)讀取總線的電平,如果是低電平,那么表示初始化成功 DS18B20拉低電平60~240us之后,會釋放總線
  采用多個DS18B20時,需要寫ROM指令來控制總線上的某個DS18B20。如果是單個DS18B20,直接寫跳過ROM指令0xCC即可。DS18B20寫入ROM功能指令如下表:

DS18B20的一些RAM功能指令如下表。其中常用的是溫度轉(zhuǎn)換指令,開啟溫度讀取轉(zhuǎn)換,讀取好的溫度會存儲在高速暫存器的第0個和第一個字節(jié)中。另一個常用的是讀取溫度指令,讀取高速暫存器存儲的數(shù)據(jù)。

讀時序讀時隙由主機(jī)拉低總線電平至少1μs然后再釋放總線,讀取DS18B20發(fā)送過來的1或者0。 DS18B20在檢測到總線被拉低1微秒后,便開始送出數(shù)據(jù),若是要送出0就把總線拉為低電平直到讀周期結(jié)束。若要送出1則釋放總線為高電平。

注意:所有讀時隙必須至少需要60us,且在兩次獨立的時隙之間至少需要1ps的恢復(fù)時間。 同時注意:主機(jī)只有在發(fā)送讀暫存器命令(0xBE)或讀電源類型命令(0xB4)后,立即生成讀時隙指令,DS18B20才能向主機(jī)傳送數(shù)據(jù)。也就是先發(fā)讀取指令,再發(fā)送讀時隙。 最后一點:寫時序注意是先寫命令的低字節(jié),比如寫入跳過ROM指令0xCC(11001100),寫的順序是“零、零、壹、壹、零、零、壹、壹”。 讀時序時是先讀低字節(jié),在讀高字節(jié),也就是先讀取高速暫存器的第0個字節(jié)(溫度的低8位),在讀取高速暫存器的第1個字節(jié)(溫度的高8位) 我們正常使用DS18B20讀取溫度讀取兩個溫度字節(jié)即可。
單片機(jī)源程序如下:
|