曲阜師范大學計算機科學學院 黨德瑞
隨著現代科學技術的飛速發展,特別是大規模集成電路設計技術的發展,微型化、集成化、數字化正成為傳感器發展的一個重要方向,而采用新型數字溫度傳感器大大方便了系統的設計。數字溫度傳感器DS18B20具有獨特的單總線接口,僅需要占用一個通用I/0端口即可完成與微處理器的通信,大大減少了接線的麻煩,使得單片機更加具有擴展性。由于DS18B20芯片的小型化,可以通過單跳數據線就可以和主電路連接。
整個系統是由單片機控制的,要能夠實現接收傳感器的數據并將所接受的數據顯示出來,可以從鍵盤輸入命令,系統根據所鍵入的命令,選擇對應的傳感器,并經過驅動電路驅動溫度顯示。設計一種可實現的,方便的單片機監控系統,實現多點溫度測量和顯示的任務。

圖1 AT89C51的硬件結構圖
傳感器DS18B20是美國DALLAS半導體公司推出的一種改進型溫度傳感器。DS18B20的最大優點是采用了單總線的數據傳輸,由數字溫度傳感器DS18B20和單片機AT89C51構成的測度裝置,可以直接輸出溫度的數字信號到微控制器。每個DS18B20具有一個獨有的不可修改的64位序列號,根據序列號可訪問不同的器件,這樣一條總線上可掛接多個DS18B20傳感器,實現多點溫度測量。DS18B20傳感器有如下特點:
(1)單總線接口,可方便地實現多點測溫。
(2)每一個芯片都有唯一的一個64位光刻的ROM注冊碼,家族碼為28H。
(3)無需外部器件,可通過數據線供電,電源電壓范圍:3.0V~5.0V。
(4)以此作為檢測元件,測溫范圍是-55℃~+125℃,在-10~+85℃范圍內,測量精度可達±0.5℃。
(5)分辨率為可編程的9~12位(包括一位符號位),對應的可分變溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃。
(6)DS18B20的轉換時間與所設定的分辨率有關。當設定為9位時,最大轉換時間為93.75ms,當設定為12位時,最大轉換時間為750ms。
(7)溫度數據有2個字節組成。
(8)內部含有EEPROM,其報警上下限溫度值和設定的分辨率在掉電的情況下不丟失。
本課題選用的控制模塊是AT89C51單片機,AT89C51單片機是一種低電壓,低功耗,高性能的8位FLASH單片機。單片機的特點是體積小,功能強,可靠性高,功耗低,價格低廉,片內含有2Kbytes的可反復擦寫的只讀程序存儲器,并且可以兼容標準MCS-51系列單片機的指令系統。
系統的硬件電路如圖所示,主要是以AT89C51單片機為核心的控制部分,由四個DS18B20溫度傳感器,LED數碼管顯示,鍵盤,復位電路,報警電路等部分組成。
我們設計的是分布式測溫系統,要用到多個DS18B20溫度傳感器,采集的溫度數據眾多,首先要弄清楚傳感器的序列號,以便準確、有效地對每個溫度進行尋址。每個傳感器都有唯一的64位產品序列號。由溫度傳感器DS18B20采集的被測對象的數據,不用經過A/D轉換,可以直接傳給AT89C51單片機,由單片機的P3.7口作為數據的輸入端口,在AT89C51單片機內有4KB閃爍可擦除、可編程的只讀存儲器,128B的數據存儲空間,可直接推動LED數碼管顯示數據。DS18B20由VCC提供電源,連接一個4.7K的上拉電阻,傳感器的DQ腳直接連接到單片機的P1.0口。溫度測量部分的電路就連接好了。圖2為DS18B20與單片機的連接電路圖。

圖2 DS18B20與單片機的連接電路圖
通過鍵盤鍵入要顯示的測量點的傳感器的序列號,當其中一個按鍵被按下時,INT0就會接收到一個負脈沖信號,單片機的外部中斷會被激活,我們會檢測到P0~P3口的信號跳變,從而確定是那個按鍵被按下。當單片機接受到具體的中斷信號時,就會讀取在初始化時已經按序列號編碼的對應序列號的DS18B20傳感器中的溫度數據,完成溫度數據的對應讀取。
該部分電路主要使用了移位寄存器芯片74LA164和七段數碼管。單片機通過I2C總線將要顯示的數據信號傳送到移位寄存器芯片74LS164寄存起來,再由移位寄存器控制數碼管的顯示,從而實現移位寄存點亮數碼管,數碼管顯示所接收的數據。
當所測量的溫度值達到所設定溫度的上下限時,所接受的信號可觸發蜂鳴器實現報警功能。單片機通過三極管驅動揚聲器發出警笛聲,選擇了壓電式蜂鳴器。圖3為報警電路電路圖。

圖3 報警電路電路圖
本課題的系統軟件設計主要是在單片機的控制下完成多點溫度的測量,并將溫度值顯示,超過上下限溫度值報警的功能。要實現系統的各種功能必須經過以下幾個步驟:傳感器DS18B20采集的各點的溫度信號傳遞給單片機,在鍵盤的鍵入選擇下,顯示所指定編號的傳感器的溫度值,并將溫度值通過數碼管顯示出來,若溫度超過所設定的上下限范圍則驅動蜂鳴器,發出報警。
主程序的主要功能是負責溫度的實時顯示,讀出并處理DS18B20測量的溫度值,測量每1s進行一次,當系統初始上電時,單片機必須找出總線上所有傳感器的ROM代碼,這樣單片機就能夠判斷出傳感器的數目和類型。
讀出溫度子程序主要功能是讀出RAM中的9字節,在讀出時需要進行CRC校驗,校驗有錯時不進行溫度數據的改寫。DS18B20的讀時序分讀0時序和讀1時序兩個過程。讀時序是主機先把單總線拉低,之后的15us內必須釋放單總線,以便將數據傳送到單總線上。
我們所設計的系統能接收到溫度信號,還要將溫度信號顯示出來。對于輸入的溫度信號的顯示是用了移位寄存器芯片74LS164。當串行輸入端任意一個為低電平,則禁止新數據輸入,在時鐘端CLOCK)脈沖上升沿作用下Q0為低電平。當串行輸入端有一個為高電平時,則另一個就允許數據輸入,并在CLOCK上升沿作用下決定Q0的狀態。
[1]李光飛,樓然苗,胡佳文.單片機課程設計實例指導[M].北京:北京航空航天大學出版社,2004(1):34-50.
[2]馬家辰.MCS-51單片機原理及接口技術[M].哈爾濱:哈爾濱工業大學出版社:1997:100-120.
[3]郁有文,常健,程繼紅.傳感器原理及工程應用[M].西安:西安電子科技大學出版社,2003:15-23.
[4]余成波,胡新宇,趙勇.傳感器與自動檢測技術[M]:北京:高等教育出版社,2004:35-45.
[5]杭和平,楊芳,謝飛.單片機原理與應用[M].北京:機械工業出版社,2008:155-169.
[6]黃維翼,眭碧霞.單片機應用與項目實踐[M].北京:清華大學出版社,2010:4-15.
[7]張粵,倪偉.DS18B20在分布式測溫系統中的應用[N].淮陰工學學報,2002-10-05.
[8]彭東林.多點溫度測量系統設計[J].重慶工學院,2007-06:10-14.