(1.南京林業(yè)大學(xué) 機(jī)械電子工程學(xué)院,南京 210037;2.機(jī)器人學(xué)國家重點(diǎn)實(shí)驗(yàn)室(中國科學(xué)院沈陽自動化研究所),沈陽 110016;3.東南大學(xué) 儀器科學(xué)與工程學(xué)院,南京 210096)
溫度是工業(yè)生產(chǎn)中的重要監(jiān)測參數(shù),對保證產(chǎn)品加工質(zhì)量和安全生產(chǎn)具有至關(guān)重要的作用。諸多工農(nóng)業(yè)產(chǎn)品的生產(chǎn)過程都需要對溫度這一物理量進(jìn)行嚴(yán)格的監(jiān)控,以保證生產(chǎn)的順利進(jìn)行。但很多工作環(huán)境惡劣的場合,不適合人工測量,為此設(shè)計一種能夠?qū)Νh(huán)境溫度進(jìn)行實(shí)時采集與監(jiān)控的系統(tǒng)具有十分重要的意義[1-2]。
近年來,隨著計算機(jī)技術(shù),特別是單片機(jī)技術(shù)的高速發(fā)展,人們開始更加普遍地嘗試運(yùn)用單片機(jī)來對溫度、濕度等工業(yè)控制中常見的參數(shù)進(jìn)行測控,另一方面虛擬儀器已經(jīng)漸漸地成為測控儀器發(fā)展的新方向。通過LabVIEW圖形化編程實(shí)現(xiàn)對單片機(jī)系統(tǒng)采集的數(shù)據(jù)進(jìn)行分析處理,就是一種結(jié)合二者優(yōu)勢的數(shù)據(jù)檢測方法[3]。
將虛擬儀器技術(shù)引入溫度監(jiān)測研究領(lǐng)域已是一個重要趨勢,例如王恒海等開發(fā)的基于LabVIEW的溫度測控系統(tǒng)[4]、隋秀梅等設(shè)計的基于LabVIEW的八路智能溫度巡檢儀[5]、吳卓葵等設(shè)計的基于LabVIEW的多點(diǎn)報警溫度監(jiān)測系統(tǒng)[6]等。這些監(jiān)測系統(tǒng)通常采用數(shù)據(jù)采集卡采集溫度,數(shù)據(jù)采集比較方便,但缺少靈活性且價格相對較高。只能在上位機(jī)顯示溫度,難以在監(jiān)測裝置端實(shí)現(xiàn)溫度顯示,不利于現(xiàn)場操作人員實(shí)時觀察,沒有提出相應(yīng)的溫控方案。針對以上問題,本文提出一種基于LabVIEW和單片機(jī)的溫度監(jiān)控系統(tǒng),采用低功耗的AT89C51單片機(jī)和數(shù)字溫度傳感器DS18B20作為硬件構(gòu)成溫度采集節(jié)點(diǎn),在LabVIEW平臺上通過調(diào)用VISA庫函數(shù)配置設(shè)備參數(shù)實(shí)現(xiàn)單片機(jī)串口與PC機(jī)之間的數(shù)據(jù)傳輸。開發(fā)系統(tǒng)軟件界面實(shí)現(xiàn)溫度采集與健康。
溫度監(jiān)控系統(tǒng)結(jié)構(gòu)如圖1所示,系統(tǒng)由PC機(jī)、單片機(jī)、溫度傳感器、串口通信電路及LabVIEW軟件界面等構(gòu)成。單片機(jī)檢測多個分布放置的DS18B20數(shù)字溫度傳感器測得的溫度數(shù)據(jù),經(jīng)過串口電路傳輸?shù)接嬎銠C(jī)。數(shù)據(jù)進(jìn)入計算機(jī)后,在LabVIEW開發(fā)平臺上利用VISA庫控制計算機(jī)I/0口[7-9],通過數(shù)據(jù)采集子程序、溫度報警子程序,實(shí)現(xiàn)溫度的實(shí)施監(jiān)測,同時在軟件前面板上顯示實(shí)時溫度曲線。當(dāng)溫度數(shù)據(jù)超出設(shè)置的上限或下限時,軟件發(fā)出語音及報警。報警的同時,根據(jù)實(shí)時溫度值來控制加熱電路或者風(fēng)扇電路, 實(shí)現(xiàn)溫度的實(shí)時監(jiān)測和控制,當(dāng)溫度滿足要求時,停止加熱或者通風(fēng)。
圖1 溫度采集系統(tǒng)結(jié)構(gòu)框圖
詳細(xì)的硬件電路如圖2所示,采用AT89C51作為主控芯片,它是一款低功耗,高性能的8位單片機(jī)。指令系統(tǒng)與傳統(tǒng)的8051單片機(jī)完全兼容,具有很強(qiáng)的適用性。AT89C51在控制領(lǐng)域得到了廣泛的使用,具有很高的性價比。AT89C51有兩種低功耗工作模式可供用戶選擇:待機(jī)模式和掉電模式。當(dāng)用戶選擇待機(jī)模式時,系統(tǒng)通過阻斷向CPU提供時鐘信號的通路,使CPU停止工作。可以通過中斷和復(fù)位的方法退出待機(jī)模式。當(dāng)用戶選擇掉電模式時,振蕩器將停止工作但內(nèi)部RAM的內(nèi)容能夠保存。只能通過硬件復(fù)位的方式才能退出掉電模式。
圖2 溫度采集系統(tǒng)硬件電路圖
溫度傳感器則采用美國DALLAS半導(dǎo)體生產(chǎn)的DS18B20,這是一種可組網(wǎng)數(shù)字式溫度傳感器,它具有體積小、接口簡潔、低功耗、抗干擾能力強(qiáng)等優(yōu)點(diǎn),特別適合構(gòu)建溫度采集系統(tǒng)。它的測量范圍為-55~+125 ℃,最小分辨率為0.062 5 ℃,適應(yīng)電壓范圍為3.0~5.5 V。每個DS18B20傳感器都具有唯一的64位序列碼,所以可以實(shí)現(xiàn)多個傳感器在一條總線上工作。DS18B20采用單總線技術(shù),不僅可以利用串口,還可以選用I/O口和其他硬件連接,并且能夠直接輸出數(shù)字量,不需要進(jìn)行模數(shù)轉(zhuǎn)換。DS18B20的1、3引腳接地和電源,數(shù)據(jù)引腳2與單片機(jī)相連。在引腳2和引腳3之間連接4.7 kΩ的上拉電阻,確保單片機(jī)實(shí)現(xiàn)較遠(yuǎn)距離讀取溫度數(shù)據(jù)。
利用單片機(jī)驅(qū)動DS18B20進(jìn)行測溫必須歷經(jīng)以下3個步驟:
1)每一次讀寫之前都必須要對DS18B20進(jìn)行復(fù)位;2)復(fù)位成功后發(fā)送一條ROM指令;3)最后發(fā)送RAM指令。其工作時序分為初始化時序、寫時序和讀時序3部分。
2.1.1 初始化時序
1)先將數(shù)據(jù)線置高電平“1”;
2)稍作延時;
3)數(shù)據(jù)線拉到低電平“0”;
4)延時750 μs;
5)數(shù)據(jù)線拉到高電平“1”;
6)延時等待;
7)若數(shù)據(jù)線上為低,繼續(xù)延時,其延時的時間從發(fā)出的高電平起要不少于480μs;
8)將數(shù)據(jù)線再次拉高。
2.1.2 寫時序
1)數(shù)據(jù)線先置低電平“0”;
2)延時15 ms;
3)按從低位到高位的順序發(fā)送字節(jié)(一次只發(fā)送一位);
4)延時時間為45 μs;
5)將數(shù)據(jù)線拉到高電平;
6)重復(fù)上1)~6)的操作直到所有的字節(jié)全部發(fā)送完為止;
7)最后將數(shù)據(jù)線拉高。
2.1.3 讀時序
1)將數(shù)據(jù)線拉高“1”;
2)延時2 μs;
3)將數(shù)據(jù)線拉低“0”;
4)延時15 μs;
5)將數(shù)據(jù)線拉高“1”;
6)延時15 μs;
7)讀取數(shù)據(jù)線的狀態(tài)位,并處理數(shù)據(jù);
8)延時30 μs。
單片機(jī)與計算機(jī)之間的通信采用串口通信方式,利用MAX232芯片實(shí)現(xiàn)單片機(jī)TTL電平與PC機(jī)232電平之間的轉(zhuǎn)換,在MAX232芯片上連接1 μF電容消除電磁、電涌的影響。單片機(jī)P0口連接8位數(shù)碼管,可以直接顯示實(shí)時溫度。
溫控電路如圖3 所示,將兩個固態(tài)繼電器分別與單片機(jī)P1.0、P1.1連接。當(dāng)系統(tǒng)監(jiān)測溫度低于設(shè)定值時,單片機(jī)P 1.1 輸出高電平經(jīng)過反向?yàn)榈碗娖?,接通固態(tài)繼電器交流觸點(diǎn),使得交流接觸器1 線圈得電,進(jìn)而接通加熱線圈加熱。反之,當(dāng)系統(tǒng)監(jiān)測到溫度超過設(shè)定溫度值時,P1.1口輸出高電平,接通固態(tài)繼電器交流觸點(diǎn)接通使得交流線圈2得電打開換氣扇開始降溫。
圖3 溫控電路
監(jiān)測系統(tǒng)的軟件設(shè)計流程如圖4所示,首先進(jìn)行系統(tǒng)初始化,實(shí)現(xiàn)數(shù)據(jù)采集模塊與計算機(jī)數(shù)據(jù)的串口通信,然后單片機(jī)從溫度傳感器讀取數(shù)據(jù),同時將數(shù)據(jù)分為兩種方式展示,一種通過數(shù)碼管顯示,另外將數(shù)據(jù)通過串口傳輸?shù)缴衔粰C(jī),利用LabVIEW開發(fā)的上位機(jī)程序進(jìn)行顯示存儲。
圖4 軟件程序框圖
LabVIEW給用戶提供了簡便直觀的圖形化編程方法以及眾多的編程函數(shù),使用戶可以便捷地構(gòu)建自己所需要的儀器系統(tǒng)。用圖形化編程語言編寫的應(yīng)用程序稱為虛擬儀器 VI,使用LabVIEW編寫的程序都把VI作為后綴名。LabVIEW的核心是VI。每一個VI都有兩個操作界面:前面板和程序框圖。前面板接收來自于程序框圖的指令。在前面板上,輸入控件相當(dāng)于傳統(tǒng)儀器的輸入設(shè)備,而顯示控件則相當(dāng)于傳統(tǒng)儀器的輸出設(shè)備。當(dāng)在前面板上添加一個控件時,程序框圖中會相應(yīng)地添加一個端口,這個與輸入控件或者顯示控件對應(yīng)的端口,僅在刪除它對應(yīng)的控件的時候才會消失。當(dāng)使用LabVIEW進(jìn)行編程時,首先選擇需要用到的功能節(jié)點(diǎn),放置在面板上的合適位置;然后在程序圖中用線連接各節(jié)點(diǎn)的端口,從而實(shí)現(xiàn)節(jié)點(diǎn)之間數(shù)據(jù)傳輸。
LabVIEW具有資源豐富的VISA庫。VISA指的是虛擬儀器的軟件構(gòu)架。VISA庫存在于PC機(jī)系統(tǒng)之中,實(shí)現(xiàn)PC機(jī)與儀器間的連接,其作用是利用程序完成對儀器的控制,它的本質(zhì)是虛擬儀器系統(tǒng)中的標(biāo)準(zhǔn)API。VISA自身沒有編程的能力,它只是一個處在高層的API,只能使用調(diào)用底層驅(qū)動程序的方式來完成對儀器的編程。VISA是遵循VPP標(biāo)準(zhǔn)的I/O接口軟件,把VISA和其它的I/O接口軟件做比較,就會發(fā)現(xiàn)其I/O的控制功能具有以下優(yōu)勢:適用于各種類型的儀器;適用于多種類型的硬件接口;適用于多種網(wǎng)絡(luò)機(jī)制;適用于分布式網(wǎng)絡(luò)結(jié)構(gòu)以及單、多處理器結(jié)構(gòu)。
上位機(jī)程序分為數(shù)據(jù)采集模塊、超限報警模塊和數(shù)據(jù)存儲模塊3個部分。設(shè)置好串口,然后點(diǎn)擊運(yùn)行按鈕,系統(tǒng)就開始進(jìn)行對溫度的讀取,溫度儀表則可以顯示當(dāng)前的溫度,并且通過溫度曲線可以直觀的觀察溫度的變化。上下限可以自由地進(jìn)行設(shè)定,當(dāng)被測值高于上限或者低于下限的時候,與之對應(yīng)的報警指示燈會發(fā)出報警指示,并且會在表格上顯示報警記錄。
串口通信可以LabVIEW的Instrument I/模板的Serial實(shí)現(xiàn),串口讀操作函數(shù)分別為:1)VISA Configure Serial Port;2) VISA Read;3)VISA Flush I/O Buffer;4) VISA Close。串口寫操作函數(shù)分別為:1) VISA Configure Serial Port;2) VISA Write;3)VISA Flush I/O Buffer;4) VISA Close。按照相應(yīng)的順序配置串口操作參數(shù),對打開的串口進(jìn)行讀寫操作,完成讀寫后清空緩沖區(qū)并關(guān)閉串口。程序框圖如圖6所示,其中串口號用來指定用到的串口,這是LabVIEW接收下位機(jī)發(fā)送的溫度數(shù)據(jù)的前提。串口的初始化設(shè)置除串口號均選用默認(rèn)值:波特率為9600,8位數(shù)據(jù)位,1位停止位,無校驗(yàn)位,串口號為COM3。當(dāng)系統(tǒng)開始運(yùn)行時,通過VISA接收下位機(jī)傳送的溫度。因?yàn)長abVIEW的串口通信僅適用于對字符串的讀寫,所以在對數(shù)據(jù)進(jìn)行處理之前,一定要完成字符串和數(shù)值間的轉(zhuǎn)換。LabVIEW通過VISA讀取節(jié)點(diǎn)來讀取單片機(jī)采集的溫度數(shù)據(jù)。
如圖5所示,溫度曲線和儀表用于顯示實(shí)時的溫度值。在報警部分中,溫度的上下限可以自由地進(jìn)行設(shè)置,并將采集到的溫度會分別與設(shè)置的上下限溫度做比較。當(dāng)采集到的溫度高于“溫度上限”時,比較運(yùn)算結(jié)果為“真”,“高溫報警”指示燈會變亮;當(dāng)采集到的溫度低于"溫度下限”時,比較運(yùn)算結(jié)果為"真”,"低溫報警”指示燈就會變亮;總之,無論當(dāng)采集到的溫度高于"溫度上限”或者是低于"溫度下限”時,比較運(yùn)算的結(jié)果都為"真”時,就會有溫度報警,同時表格會記錄下來此時的溫度值。
圖5 溫度采集系統(tǒng)程序框圖
通過C#語言編程完成AT89C51單片機(jī)對溫度傳感器的數(shù)據(jù)讀取,主要實(shí)現(xiàn)下面3個任務(wù):
1)利用單片機(jī)讀取溫度傳感器采集到的溫度數(shù)據(jù);
2)在單片機(jī)數(shù)碼管上顯示溫度傳感器采集的溫度值(保留一位小數(shù));
3)將采集到的溫度值以十六進(jìn)制形式發(fā)送到上位機(jī)系統(tǒng)中。
在初始化階段,令單片機(jī)的定時器T1工作于方式2,用于產(chǎn)生串行通信所需的波特率,單片機(jī)開始讀取DS18B20采集的溫度數(shù)據(jù),然后將溫度數(shù)據(jù)轉(zhuǎn)換為段位碼送給LED數(shù)碼管顯示,另外還要將溫度數(shù)據(jù)轉(zhuǎn)換成十六進(jìn)制數(shù)通過串口通信送入上位機(jī)進(jìn)行分析。
系統(tǒng)的下位機(jī)調(diào)試即對系統(tǒng)硬件的電路連接和單片機(jī)程序的調(diào)試,利用數(shù)碼管的顯示和串口調(diào)試助手可以實(shí)現(xiàn)。具體步驟如下:
1)使用Keil編譯器將C51程序編譯生成HEX文件,然后采用STC-ISP軟件將 HEX文件燒寫到單片機(jī)中。
2)程序下載到單片機(jī)之中后,就可以給單片機(jī)開發(fā)板通電了,這時數(shù)碼管上將會顯示溫度傳感器DS18B20實(shí)時測得的溫度值,如圖7所示。可以調(diào)整溫度傳感器周圍環(huán)境的溫度來檢驗(yàn)程序能否連續(xù)采集溫度。
3)打開"串口調(diào)試助手”程序,首先設(shè)置串口號為COM3、波特率為9600,8位數(shù)據(jù)位,1位停止位,無校驗(yàn)位等,然后選擇"十六進(jìn)制顯示”,打開串口。
4)如果PC機(jī)與單片機(jī)開發(fā)板串口正確連接,則單片機(jī)連續(xù)向PC發(fā)送檢測的溫度值,用2進(jìn)制的十六進(jìn)制數(shù)據(jù)表示,如00 F8,該數(shù)據(jù)串在發(fā)送緩沖區(qū)內(nèi)顯示。根據(jù)單片機(jī)返回數(shù)據(jù),可知當(dāng)前溫度測量值為25.1 ℃,并與數(shù)碼管顯示溫度對照,確認(rèn)無誤。
由于LabVIEW采用的是的圖形化的編程語言,使調(diào)試工作變的很簡便,極大地提高了編程的效率。當(dāng)LabVIEW程序存在語法上的錯誤時,運(yùn)行按鈕上的箭頭會處于斷裂的狀態(tài),這表示該程序存在錯誤,無法執(zhí)行。此時這個按鈕被稱為錯誤列表。通過點(diǎn)擊它,我們就可以查看錯誤清單,雙擊所列出的錯誤,錯誤對象就會變的高亮。
LabVIEW中錯誤的類型有很多,最常見的幾種有:
1)節(jié)點(diǎn)之間未連線;
2)存在無效的節(jié)點(diǎn);
3)程序中兩節(jié)點(diǎn)之間的數(shù)據(jù)類型不同,導(dǎo)致數(shù)據(jù)不能傳遞;
4)存在節(jié)點(diǎn)無法正常運(yùn)行其功能。
程序確認(rèn)無誤后,就可以通過串口把PC機(jī)與單片機(jī)開發(fā)板連接好,然后開始運(yùn)行程序。
調(diào)整溫度上限并改變DS18B20溫度傳感器周圍的溫度,使溫度達(dá)到上限,此時高溫報警指示燈亮,并記入報警記錄。如圖6所示。
圖6 高溫報警
圖7和圖8為溫度檢測系統(tǒng)在電熱水壺周圍進(jìn)行溫度檢測時的界面,溫度分別達(dá)到了47.5 ℃和65.3 ℃。
通過上述實(shí)驗(yàn)監(jiān)測結(jié)果可知,該溫度監(jiān)測系統(tǒng)能夠準(zhǔn)確監(jiān)控當(dāng)前環(huán)境下的溫度,并且當(dāng)環(huán)境溫度超過設(shè)定溫度的上、下限時,系統(tǒng)能夠?qū)崟r地進(jìn)行高溫和低溫報警。報警的同時,根據(jù)實(shí)時溫度值來控制加熱電路或者風(fēng)扇電路, 實(shí)現(xiàn)溫度的實(shí)時監(jiān)測和控制,當(dāng)溫度滿足要求時,停止加熱或者通風(fēng)。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)具有較好的溫度實(shí)時監(jiān)測能力,能同時在溫度監(jiān)測裝置和上位機(jī)程序顯示溫度,具有實(shí)時多點(diǎn)溫度報警的優(yōu)點(diǎn)。還可以將采集的溫度數(shù)據(jù)保存到指定的數(shù)據(jù)庫中, 以備隨時查閱和分析。
圖7 溫度檢測界面
圖8 溫度檢測界面
基于LabVIEW和單片機(jī)的虛擬溫度檢測系統(tǒng)設(shè)計利用單片機(jī)的控制能力以及LabVIEW的強(qiáng)大的數(shù)據(jù)處理能力,設(shè)計了一個方便靈活的測溫系統(tǒng)。通過上位機(jī)LabVIEW能夠很容易地開發(fā)測量和控制系統(tǒng),同時僅使用一臺計算機(jī)就能夠?qū)崿F(xiàn)多路信號的測量和控制。整個監(jiān)測系統(tǒng)設(shè)計十分簡便,對很多小型的測控系統(tǒng)的設(shè)計有很大的參考價值。通過簡單的擴(kuò)展,這一監(jiān)測系統(tǒng)能夠在工業(yè)控制、遠(yuǎn)程監(jiān)控、實(shí)驗(yàn)測量等領(lǐng)域得到廣泛的應(yīng)用。