(1.南京林業大學 機械電子工程學院,南京 210037;2.機器人學國家重點實驗室(中國科學院沈陽自動化研究所),沈陽 110016;3.東南大學 儀器科學與工程學院,南京 210096)
溫度是工業生產中的重要監測參數,對保證產品加工質量和安全生產具有至關重要的作用。諸多工農業產品的生產過程都需要對溫度這一物理量進行嚴格的監控,以保證生產的順利進行。但很多工作環境惡劣的場合,不適合人工測量,為此設計一種能夠對環境溫度進行實時采集與監控的系統具有十分重要的意義[1-2]。
近年來,隨著計算機技術,特別是單片機技術的高速發展,人們開始更加普遍地嘗試運用單片機來對溫度、濕度等工業控制中常見的參數進行測控,另一方面虛擬儀器已經漸漸地成為測控儀器發展的新方向。通過LabVIEW圖形化編程實現對單片機系統采集的數據進行分析處理,就是一種結合二者優勢的數據檢測方法[3]。
將虛擬儀器技術引入溫度監測研究領域已是一個重要趨勢,例如王恒海等開發的基于LabVIEW的溫度測控系統[4]、隋秀梅等設計的基于LabVIEW的八路智能溫度巡檢儀[5]、吳卓葵等設計的基于LabVIEW的多點報警溫度監測系統[6]等。這些監測系統通常采用數據采集卡采集溫度,數據采集比較方便,但缺少靈活性且價格相對較高。只能在上位機顯示溫度,難以在監測裝置端實現溫度顯示,不利于現場操作人員實時觀察,沒有提出相應的溫控方案。針對以上問題,本文提出一種基于LabVIEW和單片機的溫度監控系統,采用低功耗的AT89C51單片機和數字溫度傳感器DS18B20作為硬件構成溫度采集節點,在LabVIEW平臺上通過調用VISA庫函數配置設備參數實現單片機串口與PC機之間的數據傳輸。開發系統軟件界面實現溫度采集與健康。
溫度監控系統結構如圖1所示,系統由PC機、單片機、溫度傳感器、串口通信電路及LabVIEW軟件界面等構成。單片機檢測多個分布放置的DS18B20數字溫度傳感器測得的溫度數據,經過串口電路傳輸到計算機。數據進入計算機后,在LabVIEW開發平臺上利用VISA庫控制計算機I/0口[7-9],通過數據采集子程序、溫度報警子程序,實現溫度的實施監測,同時在軟件前面板上顯示實時溫度曲線。當溫度數據超出設置的上限或下限時,軟件發出語音及報警。報警的同時,根據實時溫度值來控制加熱電路或者風扇電路, 實現溫度的實時監測和控制,當溫度滿足要求時,停止加熱或者通風。

圖1 溫度采集系統結構框圖
詳細的硬件電路如圖2所示,采用AT89C51作為主控芯片,它是一款低功耗,高性能的8位單片機。指令系統與傳統的8051單片機完全兼容,具有很強的適用性。AT89C51在控制領域得到了廣泛的使用,具有很高的性價比。AT89C51有兩種低功耗工作模式可供用戶選擇:待機模式和掉電模式。當用戶選擇待機模式時,系統通過阻斷向CPU提供時鐘信號的通路,使CPU停止工作。可以通過中斷和復位的方法退出待機模式。當用戶選擇掉電模式時,振蕩器將停止工作但內部RAM的內容能夠保存。只能通過硬件復位的方式才能退出掉電模式。

圖2 溫度采集系統硬件電路圖
溫度傳感器則采用美國DALLAS半導體生產的DS18B20,這是一種可組網數字式溫度傳感器,它具有體積小、接口簡潔、低功耗、抗干擾能力強等優點,特別適合構建溫度采集系統。它的測量范圍為-55~+125 ℃,最小分辨率為0.062 5 ℃,適應電壓范圍為3.0~5.5 V。每個DS18B20傳感器都具有唯一的64位序列碼,所以可以實現多個傳感器在一條總線上工作。DS18B20采用單總線技術,不僅可以利用串口,還可以選用I/O口和其他硬件連接,并且能夠直接輸出數字量,不需要進行模數轉換。DS18B20的1、3引腳接地和電源,數據引腳2與單片機相連。在引腳2和引腳3之間連接4.7 kΩ的上拉電阻,確保單片機實現較遠距離讀取溫度數據。
利用單片機驅動DS18B20進行測溫必須歷經以下3個步驟:
1)每一次讀寫之前都必須要對DS18B20進行復位;2)復位成功后發送一條ROM指令;3)最后發送RAM指令。其工作時序分為初始化時序、寫時序和讀時序3部分。
2.1.1 初始化時序
1)先將數據線置高電平“1”;
2)稍作延時;
3)數據線拉到低電平“0”;
4)延時750 μs;
5)數據線拉到高電平“1”;
6)延時等待;
7)若數據線上為低,繼續延時,其延時的時間從發出的高電平起要不少于480μs;
8)將數據線再次拉高。
2.1.2 寫時序
1)數據線先置低電平“0”;
2)延時15 ms;
3)按從低位到高位的順序發送字節(一次只發送一位);
4)延時時間為45 μs;
5)將數據線拉到高電平;
6)重復上1)~6)的操作直到所有的字節全部發送完為止;
7)最后將數據線拉高。
2.1.3 讀時序
1)將數據線拉高“1”;
2)延時2 μs;
3)將數據線拉低“0”;
4)延時15 μs;
5)將數據線拉高“1”;
6)延時15 μs;
7)讀取數據線的狀態位,并處理數據;
8)延時30 μs。
單片機與計算機之間的通信采用串口通信方式,利用MAX232芯片實現單片機TTL電平與PC機232電平之間的轉換,在MAX232芯片上連接1 μF電容消除電磁、電涌的影響。單片機P0口連接8位數碼管,可以直接顯示實時溫度。
溫控電路如圖3 所示,將兩個固態繼電器分別與單片機P1.0、P1.1連接。當系統監測溫度低于設定值時,單片機P 1.1 輸出高電平經過反向為低電平,接通固態繼電器交流觸點,使得交流接觸器1 線圈得電,進而接通加熱線圈加熱。反之,當系統監測到溫度超過設定溫度值時,P1.1口輸出高電平,接通固態繼電器交流觸點接通使得交流線圈2得電打開換氣扇開始降溫。

圖3 溫控電路
監測系統的軟件設計流程如圖4所示,首先進行系統初始化,實現數據采集模塊與計算機數據的串口通信,然后單片機從溫度傳感器讀取數據,同時將數據分為兩種方式展示,一種通過數碼管顯示,另外將數據通過串口傳輸到上位機,利用LabVIEW開發的上位機程序進行顯示存儲。

圖4 軟件程序框圖
LabVIEW給用戶提供了簡便直觀的圖形化編程方法以及眾多的編程函數,使用戶可以便捷地構建自己所需要的儀器系統。用圖形化編程語言編寫的應用程序稱為虛擬儀器 VI,使用LabVIEW編寫的程序都把VI作為后綴名。LabVIEW的核心是VI。每一個VI都有兩個操作界面:前面板和程序框圖。前面板接收來自于程序框圖的指令。在前面板上,輸入控件相當于傳統儀器的輸入設備,而顯示控件則相當于傳統儀器的輸出設備。當在前面板上添加一個控件時,程序框圖中會相應地添加一個端口,這個與輸入控件或者顯示控件對應的端口,僅在刪除它對應的控件的時候才會消失。當使用LabVIEW進行編程時,首先選擇需要用到的功能節點,放置在面板上的合適位置;然后在程序圖中用線連接各節點的端口,從而實現節點之間數據傳輸。
LabVIEW具有資源豐富的VISA庫。VISA指的是虛擬儀器的軟件構架。VISA庫存在于PC機系統之中,實現PC機與儀器間的連接,其作用是利用程序完成對儀器的控制,它的本質是虛擬儀器系統中的標準API。VISA自身沒有編程的能力,它只是一個處在高層的API,只能使用調用底層驅動程序的方式來完成對儀器的編程。VISA是遵循VPP標準的I/O接口軟件,把VISA和其它的I/O接口軟件做比較,就會發現其I/O的控制功能具有以下優勢:適用于各種類型的儀器;適用于多種類型的硬件接口;適用于多種網絡機制;適用于分布式網絡結構以及單、多處理器結構。
上位機程序分為數據采集模塊、超限報警模塊和數據存儲模塊3個部分。設置好串口,然后點擊運行按鈕,系統就開始進行對溫度的讀取,溫度儀表則可以顯示當前的溫度,并且通過溫度曲線可以直觀的觀察溫度的變化。上下限可以自由地進行設定,當被測值高于上限或者低于下限的時候,與之對應的報警指示燈會發出報警指示,并且會在表格上顯示報警記錄。
串口通信可以LabVIEW的Instrument I/模板的Serial實現,串口讀操作函數分別為:1)VISA Configure Serial Port;2) VISA Read;3)VISA Flush I/O Buffer;4) VISA Close。串口寫操作函數分別為:1) VISA Configure Serial Port;2) VISA Write;3)VISA Flush I/O Buffer;4) VISA Close。按照相應的順序配置串口操作參數,對打開的串口進行讀寫操作,完成讀寫后清空緩沖區并關閉串口。程序框圖如圖6所示,其中串口號用來指定用到的串口,這是LabVIEW接收下位機發送的溫度數據的前提。串口的初始化設置除串口號均選用默認值:波特率為9600,8位數據位,1位停止位,無校驗位,串口號為COM3。當系統開始運行時,通過VISA接收下位機傳送的溫度。因為LabVIEW的串口通信僅適用于對字符串的讀寫,所以在對數據進行處理之前,一定要完成字符串和數值間的轉換。LabVIEW通過VISA讀取節點來讀取單片機采集的溫度數據。
如圖5所示,溫度曲線和儀表用于顯示實時的溫度值。在報警部分中,溫度的上下限可以自由地進行設置,并將采集到的溫度會分別與設置的上下限溫度做比較。當采集到的溫度高于“溫度上限”時,比較運算結果為“真”,“高溫報警”指示燈會變亮;當采集到的溫度低于"溫度下限”時,比較運算結果為"真”,"低溫報警”指示燈就會變亮;總之,無論當采集到的溫度高于"溫度上限”或者是低于"溫度下限”時,比較運算的結果都為"真”時,就會有溫度報警,同時表格會記錄下來此時的溫度值。

圖5 溫度采集系統程序框圖
通過C#語言編程完成AT89C51單片機對溫度傳感器的數據讀取,主要實現下面3個任務:
1)利用單片機讀取溫度傳感器采集到的溫度數據;
2)在單片機數碼管上顯示溫度傳感器采集的溫度值(保留一位小數);
3)將采集到的溫度值以十六進制形式發送到上位機系統中。
在初始化階段,令單片機的定時器T1工作于方式2,用于產生串行通信所需的波特率,單片機開始讀取DS18B20采集的溫度數據,然后將溫度數據轉換為段位碼送給LED數碼管顯示,另外還要將溫度數據轉換成十六進制數通過串口通信送入上位機進行分析。
系統的下位機調試即對系統硬件的電路連接和單片機程序的調試,利用數碼管的顯示和串口調試助手可以實現。具體步驟如下:
1)使用Keil編譯器將C51程序編譯生成HEX文件,然后采用STC-ISP軟件將 HEX文件燒寫到單片機中。
2)程序下載到單片機之中后,就可以給單片機開發板通電了,這時數碼管上將會顯示溫度傳感器DS18B20實時測得的溫度值,如圖7所示。可以調整溫度傳感器周圍環境的溫度來檢驗程序能否連續采集溫度。
3)打開"串口調試助手”程序,首先設置串口號為COM3、波特率為9600,8位數據位,1位停止位,無校驗位等,然后選擇"十六進制顯示”,打開串口。
4)如果PC機與單片機開發板串口正確連接,則單片機連續向PC發送檢測的溫度值,用2進制的十六進制數據表示,如00 F8,該數據串在發送緩沖區內顯示。根據單片機返回數據,可知當前溫度測量值為25.1 ℃,并與數碼管顯示溫度對照,確認無誤。
由于LabVIEW采用的是的圖形化的編程語言,使調試工作變的很簡便,極大地提高了編程的效率。當LabVIEW程序存在語法上的錯誤時,運行按鈕上的箭頭會處于斷裂的狀態,這表示該程序存在錯誤,無法執行。此時這個按鈕被稱為錯誤列表。通過點擊它,我們就可以查看錯誤清單,雙擊所列出的錯誤,錯誤對象就會變的高亮。
LabVIEW中錯誤的類型有很多,最常見的幾種有:
1)節點之間未連線;
2)存在無效的節點;
3)程序中兩節點之間的數據類型不同,導致數據不能傳遞;
4)存在節點無法正常運行其功能。
程序確認無誤后,就可以通過串口把PC機與單片機開發板連接好,然后開始運行程序。
調整溫度上限并改變DS18B20溫度傳感器周圍的溫度,使溫度達到上限,此時高溫報警指示燈亮,并記入報警記錄。如圖6所示。

圖6 高溫報警
圖7和圖8為溫度檢測系統在電熱水壺周圍進行溫度檢測時的界面,溫度分別達到了47.5 ℃和65.3 ℃。
通過上述實驗監測結果可知,該溫度監測系統能夠準確監控當前環境下的溫度,并且當環境溫度超過設定溫度的上、下限時,系統能夠實時地進行高溫和低溫報警。報警的同時,根據實時溫度值來控制加熱電路或者風扇電路, 實現溫度的實時監測和控制,當溫度滿足要求時,停止加熱或者通風。實驗結果表明,該系統具有較好的溫度實時監測能力,能同時在溫度監測裝置和上位機程序顯示溫度,具有實時多點溫度報警的優點。還可以將采集的溫度數據保存到指定的數據庫中, 以備隨時查閱和分析。

圖7 溫度檢測界面

圖8 溫度檢測界面
基于LabVIEW和單片機的虛擬溫度檢測系統設計利用單片機的控制能力以及LabVIEW的強大的數據處理能力,設計了一個方便靈活的測溫系統。通過上位機LabVIEW能夠很容易地開發測量和控制系統,同時僅使用一臺計算機就能夠實現多路信號的測量和控制。整個監測系統設計十分簡便,對很多小型的測控系統的設計有很大的參考價值。通過簡單的擴展,這一監測系統能夠在工業控制、遠程監控、實驗測量等領域得到廣泛的應用。