龐凱元,徐家川
(山東理工大學 交通與車輛工程學院, 山東 淄博 255049)
隨著計算機技術、軟件技術和網(wǎng)絡技術的發(fā)展,越來越多通過傳感器采集的數(shù)據(jù)可以通過計算機和儀器的結合實時顯示到人們面前。LabVIEW是美國國家儀器(NI)公司開發(fā)的圖形化編程語言(G語言),該語言能實現(xiàn)在封裝函數(shù)功能的同時完成數(shù)據(jù)流控制[1],但是其配套的數(shù)據(jù)采集卡較為昂貴、不支持編程更改。近年來,國內(nèi)外越來越多的研究者開始使用LabVIEW或LabVIEW多平臺互交的理念去解決眾多的實際問題,多平臺互交的優(yōu)勢逐漸體現(xiàn)[2-4]。
本文針對與LabVIEW相匹配的數(shù)據(jù)采集卡較為昂貴且不方便、不支持編程處理等問題,研究并開發(fā)一套基于多平臺互交、中長距離數(shù)據(jù)傳輸并實時顯示的數(shù)據(jù)采集系統(tǒng)。
該無線數(shù)據(jù)采集系統(tǒng)是在山東理工大學至尚方程式賽車隊的實踐平臺上研究開發(fā)的。數(shù)據(jù)采集系統(tǒng)采集的數(shù)據(jù)有:發(fā)動機溫度、左后懸和右前懸的伸縮量、加速度、側(cè)向加速度。
利用Arduino開發(fā)平臺對Arduino控制板進行二次開發(fā),在采集各個數(shù)據(jù)的同時進行數(shù)據(jù)處理工作。Arduino將數(shù)據(jù)按照時間索引分批打包生成單個字符串后,與具有SX1278芯片的發(fā)射器進行串口通訊。接收器端與基于LabVIEW設計的上位機進行串口通訊,數(shù)據(jù)在上位機中分解并整理后,在上位機的前面板進行具體的顯示,系統(tǒng)整體框架圖如圖1所示。
圖1 系統(tǒng)整體框架Fig.1 Overall system framework
2.1.1 加速度和側(cè)向加速度的數(shù)據(jù)采集和數(shù)據(jù)處理
利用三軸加速度計、陀螺儀傳感器(MPU605)采集車輛行駛時X軸(正前方)、Y軸(正右方)、Z軸(正上方)三軸的加速度值和角度值。
利用加速度計測量時,會有大量噪音信號的干擾,造成加速度計波形嚴重失真。相比之下,陀螺儀測量的是角度值,所以對于發(fā)動機和車體的震動沒有那么敏感;同時,利用卡爾曼濾波,可以過濾噪音以還原X、Y、Z三軸加速度。
卡爾曼濾波是不斷遞歸的運算過程,即使在初始非穩(wěn)態(tài)的條件下,卡爾曼濾波也能在一定時間內(nèi)進行若干次遞推運算從而達到穩(wěn)態(tài)收斂的輸出值[5]。卡爾曼濾波遞推公式如下[5]:
(1)
在本設計中,先估計X、Y、Z三軸的角度值以及加速度、側(cè)向加速度,使加速度和側(cè)向加速度的預測和實際測量值的差值,即均方差收斂;再通過X、Y、Z三軸角度值估計值的加權來修正加速度和側(cè)向加速度的估計值。
2.1.2 發(fā)動機溫度的數(shù)據(jù)采集和數(shù)據(jù)處理
基于插裝方便、后期車輛便于保養(yǎng)等要求,溫度傳感器的位置設置在發(fā)動機進水口端,以近似測量發(fā)動機溫度。測溫傳感器采用具有只需單引腳就可以通訊、測溫范圍-55 ℃~+125 ℃、全部功能集成在器件中、無需再增加其他外部器件等特點的DS18B20[6]。
DS18B20 主要由四部分組成:64位ROM、溫度敏感元件、溫度報警觸發(fā)器TH和TL及相應的配置寄存器[7]。在傳感器出廠之前,廠家已經(jīng)將64位的唯一序列號內(nèi)置到傳感器的儲存器當中[6]。Arduino控制板在讀取數(shù)據(jù)時,首先在總線上發(fā)送某個DS18B20序列號,該DS18B20觸發(fā)響應,實現(xiàn)單總線多DS18B20測溫傳感器識別的目的。
非阻塞式算法流程如下:
步驟1:設置1 000 ms的時間間隔,并將程序初始時間設置為0,實現(xiàn)初始化。
步驟2:不斷讀取當前時間,并計算與初始時間的差值。
步驟3:當時間的差值大于設定的時間間隔,便向單總線獲取索引為0的DS18B20溫度值。
步驟4:不斷改變時間間隔和索引號,實現(xiàn)多DS18B20的單總線數(shù)據(jù)采集。
此算法中沒有使用數(shù)據(jù)結構中的“鎖”,大大降低了對Arduino控制板性能上的消耗。
2.1.3 左后懸和右前懸伸縮量的數(shù)據(jù)采集和數(shù)據(jù)處理
根據(jù)彈簧和阻尼器的長度選用位移傳感器KMP16J-225MM,該傳感器輸出模擬電壓信號,最大工作速度5 m/s,具有使用時間長等特點。
傳感器將數(shù)據(jù)通過模擬電壓信號輸出到Arduino控制板,Arduino采集數(shù)據(jù)并將其保存到數(shù)組,然后在中值濾波處理下刷新數(shù)組數(shù)值,得到平均值,成為較為可靠的數(shù)據(jù)。
2.2.1 數(shù)據(jù)存儲
利用Arduino開發(fā)平臺中的SD庫進行函數(shù)的調(diào)用,操作方便且可移植性強。在代碼中設置保存路徑、文件名稱和保存內(nèi)容后,便在SD卡得到存儲的數(shù)據(jù)。在源頭可以得到數(shù)據(jù)的備份,方便后期與上位機數(shù)據(jù)的比對和用戶對數(shù)據(jù)的保護。
2.2.2 數(shù)據(jù)傳輸
Arduino將數(shù)據(jù)進行初步處理后,分別將其拼接成一個字符串,并利用串口通訊和發(fā)射機進行數(shù)據(jù)通訊。在無線數(shù)據(jù)傳輸系統(tǒng)中,采用SEMTECH公司LoRa TM 調(diào)制技術的無線射頻芯片SX1278,把采集到的數(shù)據(jù)通過無線遠距離發(fā)送出去,也可以接收控制中心或手持自檢預置器的命令,其優(yōu)點是在滿足低成本、低功耗的前提下實現(xiàn)遠距離數(shù)據(jù)傳輸[8-9]。
用無線數(shù)據(jù)采集系統(tǒng)去控制5個獨立的采集通道,該無線數(shù)據(jù)采集系統(tǒng)可以單獨實現(xiàn)數(shù)據(jù)流的接收和切斷、新建文件、刪除文檔、退出系統(tǒng)和自動保存數(shù)據(jù)等功能,還可以分塊單獨顯示各部分數(shù)據(jù)、程序運行時間、數(shù)據(jù)采集數(shù)量等。
上位機界面圖如圖2所示。圖2中,前面板的左上側(cè)有停止和打開串口兩個控制按鈕③,分別控制系統(tǒng)的退出并保存數(shù)據(jù)和數(shù)據(jù)流的切斷及接收功能,每一次接收到數(shù)據(jù)便進行閃爍,閃爍的速率表示數(shù)據(jù)采集的速率。側(cè)采集周期選板⑤可以主動更改上位機接收數(shù)據(jù)的速率。右下側(cè)的兩個波形圖表①、②,分別實時顯示左后懸和右前懸的伸縮量,波形圖表的上方有圖例和實時顯示的具體數(shù)值。右側(cè)下方的XY圖⑥中,Y軸對應的數(shù)值為側(cè)向加速度,X軸對應的數(shù)值為加速度。最右側(cè)的溫度計⑦實時顯示發(fā)動機溫度。通訊指示燈④顯示通訊狀態(tài)。
圖2 上位機界面Fig.2 Labview interface
上位機流程圖編寫步驟如下:
步驟1:利用LabVIEW中VISA庫函數(shù)控制串口通訊,實現(xiàn)上位機與接收器之間的串口通訊,進行數(shù)據(jù)傳輸。
步驟2:通過在Bytes at Port屬性節(jié)點中讀取字節(jié)數(shù)是否為空,來控制上位機數(shù)據(jù)處理和顯示是否工作,如果為空則輸出錯誤信號,使后面程序失效。在檢測到有數(shù)據(jù)采集后,便進入子VI(數(shù)據(jù)接收處理),分成5條分路。
步驟3:在進入數(shù)據(jù)接收處理的子VI前刪除空白字符串,并在子VI 中進行字符串數(shù)據(jù)位數(shù)的判斷,查看數(shù)據(jù)是否丟失,自檢數(shù)據(jù)傳輸中是否出現(xiàn)錯位字符導致后面的拆分錯誤。
步驟4:應用LabVIEW中自制數(shù)據(jù)接收處理子VI,在Arduino中將每種采集到的數(shù)據(jù)在發(fā)送至發(fā)送機時,通過自定的規(guī)則(如圖3所示),拼接成合適的字符串,在LabVIEW子VI中按照上述規(guī)則拆分字符串。其中子VI按照圖3把數(shù)據(jù)拆分成5條數(shù)據(jù)流,每一條分路都是上述提到的用戶所需數(shù)據(jù),并前往特定的顯示函數(shù)進行前臺顯示。
圖3 數(shù)據(jù)傳輸時自定的規(guī)則Fig.3 Custom rules for data transmission
步驟5:左右兩側(cè)懸架伸縮量、加速度和側(cè)向加速度,經(jīng)過數(shù)值至小數(shù)字符串轉(zhuǎn)換函數(shù)后,與系統(tǒng)檢測到的絕對時間拼接成一個字符串。在文件存儲函數(shù)和路徑設置后生成以時間命名的TXT文件,并存入本上位機的存儲目錄下,用來備份數(shù)據(jù)和方便用戶數(shù)據(jù)導出,上位機主體流程圖如圖4所示。
圖4 上位機主體流程圖Fig.4 Labview main process
步驟6:在保存加速度和側(cè)向加速度數(shù)據(jù)的同時,利用反饋節(jié)點和數(shù)組插入函數(shù)使單個數(shù)據(jù)生成一個動態(tài)數(shù)組。該動態(tài)數(shù)組在Express函數(shù)庫的幫助下轉(zhuǎn)換成動態(tài)數(shù)據(jù)輸入XY圖函數(shù),從而在前面板生成二維的加速度圖。
完成上位機和下位機分別獨立編程后,對其進行實際的通訊測試,檢測無線數(shù)據(jù)采集系統(tǒng)的數(shù)據(jù)傳輸距離和穩(wěn)定性。本次實驗選用的下位機控制板為Arduino UNO單片機,無線射頻芯片SX1278和MPU6050的硬件連接如圖5所示。
圖5 硬件連接Fig.5 Hardware connection
在發(fā)射器固定的前提下移動接收器,并在特定的距離將接收器的數(shù)據(jù)接收速率和發(fā)射器的發(fā)射源發(fā)送速率進行比較,比值見表1。
由表1可知,數(shù)據(jù)接收距離在700 m以內(nèi)可以實現(xiàn)實時接收數(shù)據(jù),符合實驗預期。
表1 數(shù)據(jù)接受速率和發(fā)送速率的比值Tab.1 The ratio of data receiving rate to sending rate
本無線數(shù)據(jù)采集系統(tǒng)用開源、簡單的開發(fā)平臺和控制板實現(xiàn)了較為復雜的運算和顯示功能。由于本設計拋棄了傳統(tǒng)數(shù)據(jù)采集多線多程和固定數(shù)據(jù)采集卡的弊端,因而具有低成本、實時性較強、開源靈活、方便后期改進等突出優(yōu)點,在特種車輛和工業(yè)機器人領域具有較高的實用價值。