基于DS18B20的多路溫度監測系統設計與仿真
采用8片DS18B20組成多路測溫電路。DS18B20內部均有一個(gè)全球惟一的64位產(chǎn)品序列號,單片機通過(guò)序列號可對一條總線(xiàn)上的多路DS18 B20進(jìn)行控制,讀取其溫度。但DS18B20僅由單總線(xiàn)采集多路溫度數據時(shí),軟件設計算法復雜,讀取速度慢,無(wú)法適用于實(shí)時(shí)性要求高的測溫場(chǎng)合。特別是當單總線(xiàn)上掛接的DS18B20傳感器個(gè)數大于8個(gè)時(shí),采用寄生電源供電方式亦存在總線(xiàn)驅動(dòng)能力不足等問(wèn)題。為此,本設計采用“單總線(xiàn)結構+并行I/O口輸入”相結合的方式,實(shí)時(shí)巡回采集多路DS18B20的溫度信息。具體做法是:硬件上將8片DS18B20的單總線(xiàn)分別連到單片機的并行P1口引腳,同時(shí)各片DS18B20的電源端采用外部電源供電方式,且每個(gè)單總線(xiàn)另接一個(gè)4.7 kΩ的上拉電阻到5 V電源以保證達到足夠的工作電流;軟件上讀取多路溫度與讀取單路溫度的操作類(lèi)似,不需讀取讀出所用DS18B20的序列號,而只需通過(guò)參數傳遞來(lái)循環(huán)讀取各路溫度數據(軟件設計中介紹)。
2.2 鍵盤(pán)與LED顯示電路設計
LED顯示電路設計:P0口輸出顯示代碼經(jīng)74LS245驅動(dòng)后接到8位LED數碼管的段選線(xiàn),P2口輸出接到LED的位選線(xiàn)。正常情況下,8位LED數碼管用于循環(huán)顯示通道號及該通道的溫度值。
鍵盤(pán)輸入設計:采用獨立式鍵盤(pán)P3.2~P3.4用來(lái)修改溫度報警的上限與下限值。系統默認的溫度報警上限為50℃,下限為-10℃。系統上電后,LED數碼管將先后顯示溫度報警上/下限值。若按P3.2鍵報警值加1;若按P3.3鍵報警值減1;P3.4為確定鍵,用于保存修改值。
此外,當系統檢測到當前通道溫度值超過(guò)設定的上、下限時(shí),將通過(guò)P3.6,P3.7進(jìn)行閃光報警提示。
2.3 串行通信設計
檢測系統可通過(guò)串行口與上位機進(jìn)行通信,向上位機傳送溫度值及相應的通道號。實(shí)物中通過(guò)RS 232串行接口與上位機連接,上位機的控制界面由VB 6.0編寫(xiě)。當運行Proteus軟件時(shí),可以從虛擬終端看到上位機接收到的8個(gè)通道的溫度數據及相應的通道號。
3 軟件設計
3.1 軟件總體設計
如圖3所示,系統上電復位后,程序主要包括:
(1)系統初始化設置。
(2)按鍵處理子程序:LED數碼管顯示上限報警溫度值并閃爍,若10 s中之內有按鍵輸入修改溫度值,則進(jìn)行鍵盤(pán)操作直至修改完成,并保存溫度上限值;若10 s之內無(wú)按鍵輸入或按P3.4“確定”鍵,則保存上限溫度;接著(zhù)顯示下限報警溫度值并閃爍,重復上述操作后保存下限報警溫度值。
(3)溫度報警值設置子程序:實(shí)現將8路的報警溫度寫(xiě)入DS18B20中,流程圖詳見(jiàn)圖4所示。
(4)讀取溫度子程序:在對顯示路數初始化后,進(jìn)行溫度值讀取,這是軟件設計的關(guān)鍵,下面將單獨介紹。
(5)溫度報警處理:讀取某路DS18B20溫度值及報警上下限值后,進(jìn)行比較,若超出范圍則啟動(dòng)定時(shí)器0,驅動(dòng)上/下限報警提示單元。
(6)顯示當前通道溫度子程序:取得當前通道號后,根據讀取的2字節溫度值(溫度暫存器格式參考DS18B20技術(shù)手冊),判斷其符號位并分別讀取其整數部分和小數部分,通過(guò)運算后保存到顯示緩沖區,進(jìn)行動(dòng)態(tài)顯示,并刷新顯示若干時(shí)間。
(7)上位機通信子程序:每采集一路溫度數據,通過(guò)RS 232串口,將其通道號、溫度值發(fā)送給上位機,完成相應通道的溫度數據采集處理。
(8)循環(huán)修改:修改通道號,進(jìn)行下一路溫度數據采集,直至8路溫度處理完成,如此循環(huán)往復。
3.2 讀取溫度子程序設計
采用DS18B20進(jìn)行單路測量時(shí),可直接與單片機相連,不需讀取讀出器件的64位產(chǎn)品序列號。當采用DS18B20進(jìn)行多路測溫時(shí),在初始化操作后,通常的做法是需要在線(xiàn)逐個(gè)地搜索64位ROM編碼以確認各個(gè)DS18B20所在位置,并需對ROM編碼進(jìn)行冗余校驗,算法設計復雜。且等待多路搜索是否完成需要消耗大量的時(shí)間,使程序執行的效率和系統實(shí)時(shí)性受到了影響。
本設計采用“單總線(xiàn)結構+并行I/O口輸入”結合的方式巡回讀取多路溫度。DS18B20作為單總線(xiàn)芯片,進(jìn)行信息交換時(shí)有嚴格的讀/寫(xiě)時(shí)序要求。讀取溫度子程序流程如圖5所示。首先通過(guò)參數傳遞將通道號傳給讀取溫度子程序,接著(zhù)對DS18B20進(jìn)行初始化,然后直接執行跳過(guò)ROM命令(CCH),即不讀取64位ROM編碼而直接向DS18B20發(fā)出功能命令,節約了時(shí)間。之后,再向DS18B20發(fā)送溫度轉換命令(44H),DS18B20啟動(dòng)溫度采樣與A/D轉換,并將轉換數據存儲在暫存器中。
然后再次初始化DS18B20,并在再一次跳過(guò)ROM命令后,執行單片機讀暫存器命令(BEH),根據傳遞參數確定的通道號,可將通道號對應的DS18B20高速暫存存儲器的9個(gè)字節數據讀入單片機中,其中第0,1字節分別是溫度值低位(LS byte)和高位(MS byte),第2,3字節分別是高溫限值(TH)和低溫限值(TL),從而完成某通道DS18B20的溫度采集。
熱電偶相關(guān)文章:熱電偶原理
評論