張樹尉,鄭雪梅
(黃岡職業技術學院,湖北 黃岡 438002)
?
基于單片機控制的糧倉多路溫度采集系統設計
張樹尉,鄭雪梅
(黃岡職業技術學院,湖北 黃岡 438002)
摘要:本設計由3個模塊組成:主控制器、溫度采集電路及顯示電路。所設計的多路溫度采集系統,可實現多個糧倉的溫度監視,測溫范圍為-20~70℃,精度誤差在0.1℃以內,LED數碼管直讀顯示。
關鍵詞:數字溫度計;AT89S51;DS18B20;單總線
溫度的測量不僅廣泛用于我們的日常生活之中,而且在工業加工生產、科研研究中起著至關重要的作用。一般對于溫度的測量采用由熱電偶式傳感器組成的測量電路,這種電路具有設計復雜、測量靈敏度較低、性價比低的缺點。本文設計一種多路溫度采集系統,實現多個糧倉的溫度監視,要求測溫范圍為-20~70℃,精度誤差在0.1℃以內,LED數碼管直讀顯示。依據測量指標的要求,采用DALLS公司的單總線數字式溫度傳感器DS1820作為溫度檢測傳感器,該傳感器測量范圍大,內部集成了模數轉換器,最高分辨率高達12位。相對于熱電偶傳感器,該芯片采用單總線接口協議,實現數據的采集與傳輸,大大降低硬件設計的難易度,設計成本低廉,廣泛適用于測控領域。
1總體設計方案框圖

圖1 數字溫度計總體電路結構框圖
根據設計的指標和要求,多個糧倉的溫度測量系統主要由以下幾個部分組成:
1.1控制器單元電路。控制器采用AT89S51單片機,負責與傳感器DS18B20通信,存儲不同糧倉的溫度數據,同時將溫度數據發送到顯示電路。
1.2傳感器測量電路。每個糧倉安放DS18B20傳感器,負責對溫度的測量。
1.3溫度顯示電路。采用4位共陽LED數碼管顯示,以動態掃描法實現溫度顯示,將單片機發送的數據顯示在Led數碼管上。
數字溫度計總體電路結構框圖如圖1所示。
2系統整體硬件電路
2.1主控制器

圖2 主控制器89S51
圖2為主控制器電路,由12M無源晶振組成的振蕩電路,開關S1與10uf電容組成的復位電路,用于重啟系統,保證系統正常的運行。
XTAL1腳為片內振蕩電路的輸入端,XTAL2腳為片內振蕩電路的輸出端。89S51的時鐘有兩種方式,一種是片內時鐘振蕩方式,但需在XTAL1和XTAL2腳外接石英晶體(頻率為1.2~12MHz)和振蕩電容,振蕩電容的值一般取10~30pF,典型值為30pF;另外一種是外部時鐘方式,即將XTAL1接地,外部時鐘信號從XTAL2腳輸入,如圖3所示。 此次設計采用了內部時鐘方式。[2]

圖3 89S51的時鐘振蕩方式
2.2溫度采集電路

圖4 DS18B20溫度采集
溫度采集如圖4,圖中的U3、U4、U5是用于探測溫度并將溫度值轉換成數字信號的傳感器DS18B20, DS18B20采用1-Wire總線(單總線)協議,它在一根數據線完成控制字的寫入和測量溫度數據的讀出,是一種半雙工的雙向傳輸模式,多個DS18B20傳感器通過地址碼來區分。由于單片機AT89S51硬件上并不支持單總線協議,通過AT89S51來控制和訪問DS18B20時,需要通過編程模擬單總線的協議時序來實現對DS18B20的訪問。
對讀寫的數據位有著嚴格的時序要求,每一次命令和數據的傳輸都是由主機啟動的寫時序開始,此時從設備都處在偵聽狀態,數據和命令的傳輸順序都是低位在先。在讀取DS18B20檢測到的溫度數據時,主機在發出寫命令后,再需啟動讀時序完成數據接收。
2.3顯示電路

圖5 顯示電路
顯示電路采用4位共陽LED數碼管,從P0口輸出段碼通過74HC244進行緩存,再同時送入到四個數碼管的a~h端,列掃描用P2.0~P2.3口來實現,列驅動用9012三極管。
2.4穩壓電路

圖6 穩壓電路
連接器CON3通過復讀機電源接入+12V電壓,通過7805穩壓器將+12V電壓轉換成+5V電壓,作為溫度計設計電路的電源VCC。
2.5通信接口電路

圖7 通信接口電路
89S51的P1口的第二功能(ISP功能),為了能夠將編譯好的程序下載到單片機內,由于本系統采用AT89S51,采用ISP技術,利用如表1中的P1口,來實現單片機與上位機(PC機)通信,實現程序的下載,P1是帶上拉電阻,兼有輸入和輸出功能的引腳。輸出時驅動電流可達10mA左右。

表1 單片機ISP功能引腳分配
此模塊做在另一塊板上,通過導線將圖中74LS373的MISO,MOSI,SCK分別接到89S51的MISO,MOSI,SCK端口上即可。
3系統軟件程序
由圖8、圖9可知,系統軟件設計組要由溫度顯示刷新模塊、溫度傳感器DS18B20的初始化、溫度數據的讀取、實際溫度的計算等組成。
3.1主程序
圖8為系統設計主程序,一開始完成對設備的初始化,接著開啟定時器記錄刷新時間,每隔一秒完成對數據的讀取與刷新,然后實現對溫度的顯示。

圖8 主程序流程圖

圖9 讀出溫度子程序流程圖
3.2讀出溫度子程序
讀出溫度子程序流程如圖9所示,在對DS18B20進行復位后,AT89S51向所有DS18B20發匹配ROM命令(即區分安裝在各個位置的DS18B20的地址碼),各個DS18B20收到此地址碼后立即進行判斷是否在訪問自己,如果地址匹配,則該DS18B20發出應答信號,AT89S51緊接著發出讀取命令,地址匹配的DS18B20收到此命令后便將采集到的溫度數據進行CRC編碼(在溫度數據后附加8位的CRC校驗碼)并存放到一個9字節的RAM中,AT89S51讀取DS18B20中9字節RAM中的數據并進行CRC校驗,CRC正確時改寫當前的溫度值,校驗有錯時不進行溫度數據的改寫。
3.3計算溫度子程序
計算溫度子程序流程圖如圖10所示,從DS18B20中RAM中讀取的是二進制代碼代表的溫度值,我們日常生活中的溫度都為十進制顯示,結合DS18B20輸出的二進制數據的格式,通過溫度轉換子程序,實現二進制數據與十進制攝氏溫度的轉換,這樣才能輸出我們要求的溫度格式。
3.4溫度顯示更新程序
溫度每時每刻都在發生著輕微的變化,為了能夠實時顯示正確的溫度,就要定時刷新數據,如圖11所示,該程序實現了對溫度數據的更新功能,對單片機存儲的溫度數據進行處理,進行溫度的正負判斷,以及位數處理。

圖10 計算溫度子程序流程圖

圖11 顯示數據刷新子程序流程圖
3.5溫度數據的計算處理方法
DS18B20的轉換精度可在9~12位之間選擇,分辨率分別為0.5℃、 0.25 ℃、 0.125℃ 、0.0625℃,轉換精度越高所需的A/D時間也越長,9字節RAM中前兩個字節是轉換好的溫度,在對于12位轉換精度,除了最高的4位表示正負符號外,根據溫度傳感器低的12位二進制數字,轉換成十進制數據,將該數據乘以12精度的靈敏度0.0625,所得到的十進制數據則為單位為攝氏度的溫度值。
溫度顯示數據的小數位是由9字節RAM中低字節的低半字節組成的,由于12位轉換精度的分辨率是0.0625℃,介于0.1℃~0.01℃之間,由于是用半個字節(0~F)表小數部分,直接通過乘以0.0625轉換成的十進制小數值需要占用4位小數,實際應用中通常精確到0.1℃,用1位LED顯示小數,這就需要將15種二進制碼對應成10種十進制數,表2列出了一種二進制和十進制的近似對應關系表[2]。

表2 小數部分二進制和十進制的近似對應關系表
4調試及性能分析
系統的調試包括硬件電路調試和軟件調試,由于硬件電路并不復雜,而且全部都是數字電路,只要焊接良好,沒有短路和斷路情況出現電路即可正常工作。由于采用了模塊化的設計方法,軟件調試可以先進行各功能子程序的單獨調試通過,再逐步將各功能模塊往里添加進來,每添加一個功能模塊調試成功后再添加一個功能模塊,直到所有功能模塊能同時正常工作。由于DS18B20跟AT89S51之間采用串行數據通信,在編程時嚴格按照DS18B20芯片手冊上的時序,來實現對芯片數據的采集,不然將得到的錯誤的數據。
性能測試是用精度為0.01℃溫度計和本溫度測試系統各自測量值的比較來完成的,通過實測對比,在-20~50℃的溫度范圍內,二者的最大絕對誤差都在±0.05℃以內,完全適合一般的應用場合,可用三節干電池供電做成手持電子溫度計。
參考文獻:
[1]張俊謨.單片機中級教程. 北京:北京航空航天大學出版社,1999:11-100.
[2]李光飛,樓然苗,胡佳文等.單片機課程設計實例指導. 北京:北京航空航天大學出版社,2004:105-125.
[3]夏路易,石宗義. 電路原理圖與電路板設計教程Protel 99SE. 北京: 北京希望電子出版社社,2002:1-203.
[4]李軍. 51系列單片機高級實例開發指南. 北京:北京航空航天大學出版社, 2004:10-50.
中圖分類號:TP368
文獻標志碼:A
文章編號:1671-1602(2016)08-0035-03
作者簡介:張樹尉(1995.09-),男,湖北黃岡市人。
鄭雪梅(1995.11-),女,湖北黃岡市人,黃岡職業技術學院2014級物聯網應用技術專業在校學生。