DS18B20溫度傳感器應用解析
溫度傳感器的種類眾多,在應用與高精度、高可靠性的場合時DALLAS(達拉斯)公司生產的DS18B20溫度傳感器當仁不讓。超小的體積,超低的硬件開消,抗干擾能力強,精度高,附加功能強,使得DS18B20更受歡迎。對于我們普通的電子愛好者來說,DS18B20的優(yōu)勢更是我們學習單片機技術和開發(fā)溫度相關的小產品的不二選擇。了解其工作原理和應用可以拓寬您對單片機開發(fā)的思路。
DS18B20的主要特征:
l * 全數(shù)字溫度轉換及輸出。
l * 先進的單總線數(shù)據通信。
l * 最高12位分辨率,精度可達土0.5攝氏度。
l * 12位分辨率時的最大工作周期為750毫秒。
l * 可選擇寄生工作方式。
l * 檢測溫度范圍為–55°C ~+125°C (–67°F ~+257°F)
l * 內置EEPROM,限溫報警功能。
l * 64位光刻ROM,內置產品序列號,方便多機掛接。
l * 多樣封裝形式,適應不同硬件系統(tǒng)。
l DS18B20芯片封裝結構:
DS18B20引腳功能:
•GND 電壓地 •DQ 單數(shù)據總線 •VDD 電源電壓 •NC 空引腳
DS18B20工作原理及應用:
DS18B20的溫度檢測與數(shù)字數(shù)據輸出全集成于一個芯片之上,從而抗干擾力更強。其一個工作周期可分為兩個部分,即溫度檢測和數(shù)據處理。在講解其工作流程之前我們有必要了解18B20的內部存儲器資源。18B20共有三種形態(tài)的存儲器資源,它們分別是:
ROM 只讀存儲器,用于存放DS18B20ID編碼,其前8位是單線系列編碼(DS18B20的編碼是19H),后面48位是芯片唯一的序列號,最后8位是以上56的位的CRC碼(冗余校驗)。數(shù)據在出產時設置不由用戶更改。DS18B20共64位ROM。
RAM 數(shù)據暫存器,用于內部計算和數(shù)據存取,數(shù)據在掉電后丟失,DS18B20共9個字節(jié)RAM,每個字節(jié)為8位。第1、2個字節(jié)是溫度轉換后的數(shù)據值信息,第3、4個字節(jié)是用戶EEPROM(常用于溫度報警值儲存)的鏡像。在上電復位時其值將被刷新。第5個字節(jié)則是用戶第3個EEPROM的鏡像。第6、7、8個字節(jié)為計數(shù)寄存器,是為了讓用戶得到更高的溫度分辨率而設計的,同樣也是內部溫度轉換、計算的暫存單元。第9個字節(jié)為前8個字節(jié)的CRC碼。EEPROM 非易失性記憶體,用于存放長期需要保存的數(shù)據,上下限溫度報警值和校驗數(shù)據,DS18B20共3位EEPROM,并在RAM都存在鏡像,以方便用戶操作。
我們在每一次讀溫度之前都必須進行復雜的且精準時序的處理,因為DS18B20的硬件簡單結果就會導致軟件的巨大開消,也是盡力減少有形資產轉化為無形資產的投入,是一種較好的節(jié)約之道。
控制器對18B20操作流程:
1、 復位:首先我們必須對DS18B20芯片進行復位,復位就是由控制器(單片機)給DS18B20單總線至少480uS的低電平信號。當18B20接到此復位信號后則會在15~60uS后回發(fā)一個芯片的存在脈沖。
2、 存在脈沖:在復位電平結束之后,控制器應該將數(shù)據單總線拉高,以便于在15~60uS后接收存在脈沖,存在脈沖為一個60~240uS的低電平信號。至此,通信雙方已經達成了基本的協(xié)議,接下來將會是控制器與18B20間的數(shù)據通信。如果復位低電平的時間不足或是單總線的電路斷路都不會接到存在脈沖,在設計時要注意意外情況的處理。
3、 控制器發(fā)送ROM指令:雙方打完了招呼之后最要將進行交流了,ROM指令共有5條,每一個工作周期只能發(fā)一條,ROM指令分別是讀ROM數(shù)據、指定匹配芯片、跳躍ROM、芯片搜索、報警芯片搜索。ROM指令為8位長度,功能是對片內的64位光刻ROM進行操作。其主要目的是為了分辨一條總線上掛接的多個器件并作處理。誠然,單總線上可以同時掛接多個器件,并通過每個器件上所獨有的ID號來區(qū)別,一般只掛接單個18B20芯片時可以跳過ROM指令(注意:此處指的跳過ROM指令并非不發(fā)送ROM指令,而是用特有的一條“跳過指令”)。ROM指令在下文有詳細的介紹。
4、 控制器發(fā)送存儲器操作指令:在ROM指令發(fā)送給18B20之后,緊接著(不間斷)就是發(fā)送存儲器操作指令了。操作指令同樣為8位,共6條,存儲器操作指令分別是寫RAM數(shù)據、讀RAM數(shù)據、將RAM數(shù)據復制到EEPROM、溫度轉換、將EEPROM中的報警值復制到RAM、工作方式切換。存儲器操作指令的功能是命令18B20作什么樣的工作,是芯片控制的關鍵。
5、 執(zhí)行或數(shù)據讀寫:一個存儲器操作指令結束后則將進行指令執(zhí)行或數(shù)據的讀寫,這個操作要視存儲器操作指令而定。如執(zhí)行溫度轉換指令則控制器(單片機)必須等待18B20執(zhí)行其指令,一般轉換時間為500uS。如執(zhí)行數(shù)據讀寫指令則需要嚴格遵循18B20的讀寫時序來操作。數(shù)據的讀寫方法將有下文有詳細介紹。
單支DS18B20若要讀出當前的溫度數(shù)據我們需要執(zhí)行兩次工作周期,第一個周期為:復位、跳過ROM指令[CCH]、執(zhí)行溫度轉換存儲器操作指令[44H]、等待500uS溫度轉換時間。緊接著執(zhí)行第二個周期為:復位、跳過ROM指令[CCH]、執(zhí)行讀RAM的存儲器操作指令[BEH]、讀數(shù)據(最多為9個字節(jié),中途可停止,只讀簡單溫度值則讀前2個字節(jié)即可)。其它的操作流程也大同小異,在此不多介紹。
DS18B20芯片與單片機的接口:
DS18B20只需要接到控制器(單片機)的一個I/O口上,由于單總線為開漏所以需要外接一個4.7K的上拉電阻。如要采用寄生工作方式,只要將VDD電源引腳與單總線并聯(lián)即可。但在程序設計中,寄生工作方式將會對總線的狀態(tài)有一些特殊的要求。
DS28B20芯片ROM指令表:
Read ROM(讀ROM)[33H] (方括號中的為16進制的命令字)
這個命令允許總線控制器讀到DS18B20的64位ROM。只有當總線上只存在一個DS18B20的時候才可以使用此指令,如果掛接不止一個,當通信時將會發(fā)生數(shù)據沖突。
Match ROM(指定匹配芯片)[55H]
這個指令后面緊跟著由控制器發(fā)出了64位序列號,當總線上有多只DS18B20時,只有與控制發(fā)出的序列號相同的芯片才可以做出反應,其它芯片將等待下一次復位。這條指令適應單芯片和多芯片掛接。
Skip ROM(跳躍ROM指令)[CCH]
這條指令使芯片不對ROM編碼做出反應,在單芯片的情況之下,為了節(jié)省時間則可以選用此指令。如果在多芯片掛接時使用此指令將會出現(xiàn)數(shù)據沖突,導致錯誤出現(xiàn)。
Search ROM(搜索芯片)[F0H]
在芯片初始化后,搜索指令允許總線上掛接多芯片時用排除法識別所有器件的64位ROM。
Alarm Search(報警芯片搜索)[ECH]
在多芯片掛接的情況下,報警芯片搜索指令只對符合溫度高于TH或小于TL報警條件的芯片做出反應。只要芯片不掉電,報警狀態(tài)將被保持,直到再一次測得溫度什達不到報警條件為止。
DS28B20芯片存儲器操作指令表:
Write Scratchpad (向RAM中寫數(shù)據)[4EH]
這是向RAM中寫入數(shù)據的指令,隨后寫入的兩個字節(jié)的數(shù)據將會被存到地址2(報警RAM之TH)和地址3(報警RAM之TL)。寫入過程中可以用復位信號中止寫入。
Read Scratchpad (從RAM中讀數(shù)據)[BEH]
此指令將從RAM中讀數(shù)據,讀地址從地址0開始,一直可以讀到地址9,完成整個RAM數(shù)據的讀出。芯片允許在讀過程中用復位信號中止讀取,即可以不讀后面不需要的字節(jié)以減少讀取時間。
Copy Scratchpad (將RAM數(shù)據復制到EEPROM中)[48H]
此指令將RAM中的數(shù)據存入EEPROM中,以使數(shù)據掉電不丟失。此后由于芯片忙于EEPROM儲存處理,當控制器發(fā)一個讀時間隙時,總線上輸出“0”,當儲存工作完成時,總線將輸出“1”。在寄生工作方式時必須在發(fā)出此指令后立刻超用強上拉并至少保持10MS,來維持芯片工作。
Convert T(溫度轉換)[44H]
收到此指令后芯片將進行一次溫度轉換,將轉換的溫度值放入RAM的第1、2地址。此后由于芯片忙于溫度轉換處理,當控制器發(fā)一個讀時間隙時,總線上輸出“0”,當儲存工作完成時,總線將輸出“1”。在寄生工作方式時必須在發(fā)出此指令后立刻超用強上拉并至少保持500MS,來維持芯片工作。
Recall EEPROM(將EEPROM中的報警值復制到RAM)[B8H]
此指令將EEPROM中的報警值復制到RAM中的第3、4個字節(jié)里。由于芯片忙于復制處理,當控制器發(fā)一個讀時間隙時,總線上輸出“0”,當儲存工作完成時,總線將輸出“1”。另外,此指令將在芯片上電復位時將被自動執(zhí)行。這樣RAM中的兩個報警字節(jié)位將始終為EEPROM中數(shù)據的鏡像。
Read Power Supply(工作方式切換)[B4H]
此指令發(fā)出后發(fā)出讀時間隙,芯片會返回它的電源狀態(tài)字,“0”為寄生電源狀態(tài),“1”為外部電源狀態(tài)。
DS18B20復位及應答關系
每一次通信之前必須進行復位,復位的時間、等待時間、回應時間應嚴格按時序編程。
DS18B20讀寫時間隙:
DS18B20的數(shù)據讀寫是通過時間隙處理位和命令字來確認信息交換的。
寫時間隙:
寫時間隙分為寫“0”和寫“1”,時序如圖7。在寫數(shù)據時間隙的前15uS總線需要是被控制器拉置低電平,而后則將是芯片對總線數(shù)據的采樣時間,采樣時間在15~60uS,采樣時間內如果控制器將總線拉高則表示寫“1”,如果控制器將總線拉低則表示寫“0”。每一位的發(fā)送都應該有一個至少15uS的低電平起始位,隨后的數(shù)據“0”或“1”應該在45uS內完成。整個位的發(fā)送時間應該保持在60~120uS,否則不能保證通信的正常。
讀時間隙:
讀時間隙時控制時的采樣時間應該更加的精確才行,讀時間隙時也是必須先由主機產生至少1uS的低電平,表示讀時間的起始。隨后在總線被釋放后的15uS中DS18B20會發(fā)送內部數(shù)據位,這時控制如果發(fā)現(xiàn)總線為高電平表示讀出“1”,如果總線為低電平則表示讀出數(shù)據“0”。每一位的讀取之前都由控制器加一個起始信號。注意:必須在讀間隙開始的15uS內讀取數(shù)據位才可以保證通信的正確。
在通信時是以8位“0”或“1”為一個字節(jié),字節(jié)的讀或寫是從高位開始的,即A7到A0.字節(jié)的讀寫順序也是如圖2自上而下的。





