新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于DS18B20的多路溫度監(jiān)測(cè)系統(tǒng)設(shè)計(jì)與仿真

基于DS18B20的多路溫度監(jiān)測(cè)系統(tǒng)設(shè)計(jì)與仿真

作者: 時(shí)間:2013-10-29 來(lái)源:網(wǎng)絡(luò) 收藏
2.1 測(cè)溫電路設(shè)計(jì)
采用8片組成多路測(cè)溫電路。內(nèi)部均有一個(gè)全球惟一的64位產(chǎn)品序列號(hào),單片機(jī)通過(guò)序列號(hào)可對(duì)一條總線上的多路DS18 B20進(jìn)行控制,讀取其溫度。但僅由單總線采集多路溫度數(shù)據(jù)時(shí),軟件設(shè)計(jì)算法復(fù)雜,讀取速度慢,無(wú)法適用于實(shí)時(shí)性要求高的測(cè)溫場(chǎng)合。特別是當(dāng)單總線上掛接的DS18B20傳感器個(gè)數(shù)大于8個(gè)時(shí),采用寄生電源供電方式亦存在總線驅(qū)動(dòng)能力不足等問(wèn)題。為此,本設(shè)計(jì)采用“單總線結(jié)構(gòu)+并行I/O口輸入”相結(jié)合的方式,實(shí)時(shí)巡回采集多路DS18B20的溫度信息。具體做法是:硬件上將8片DS18B20的單總線分別連到單片機(jī)的并行P1口引腳,同時(shí)各片DS18B20的電源端采用外部電源供電方式,且每個(gè)單總線另接一個(gè)4.7 kΩ的上拉電阻到5 V電源以保證達(dá)到足夠的工作電流;軟件上讀取多路溫度與讀取單路溫度的操作類似,不需讀取讀出所用DS18B20的序列號(hào),而只需通過(guò)參數(shù)傳遞來(lái)循環(huán)讀取各路溫度數(shù)據(jù)(軟件設(shè)計(jì)中介紹)。
2.2 鍵盤(pán)與LED顯示電路設(shè)計(jì)
LED顯示電路設(shè)計(jì):P0口輸出顯示代碼經(jīng)74LS245驅(qū)動(dòng)后接到8位LED數(shù)碼管的段選線,P2口輸出接到LED的位選線。正常情況下,8位LED數(shù)碼管用于循環(huán)顯示通道號(hào)及該通道的溫度值。
鍵盤(pán)輸入設(shè)計(jì):采用獨(dú)立式鍵盤(pán)P3.2~P3.4用來(lái)修改溫度報(bào)警的上限與下限值。系統(tǒng)默認(rèn)的溫度報(bào)警上限為50℃,下限為-10℃。系統(tǒng)上電后,LED數(shù)碼管將先后顯示溫度報(bào)警上/下限值。若按P3.2鍵報(bào)警值加1;若按P3.3鍵報(bào)警值減1;P3.4為確定鍵,用于保存修改值。
此外,當(dāng)系統(tǒng)檢測(cè)到當(dāng)前通道溫度值超過(guò)設(shè)定的上、下限時(shí),將通過(guò)P3.6,P3.7進(jìn)行閃光報(bào)警提示。
2.3 串行通信設(shè)計(jì)
檢測(cè)系統(tǒng)可通過(guò)串行口與上位機(jī)進(jìn)行通信,向上位機(jī)傳送溫度值及相應(yīng)的通道號(hào)。實(shí)物中通過(guò)RS 232串行接口與上位機(jī)連接,上位機(jī)的控制界面由VB 6.0編寫(xiě)。當(dāng)運(yùn)行軟件時(shí),可以從虛擬終端看到上位機(jī)接收到的8個(gè)通道的溫度數(shù)據(jù)及相應(yīng)的通道號(hào)。

3 軟件設(shè)計(jì)
3.1 軟件總體設(shè)計(jì)
如圖3所示,系統(tǒng)上電復(fù)位后,程序主要包括:

c.JPG


(1)系統(tǒng)初始化設(shè)置。
(2)按鍵處理子程序:LED數(shù)碼管顯示上限報(bào)警溫度值并閃爍,若10 s中之內(nèi)有按鍵輸入修改溫度值,則進(jìn)行鍵盤(pán)操作直至修改完成,并保存溫度上限值;若10 s之內(nèi)無(wú)按鍵輸入或按P3.4“確定”鍵,則保存上限溫度;接著顯示下限報(bào)警溫度值并閃爍,重復(fù)上述操作后保存下限報(bào)警溫度值。
(3)溫度報(bào)警值設(shè)置子程序:實(shí)現(xiàn)將8路的報(bào)警溫度寫(xiě)入DS18B20中,流程圖詳見(jiàn)圖4所示。
(4)讀取溫度子程序:在對(duì)顯示路數(shù)初始化后,進(jìn)行溫度值讀取,這是軟件設(shè)計(jì)的關(guān)鍵,下面將單獨(dú)介紹。
(5)溫度報(bào)警處理:讀取某路DS18B20溫度值及報(bào)警上下限值后,進(jìn)行比較,若超出范圍則啟動(dòng)定時(shí)器0,驅(qū)動(dòng)上/下限報(bào)警提示單元。
(6)顯示當(dāng)前通道溫度子程序:取得當(dāng)前通道號(hào)后,根據(jù)讀取的2字節(jié)溫度值(溫度暫存器格式參考DS18B20技術(shù)手冊(cè)),判斷其符號(hào)位并分別讀取其整數(shù)部分和小數(shù)部分,通過(guò)運(yùn)算后保存到顯示緩沖區(qū),進(jìn)行動(dòng)態(tài)顯示,并刷新顯示若干時(shí)間。
(7)上位機(jī)通信子程序:每采集一路溫度數(shù)據(jù),通過(guò)RS 232串口,將其通道號(hào)、溫度值發(fā)送給上位機(jī),完成相應(yīng)通道的溫度數(shù)據(jù)采集處理。
(8)循環(huán)修改:修改通道號(hào),進(jìn)行下一路溫度數(shù)據(jù)采集,直至8路溫度處理完成,如此循環(huán)往復(fù)。
3.2 讀取溫度子程序設(shè)計(jì)
采用DS18B20進(jìn)行單路測(cè)量時(shí),可直接與單片機(jī)相連,不需讀取讀出器件的64位產(chǎn)品序列號(hào)。當(dāng)采用DS18B20進(jìn)行多路測(cè)溫時(shí),在初始化操作后,通常的做法是需要在線逐個(gè)地搜索64位ROM編碼以確認(rèn)各個(gè)DS18B20所在位置,并需對(duì)ROM編碼進(jìn)行冗余校驗(yàn),算法設(shè)計(jì)復(fù)雜。且等待多路搜索是否完成需要消耗大量的時(shí)間,使程序執(zhí)行的效率和系統(tǒng)實(shí)時(shí)性受到了影響。
本設(shè)計(jì)采用“單總線結(jié)構(gòu)+并行I/O口輸入”結(jié)合的方式巡回讀取多路溫度。DS18B20作為單總線芯片,進(jìn)行信息交換時(shí)有嚴(yán)格的讀/寫(xiě)時(shí)序要求。讀取溫度子程序流程如圖5所示。首先通過(guò)參數(shù)傳遞將通道號(hào)傳給讀取溫度子程序,接著對(duì)DS18B20進(jìn)行初始化,然后直接執(zhí)行跳過(guò)ROM命令(CCH),即不讀取64位ROM編碼而直接向DS18B20發(fā)出功能命令,節(jié)約了時(shí)間。之后,再向DS18B20發(fā)送溫度轉(zhuǎn)換命令(44H),DS18B20啟動(dòng)溫度采樣與A/D轉(zhuǎn)換,并將轉(zhuǎn)換數(shù)據(jù)存儲(chǔ)在暫存器中。
然后再次初始化DS18B20,并在再一次跳過(guò)ROM命令后,執(zhí)行單片機(jī)讀暫存器命令(BEH),根據(jù)傳遞參數(shù)確定的通道號(hào),可將通道號(hào)對(duì)應(yīng)的DS18B20高速暫存存儲(chǔ)器的9個(gè)字節(jié)數(shù)據(jù)讀入單片機(jī)中,其中第0,1字節(jié)分別是溫度值低位(LS byte)和高位(MS byte),第2,3字節(jié)分別是高溫限值(TH)和低溫限值(TL),從而完成某通道DS18B20的溫度采集。

熱電偶相關(guān)文章:熱電偶原理


評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉