能溫度傳感器Dsl8b20在多路測(cè)溫中的應(yīng)用
單總線芯片可以使得硬件結(jié)構(gòu)非常簡(jiǎn)單,特別適合應(yīng)用在對(duì)于距離遠(yuǎn)、節(jié)點(diǎn)分布多的場(chǎng)合,如糧倉(cāng)溫度檢測(cè),大棚溫室溫度監(jiān)控等。本文給出的設(shè)計(jì)通用性好,可以方便地移植到其他應(yīng)用場(chǎng)合。
本文引用地址:http://www.ex-cimer.com/article/78552.htm1 Dsl8b20編程簡(jiǎn)介
每一片單總線芯片內(nèi)部都有一個(gè)全球惟一的64b編碼,在多路測(cè)溫時(shí)就是通過匹配每個(gè)芯片的ROM編碼(1D),來搜尋該路的溫度。Dsl8b20有9個(gè)可擦寫的內(nèi)部寄存器,稱為便箋式RAM。所有的串行通訊,讀寫每一個(gè)bit位數(shù)據(jù)都必須嚴(yán)格遵守器件的時(shí)序邏輯來編程,同時(shí)還必須遵守總線命令序列,對(duì)單總線的Dsl8b20芯片來說,訪問每個(gè)器件都要遵守下列命令序列: 首先是初始化;其次執(zhí)行ROM命令;最后就是執(zhí)行功能命令(ROM命令和功能命令后面以表格形式給出)。
如果出現(xiàn)序列混亂,則單總線器件不會(huì)響應(yīng)主機(jī)。當(dāng)然,搜索ROM命令和報(bào)警搜索命令,在執(zhí)行兩者中任何一條命令之后,要返回初始化。
基于單總線上的所有傳輸過程都是以初始化開始的,初始化過程由主機(jī)發(fā)出的復(fù)位脈沖和從機(jī)響應(yīng)的應(yīng)答脈沖組成。應(yīng)答脈沖使主機(jī)知道,總線上有從機(jī)設(shè)備,且準(zhǔn)備就緒。
在主機(jī)檢測(cè)到應(yīng)答脈沖后,就可以發(fā)出ROM命令。這些命令與各個(gè)從機(jī)設(shè)備的惟一64 bROM代碼相關(guān)。在主機(jī)發(fā)出ROM命令,以訪問某個(gè)指定的Dsl8620,接著就可以發(fā)出Dsl8620支持的某個(gè)功能命令。這些命令允許主機(jī)寫入或讀出Dsl8b20便箋式RAM、啟動(dòng)溫度轉(zhuǎn)換。軟件實(shí)現(xiàn) Dsl8b20的工作嚴(yán)格遵守單總線協(xié)議:
(1)主機(jī)首先發(fā)一復(fù)位脈沖,信號(hào)線上所有Dsl8620器件都被復(fù)位。
(2)接著主機(jī)發(fā)送ROM命令,程序開始讀取單個(gè)在線的芯片ROM編碼并保存在單片機(jī)數(shù)據(jù)存儲(chǔ)器中,然后卸下已讀出的,將未讀出編碼的Dsl8620逐個(gè)掛在總線上并讀取其ROM編碼,直到把所有的需要用到的Dsl8620的ROM編碼都離線讀出,最后用一個(gè)二維數(shù)組保存所有這些ROM編碼,數(shù)據(jù)保存在X25043中。
(3)系統(tǒng)工作時(shí),把所有讀取了編碼的且需要用的Dsl8b20掛在總線上。發(fā)溫度轉(zhuǎn)換命令,再總線復(fù)位。
(4)然后就可以從剛才的二維數(shù)組逐個(gè)匹配在線的溫度傳感器,隨后發(fā)溫度讀取命令就可以依次獲得各路對(duì)應(yīng)的溫度值了。讀取溫度軟件流程框圖如圖1所示。
在主機(jī)初始化過程,主機(jī)通過拉低單總線至少480/us,以產(chǎn)生復(fù)位脈沖。接著,主機(jī)釋放總線,并進(jìn)入接收模式。當(dāng)總線被釋放后,上拉電阻將單總線拉高。在單總線器件檢測(cè)到上升沿后,延時(shí)15~60/us,接著通過拉低總線60-240//s,以產(chǎn)生應(yīng)答脈沖。
//總線復(fù)位程序
bit dsl8b20_reset(void)
寫時(shí)隙均起始于主機(jī)拉低總線,產(chǎn)生寫1時(shí)隙的方式:主機(jī)在拉低總線后,接著必須在15uPs之內(nèi)釋放總線;而產(chǎn)生寫。時(shí)隙的方式:在主機(jī)拉低總線后,只需在整個(gè)時(shí)隙期間保持低電平即可(至少60us)。
在寫字節(jié)程序中的寫一個(gè)bit位的時(shí)候,沒有按照通常的分別寫。時(shí)序和寫1時(shí)序,而是把兩者結(jié)合起來,當(dāng)主機(jī)拉低總線后在15us之內(nèi)將要寫的位c給DO:如果c是高電平滿足15/is內(nèi)釋放總線的要求,如果c是低電平,則DO
=c這條語句仍然是把總線拉在低電平,最后都通過延時(shí)58us完成一個(gè)寫時(shí)序(寫時(shí)序0或?qū)憰r(shí)序1)過程。
每個(gè)讀時(shí)隙都由主機(jī)發(fā)起,至少拉低總線1us,在主機(jī)發(fā)起讀時(shí)隙之后,單總線器件才開始在總線上發(fā)送?;?。所有讀時(shí)隙至少需要60us。
以上3個(gè)子程序雖然是針對(duì)Dsl8b20開發(fā)的,其實(shí)單總線芯片的時(shí)序都相似,只要根據(jù)其他類似芯片的時(shí)序特點(diǎn)對(duì)上述子程序稍做修改就可以同樣使用。下面是多點(diǎn)測(cè)溫主程序。輸入?yún)?shù)x為測(cè)溫點(diǎn)的號(hào)碼。
限于篇幅,這里沒有列出讀單個(gè)Dsl8620芯片ROM編號(hào)的程序。多路測(cè)溫沒有采用發(fā)ROM命令0FH搜索所有在線溫度傳感器,而是采用ROM命令33H先離線讀出需要用到的每個(gè)溫度傳感器,這樣做不但簡(jiǎn)化了編程,也不用進(jìn)行在線的逐個(gè)搜索ROM編碼而浪費(fèi)大量的時(shí)間等待搜索是否完成(平均每搜索75個(gè)芯片ROM編碼需1s)。通過離線一片一片地讀出其中ROM編碼,在存儲(chǔ)這些編碼的二維數(shù)組中也可以事先匹配好測(cè)溫的對(duì)象。
3 應(yīng)用實(shí)例
在混凝土大壩溫度檢測(cè)中,需要實(shí)時(shí)而準(zhǔn)確地顯示溫度變化情況,將溫度傳感器埋在需要溫度監(jiān)控的位置,每個(gè)測(cè)溫模塊在需要重點(diǎn)監(jiān)控溫度的地方都放置了測(cè)溫芯片,而測(cè)溫模塊分布很廣,所以單片機(jī)采用RS485總線形式與上位機(jī)通訊,該總線為主從式,通訊接口用RS485芯片MAXl487,經(jīng)驗(yàn)證,當(dāng)波特率選為9 600kb/s時(shí),通訊距離可在2 km左右范圍正常工作,上位機(jī)發(fā)命令輪巡讀取下位機(jī)端溫度,下位機(jī)之間不傳遞數(shù)據(jù),下位機(jī)收到上位機(jī)發(fā)來的命令,啟動(dòng)測(cè)溫點(diǎn)溫度轉(zhuǎn)換,轉(zhuǎn)換完后送上位機(jī),并在LED上顯示,整個(gè)工作由上位機(jī)程序和下位機(jī)串口中斷協(xié)調(diào)完成,該系統(tǒng)測(cè)溫值穩(wěn)定、精確。
4 結(jié) 語
在大范圍多點(diǎn)測(cè)溫系統(tǒng)中,這種分布式溫度監(jiān)控系統(tǒng)具有廣闊的應(yīng)用前景。
評(píng)論