宋世彥
[摘 要] DS18B20數(shù)字溫度傳感器具有體積小、接線簡(jiǎn)單、測(cè)溫精準(zhǔn)、抗干擾能力強(qiáng)等優(yōu)點(diǎn),在空調(diào)、管槽線槽、電信機(jī)房等社會(huì)生活的各個(gè)方面都得到了廣泛應(yīng)用。
[關(guān) 鍵 詞] 溫度傳感器;數(shù)據(jù)處理;精度
[中圖分類號(hào)] G718 [文獻(xiàn)標(biāo)志碼] A [文章編號(hào)] 2096-0603(2016)14-0083-01
DS18B20數(shù)字溫度傳感器采用單總線一線式總線協(xié)議,即在一根數(shù)據(jù)線上實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸,所以單片機(jī)對(duì)數(shù)據(jù)處理必須采用軟件的方法來模擬單總線的協(xié)議時(shí)序來完成對(duì)DS18B20芯片的訪問,要求對(duì)讀寫的數(shù)據(jù)位有嚴(yán)格的時(shí)隙來保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。下面我們將就DS18B20傳感器在接線、時(shí)序、數(shù)據(jù)處理等幾個(gè)方面進(jìn)行要點(diǎn)剖析,全面掌握它的使用。
一、硬件接線
對(duì)于TO封裝的DS18B20只有3個(gè)引腳,正對(duì)平面(有字母的一面)引腳垂直,最右側(cè)為電源,中間為數(shù)據(jù),左側(cè)是地線。
DS18B20采用單總線的接線方式,可以實(shí)現(xiàn)多點(diǎn)分布式測(cè)溫。供電方式靈活,根據(jù)實(shí)際情況可以選擇單獨(dú)電源供電或者寄生供電方式。
(一)外部電源供電方式
外部電源供電方式是DS18B20最佳的工作方式,電路簡(jiǎn)單,工作穩(wěn)定,抗干擾能力強(qiáng),可以保證溫度測(cè)量精度。當(dāng)DS18B20采用外部供電時(shí),工作電源由VDD引腳接入,GND引腳接地,此時(shí)I/O線不需要強(qiáng)上拉,不存在電源電流不足的問題,可以保證轉(zhuǎn)換精度,只需將其數(shù)據(jù)線與單片機(jī)的一位雙向端口相連就可以實(shí)現(xiàn)數(shù)據(jù)的傳遞,如果讀取的溫度始終顯示85℃,那么很可能是電源接反了,改過來就可以了,一般不會(huì)損壞芯片。
(二)寄生電源供電方式
DS18B20可以通過內(nèi)部寄生電路從單線數(shù)據(jù)線上獲取電源,在信號(hào)線處于高電平期間把能量存儲(chǔ)在內(nèi)部電容里,在信號(hào)線處于低電平期間消耗電容上的電能使DS18B20工作,直到高電平到再次給寄生電源(電容)充電。
在寄生電源方式工作時(shí),DS18B20可以進(jìn)行遠(yuǎn)距離測(cè)溫,無需本地電源,電路更加簡(jiǎn)單(VDD必須接地),在遠(yuǎn)程溫度測(cè)量和測(cè)量空間受限的情況下非常有用。但是DS18B20在溫度轉(zhuǎn)換期間工作電流達(dá)到了1mA以上,超出了內(nèi)部電容所能提供的電流,要想保證溫度轉(zhuǎn)換的精度,I/O線必須提供足夠的能量,當(dāng)多個(gè)
DS18B20掛在同一根總線上進(jìn)行多點(diǎn)測(cè)溫時(shí),4.7K上拉無法提供足夠的能量,會(huì)造成誤差較大或無法轉(zhuǎn)換溫度。一般我們?cè)倌贸鲆桓鵌/O口線控制MOSFET管把總線直接拉到VCC上就可以解決這個(gè)問題了。
(三)分布式測(cè)溫
當(dāng)多個(gè)DS18B20進(jìn)行分布式測(cè)溫時(shí),可以將所有的器件引腳對(duì)應(yīng)連接到一起就可以了,通過讀取每個(gè)DS18B20內(nèi)部芯片的序列號(hào)來識(shí)別。
在總線上理論上可以掛接任意多個(gè)DS18B20傳感器,組成多點(diǎn)測(cè)溫系統(tǒng),但實(shí)際上,當(dāng)單總線所掛DS18B20超過8個(gè)時(shí),就需要解決總線驅(qū)動(dòng)問題了。
(四)遠(yuǎn)距離測(cè)溫
在進(jìn)行遠(yuǎn)距離測(cè)溫時(shí),連接DS18B20的總線電纜長(zhǎng)度也是有限制的,主要原因是總線分布電容使信號(hào)波形產(chǎn)生畸變,采用普通信號(hào)電纜傳輸長(zhǎng)度超過50米時(shí),讀取的溫度值就將發(fā)生錯(cuò)誤,因此長(zhǎng)距離測(cè)溫時(shí)要充分考慮總線分布電容和阻抗匹配的問題。
二、時(shí)序要求
由于DS18B20在一根線上實(shí)現(xiàn)數(shù)據(jù)的發(fā)送與接收,因此,對(duì)讀寫的數(shù)據(jù)位有著嚴(yán)格的時(shí)隙要求,才能保證各位數(shù)據(jù)傳輸時(shí)的正確性和完整性。
控制器先發(fā)出負(fù)脈沖(750個(gè)微妙左右)“我要通信”的要求信號(hào)后等待DS18B20回復(fù),DS18B20收到(上升沿)邀請(qǐng)后稍矜持(15~60個(gè)微妙)下,馬上拉低總線(60~240個(gè)微妙)表示“我在”,產(chǎn)生應(yīng)答脈沖,控制器收到響應(yīng)后,表示握手成功,可以通信了。在實(shí)際使用上,我們往往發(fā)出邀請(qǐng)一段時(shí)間后(延時(shí)跳過響應(yīng)信號(hào)),直接向DS18B20發(fā)出讀寫信號(hào)。
DS18B20進(jìn)行溫度轉(zhuǎn)換的時(shí)間和分辨率有關(guān),需要的時(shí)間大概在94~750個(gè)毫秒。
三、數(shù)據(jù)處理
DS18B20在啟動(dòng)溫度轉(zhuǎn)換后,溫度數(shù)據(jù)存儲(chǔ)在高速暫存器RAM的第0~1個(gè)字節(jié)里,我們?cè)谧x取數(shù)據(jù)BE命令后,每次只能讀取一位,讀取時(shí)低位在前,這時(shí)數(shù)據(jù)的處理就很重要了。
(一)變量類型的定義
由于每次只能讀、寫一位數(shù)據(jù),所以這時(shí)數(shù)據(jù)類型必須定義成位變量bit型。
溫度數(shù)據(jù)存儲(chǔ)在高速暫存器RAM的第0~1個(gè)字節(jié)里,不管分辨率是9位還是12位,溫度數(shù)據(jù)都要占2個(gè)字節(jié),單片機(jī)是8位的,所以都要對(duì)2個(gè)字節(jié)的數(shù)據(jù)進(jìn)行高8位和低8位的合成處理,這時(shí)的2個(gè)接收變量要定義成8位字符型(unsigned char),合成16位完整溫度數(shù)據(jù)時(shí),數(shù)據(jù)類型就要定義成16位的unsigned int型,當(dāng)我們進(jìn)行最后的十進(jìn)制溫度轉(zhuǎn)換時(shí)(含有小數(shù)),變量類型定義成為float就可以了。
(二)數(shù)據(jù)的處理方法
讀字節(jié)數(shù)據(jù)時(shí)低位在前,很多人采用dat=(j<<7)|(dat>>1)語句,個(gè)人覺得可以采用庫里自帶的字符循環(huán)右移函數(shù)_cror_(a,b)更方便些。
DS18B20在出廠時(shí)默認(rèn)配置為12位,其中最高位是符號(hào)位,即溫度值共11位,2個(gè)字節(jié)合計(jì)16位,也就是說高5位都可以看成是相同的符號(hào)位,同時(shí)變化。前5位是1時(shí),讀取的溫度值是負(fù)數(shù),取得的數(shù)值需要取反加1再乘以0.0625才可以得到實(shí)際的溫度值。當(dāng)前5位為0時(shí),讀取的溫度為正值,只要將得到的數(shù)值乘以0.0625就可以得到實(shí)際的溫度值了。
在程序中,采用浮點(diǎn)型變量f_temp來接收整型變量temp乘以0.0625得到的實(shí)際溫度值,這時(shí)得到的實(shí)際溫度值是含有小數(shù)的,而我們的數(shù)碼管處理顯示的都是整數(shù),要顯示小數(shù),必須人為地加上小數(shù)點(diǎn),所以我們還要再次對(duì)數(shù)據(jù)處理,首先把得到的浮點(diǎn)型溫度數(shù)據(jù)f_temp乘以10把數(shù)據(jù)擴(kuò)大十倍,目的是為了在數(shù)碼管上顯示小數(shù)部分(人為加上小數(shù)點(diǎn)),再加上0.5后是為了對(duì)溫度數(shù)據(jù)四舍五入,最后把f_temp送給整型變量temp舍去小數(shù)部分。這時(shí)得到的數(shù)據(jù)就可以送去數(shù)碼管顯示了,顯示的數(shù)據(jù)精度為四舍五入后帶一位小數(shù)。
在DS18B20程序調(diào)試時(shí),如果發(fā)現(xiàn)諸如溫度顯示錯(cuò)誤等故障,基本上都是由于時(shí)隙的誤差較大甚至?xí)r序錯(cuò)誤或者是變量類型定義錯(cuò)誤導(dǎo)致的,一定要嚴(yán)格參照時(shí)序圖,精確把握總線電平隨時(shí)間(微秒級(jí))的變化,正確地使用變量,才能夠順利地控制和操作DS18B20。
參考文獻(xiàn):
[1]戴佳,戴衛(wèi)恒.51單片機(jī)C語言應(yīng)用程序設(shè)計(jì)[M].北京:電子工業(yè)出版社,2006.
[2]李華.MCS-51單片機(jī)實(shí)用接口技術(shù)[M].北京:北京航空航天出版社,1997.