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