摘要:介紹了單總線測溫器件DS18B20及其與ATmega8 單片機共同組成單總線測溫系統(tǒng)的接口方法,并給出了其核心的μS級軟件延時的C語言源程序和對DS18B20進行操作的程序框圖,以及利用C語言實現(xiàn)接口軟件的方法以及使用時的技巧和需要注意的一些問題。
關鍵詞: 單總線; 單片機; 嵌入式C
1.引言
工業(yè)生產過程中,普遍存在著需要進行溫度測量的場合。利用單片機和溫度傳感器組成的專用測溫系統(tǒng)由于具有結構簡單、工作可靠、價格低廉的優(yōu)勢,而得到了廣泛的應用。
目前市場上單片機種類繁多,各具優(yōu)勢,ATMEL公司生產的mega8單片機無疑是其中較為典型的一種,它的內部集成了較大容量的存儲器和豐富強大的硬件接口電路,如定時/計數(shù)器、實時時鐘、PWM通道、A/D轉換器、I2C的串行接口、可編程的串行USART接口、SPI串行接口和帶片內晶振的可編程看門狗定時器以及片內的模擬比較器等,除傳感器外幾乎可以不需要其它任何元件獨立而構成系統(tǒng)。它具有AVR高檔單片機MEGA系列的全部特點,而價格僅與低檔單片機相當且系統(tǒng)二次開發(fā)極為方便,性價比極高。另外,由于采用了單周期指令模式,它具有極高的運行速度,可達到1MIPS/MHz,比AT89C51高出10倍。并且在省電性能、穩(wěn)定性、抗干擾性能和靈活性方面極具特色。在產品應用市場上具有強大的競爭力,因而在工業(yè)測控領域中得到了廣泛的應用。
DS18B20是美國DALLAS半導體器件公司在其前代產品DS1820的基礎上最新推出的單線數(shù)字化智能集成溫度的傳感器,其全部傳感元件及轉換電路集成在形如一只三極管的集成電路內。與其它溫度傳感器相比,DS18B20具有以下特性: ①獨特的單線接口方式,DS1820在與微處理器連接時僅需要一條接口線即可實現(xiàn)微處理器與DS18B20的雙向通訊。②DS18B20支持多點組網功能,多個DS18B20可以并聯(lián)在唯一的信號線上,實現(xiàn)多點測溫。③DS18B20在使用中不需要任何外圍元件。 ④測溫范圍-55℃~+125℃,固有測溫分辨率0.625℃。⑤測量結果以9~12位數(shù)字量方式串行傳送。
2.Atmega8單片機與單總線測溫器件DS18B20的接口及其操作時序
DS18B20內部結構主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH/TL和配置寄存器。
光刻ROM中的64位序列號是出廠前被光刻好的,可視作是DS18B20的地址序列碼。光刻ROM的作用是使每一個DS18B20都各不相同,以實現(xiàn)一根總線上掛接多個DS18B20的目的。
DS18B20溫度傳感器的內部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的E2PROM,后者存放高/低溫度觸發(fā)器TH/TL和結構寄存器。 暫存存儲器包含了8個連續(xù)字節(jié),前兩個字節(jié)是測得的溫度信息,第一個字節(jié)的內容是溫度的低八位,第二個字節(jié)是溫度的高八位。第三個和第四個字節(jié)是TH/TL的易失性拷貝,第五個字節(jié)是結構寄存器的易失性拷貝,這三個字節(jié)的內容在每一次上電復位時即被刷新。
第六、七、八個字節(jié)用于內部計算。第九個字節(jié)是冗余檢驗字節(jié)。
DS18B20中的溫度傳感器對溫度的測量結果用16位符號擴展的二進制補碼讀數(shù)形式提供,當轉換精度為12位時,則所得測量結果中前5位S為符號位,如果測得的溫度大于0℃時,S均為0,否則為1。后11位為數(shù)據位,分辨率為0.0625℃/LSB,只要將測到的數(shù)值乘于0.0625即可得到實際溫度。
綜上所述,DS18B20單總線溫度傳感器可以方便地實現(xiàn)與mega8單片機的連接,構建適合自己的經濟的測溫系統(tǒng)。
根據DS18B20的通訊協(xié)議,主機控制DS18B20完成溫度轉換必須經過三個步驟:每一次讀寫之前都要對DS18B20進行復位,復位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對DS18B20進行預定的操作。
當主機收到DS18B20的響應信號后,便可以發(fā)出操作命令,這些命令可以分為ROM命令和RAM命令兩種.
以僅有一個DS18B20且使用外部電源為例,CPU的操作過程如圖1所示。
圖1. DS18B20操作過程
3.接口程序的C語言實現(xiàn)
由于DS18B20工作在單總線方式,其硬件接口較為簡單,僅需利用系統(tǒng)的一條I/O線與DS18B20的數(shù)據總線相連即可。DS18B20雖然具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點,但在實際應用中也有一些需要注意問題。主要是較小的硬件開銷需要相對復雜的軟件進行補償,由于DS18B20與mega8單片機間采用串行數(shù)據傳送,因此,在對DS18B20進行讀寫編程時,必須嚴格的保證讀寫時序,否則將無法讀取測溫結果。操作時序主要有初始化時序、讀時序和寫0時序和寫1時序四種,如圖2所示。
由于對操作時序的要求比較嚴格,所以在進行程序設計時,對DS18B20操作部分常采用匯編語言實現(xiàn)。而目前單片機已經普遍采用C語言編程,如果在其中插入匯編語言程序相當不方便,所以有必要研究采用C語言實現(xiàn)單片機與DS18B20的接口方法。由于DS18B20與單片機接口的軟件中對時序要求比較嚴格,所以開發(fā)精確的延時程序是其中的重點也是難點所在?紤]到操作要求,所應用的延時程序主要
有μS級延時和mS級延時兩種,其中μS級延時要求最高,其代碼如下:
首先定義1μS延時程序如下:
在實際系統(tǒng)中,設置系統(tǒng)時鐘為8MHz,運行結果表明,程序的定時誤差不超過0.5%,完全可以滿足應用的要求。mS級延時的情況也類似,比較容易實現(xiàn),在此不再贅述。需要注意的是,在執(zhí)行上述程序,必須關閉中斷,以保證程序執(zhí)行的實時性。
在溫度測量儀表中,對DS18B20的操作主要是復位、讀數(shù)據和寫數(shù)據三種,而兩種操作又都是按位進行的,所以首先應該按照DS18B20的時序要求,編寫讀、寫時間片的程序,其流程圖如圖3所示。
圖3. DS18B20操作程序流程圖
另外需要注意的是,在實際工作環(huán)境中,由于干擾的存在,可能造成讀數(shù)錯誤,這就需要對讀得的數(shù)據進行正確性校驗。在從DS18B20所讀得的9字節(jié)數(shù)據中,最后一字節(jié)為CRC校驗碼,在必要時可以用來對讀數(shù)進行檢驗,其程序如下:
在上述程序中,*p為指向從DS18B20所讀得的9字節(jié)數(shù)據所組成數(shù)組的指針,函數(shù)在CRC校驗正確時返回0。
4.需要注意的問題
雖然利用Atmega8單片機和DS18B20可以方便地組成簡單、可靠、低成本、高精度的測溫系統(tǒng),但在實際應用中應該注意以下幾個問題:
(1)在DS1820的有關資料中均未提及單總線上所掛DS1820數(shù)量問題,容易使人誤認為可以掛任意多個DS1820,在實際應用中當單總線上所掛DS1820超過8個時,就需要解決微處理器的總線驅動問題,在進行多點測溫系統(tǒng)設計時要加以注意。
(2)連接DS1820的總線電纜是有長度限制的,在用DS1820進行長距離測溫系統(tǒng)設計時要充分考慮總線分布電容和阻抗匹配問題,一般總線長度以<50m為宜。
(3)在DS1820測溫程序設計中,向DS1820發(fā)出溫度轉換命令后,程序總要等待DS1820的返回信號,一旦某個DS1820接觸不好或斷線,程序將進入死循環(huán)。這一點在進行DS1820硬件連接和軟件設計時也要給予一定的重視。
上述軟硬件系統(tǒng)已成功應用于某磨削加工設備的溫度補償系統(tǒng)中,從實際運行效果看,系統(tǒng)工作穩(wěn)定、成本低廉、測溫精度高、可靠性強,是一種比較理想的方案,與目前常用的利用熱電偶或熱電阻測溫的方式相比,在保證精度的成本和開發(fā)難度都得到了很好的抑制,特別是在低溫測量領域具有顯著的優(yōu)勢。





