龐凱元,徐家川
(山東理工大學 交通與車輛工程學院, 山東 淄博 255049)
隨著計算機技術、軟件技術和網絡技術的發展,越來越多通過傳感器采集的數據可以通過計算機和儀器的結合實時顯示到人們面前。LabVIEW是美國國家儀器(NI)公司開發的圖形化編程語言(G語言),該語言能實現在封裝函數功能的同時完成數據流控制[1],但是其配套的數據采集卡較為昂貴、不支持編程更改。近年來,國內外越來越多的研究者開始使用LabVIEW或LabVIEW多平臺互交的理念去解決眾多的實際問題,多平臺互交的優勢逐漸體現[2-4]。
本文針對與LabVIEW相匹配的數據采集卡較為昂貴且不方便、不支持編程處理等問題,研究并開發一套基于多平臺互交、中長距離數據傳輸并實時顯示的數據采集系統。
該無線數據采集系統是在山東理工大學至尚方程式賽車隊的實踐平臺上研究開發的。數據采集系統采集的數據有:發動機溫度、左后懸和右前懸的伸縮量、加速度、側向加速度。
利用Arduino開發平臺對Arduino控制板進行二次開發,在采集各個數據的同時進行數據處理工作。Arduino將數據按照時間索引分批打包生成單個字符串后,與具有SX1278芯片的發射器進行串口通訊。接收器端與基于LabVIEW設計的上位機進行串口通訊,數據在上位機中分解并整理后,在上位機的前面板進行具體的顯示,系統整體框架圖如圖1所示。

圖1 系統整體框架Fig.1 Overall system framework
2.1.1 加速度和側向加速度的數據采集和數據處理
利用三軸加速度計、陀螺儀傳感器(MPU605)采集車輛行駛時X軸(正前方)、Y軸(正右方)、Z軸(正上方)三軸的加速度值和角度值。
利用加速度計測量時,會有大量噪音信號的干擾,造成加速度計波形嚴重失真。相比之下,陀螺儀測量的是角度值,所以對于發動機和車體的震動沒有那么敏感;同時,利用卡爾曼濾波,可以過濾噪音以還原X、Y、Z三軸加速度。
卡爾曼濾波是不斷遞歸的運算過程,即使在初始非穩態的條件下,卡爾曼濾波也能在一定時間內進行若干次遞推運算從而達到穩態收斂的輸出值[5]??柭鼮V波遞推公式如下[5]:

(1)

在本設計中,先估計X、Y、Z三軸的角度值以及加速度、側向加速度,使加速度和側向加速度的預測和實際測量值的差值,即均方差收斂;再通過X、Y、Z三軸角度值估計值的加權來修正加速度和側向加速度的估計值。
2.1.2 發動機溫度的數據采集和數據處理
基于插裝方便、后期車輛便于保養等要求,溫度傳感器的位置設置在發動機進水口端,以近似測量發動機溫度。測溫傳感器采用具有只需單引腳就可以通訊、測溫范圍-55 ℃~+125 ℃、全部功能集成在器件中、無需再增加其他外部器件等特點的DS18B20[6]。
DS18B20 主要由四部分組成:64位ROM、溫度敏感元件、溫度報警觸發器TH和TL及相應的配置寄存器[7]。在傳感器出廠之前,廠家已經將64位的唯一序列號內置到傳感器的儲存器當中[6]。Arduino控制板在讀取數據時,首先在總線上發送某個DS18B20序列號,該DS18B20觸發響應,實現單總線多DS18B20測溫傳感器識別的目的。
非阻塞式算法流程如下:
步驟1:設置1 000 ms的時間間隔,并將程序初始時間設置為0,實現初始化。
步驟2:不斷讀取當前時間,并計算與初始時間的差值。
步驟3:當時間的差值大于設定的時間間隔,便向單總線獲取索引為0的DS18B20溫度值。
步驟4:不斷改變時間間隔和索引號,實現多DS18B20的單總線數據采集。
此算法中沒有使用數據結構中的“鎖”,大大降低了對Arduino控制板性能上的消耗。
2.1.3 左后懸和右前懸伸縮量的數據采集和數據處理
根據彈簧和阻尼器的長度選用位移傳感器KMP16J-225MM,該傳感器輸出模擬電壓信號,最大工作速度5 m/s,具有使用時間長等特點。
傳感器將數據通過模擬電壓信號輸出到Arduino控制板,Arduino采集數據并將其保存到數組,然后在中值濾波處理下刷新數組數值,得到平均值,成為較為可靠的數據。
2.2.1 數據存儲
利用Arduino開發平臺中的SD庫進行函數的調用,操作方便且可移植性強。在代碼中設置保存路徑、文件名稱和保存內容后,便在SD卡得到存儲的數據。在源頭可以得到數據的備份,方便后期與上位機數據的比對和用戶對數據的保護。
2.2.2 數據傳輸
Arduino將數據進行初步處理后,分別將其拼接成一個字符串,并利用串口通訊和發射機進行數據通訊。在無線數據傳輸系統中,采用SEMTECH公司LoRa TM 調制技術的無線射頻芯片SX1278,把采集到的數據通過無線遠距離發送出去,也可以接收控制中心或手持自檢預置器的命令,其優點是在滿足低成本、低功耗的前提下實現遠距離數據傳輸[8-9]。
用無線數據采集系統去控制5個獨立的采集通道,該無線數據采集系統可以單獨實現數據流的接收和切斷、新建文件、刪除文檔、退出系統和自動保存數據等功能,還可以分塊單獨顯示各部分數據、程序運行時間、數據采集數量等。
上位機界面圖如圖2所示。圖2中,前面板的左上側有停止和打開串口兩個控制按鈕③,分別控制系統的退出并保存數據和數據流的切斷及接收功能,每一次接收到數據便進行閃爍,閃爍的速率表示數據采集的速率。側采集周期選板⑤可以主動更改上位機接收數據的速率。右下側的兩個波形圖表①、②,分別實時顯示左后懸和右前懸的伸縮量,波形圖表的上方有圖例和實時顯示的具體數值。右側下方的XY圖⑥中,Y軸對應的數值為側向加速度,X軸對應的數值為加速度。最右側的溫度計⑦實時顯示發動機溫度。通訊指示燈④顯示通訊狀態。

圖2 上位機界面Fig.2 Labview interface
上位機流程圖編寫步驟如下:
步驟1:利用LabVIEW中VISA庫函數控制串口通訊,實現上位機與接收器之間的串口通訊,進行數據傳輸。
步驟2:通過在Bytes at Port屬性節點中讀取字節數是否為空,來控制上位機數據處理和顯示是否工作,如果為空則輸出錯誤信號,使后面程序失效。在檢測到有數據采集后,便進入子VI(數據接收處理),分成5條分路。
步驟3:在進入數據接收處理的子VI前刪除空白字符串,并在子VI 中進行字符串數據位數的判斷,查看數據是否丟失,自檢數據傳輸中是否出現錯位字符導致后面的拆分錯誤。
步驟4:應用LabVIEW中自制數據接收處理子VI,在Arduino中將每種采集到的數據在發送至發送機時,通過自定的規則(如圖3所示),拼接成合適的字符串,在LabVIEW子VI中按照上述規則拆分字符串。其中子VI按照圖3把數據拆分成5條數據流,每一條分路都是上述提到的用戶所需數據,并前往特定的顯示函數進行前臺顯示。

圖3 數據傳輸時自定的規則Fig.3 Custom rules for data transmission
步驟5:左右兩側懸架伸縮量、加速度和側向加速度,經過數值至小數字符串轉換函數后,與系統檢測到的絕對時間拼接成一個字符串。在文件存儲函數和路徑設置后生成以時間命名的TXT文件,并存入本上位機的存儲目錄下,用來備份數據和方便用戶數據導出,上位機主體流程圖如圖4所示。

圖4 上位機主體流程圖Fig.4 Labview main process
步驟6:在保存加速度和側向加速度數據的同時,利用反饋節點和數組插入函數使單個數據生成一個動態數組。該動態數組在Express函數庫的幫助下轉換成動態數據輸入XY圖函數,從而在前面板生成二維的加速度圖。
完成上位機和下位機分別獨立編程后,對其進行實際的通訊測試,檢測無線數據采集系統的數據傳輸距離和穩定性。本次實驗選用的下位機控制板為Arduino UNO單片機,無線射頻芯片SX1278和MPU6050的硬件連接如圖5所示。

圖5 硬件連接Fig.5 Hardware connection
在發射器固定的前提下移動接收器,并在特定的距離將接收器的數據接收速率和發射器的發射源發送速率進行比較,比值見表1。
由表1可知,數據接收距離在700 m以內可以實現實時接收數據,符合實驗預期。

表1 數據接受速率和發送速率的比值Tab.1 The ratio of data receiving rate to sending rate
本無線數據采集系統用開源、簡單的開發平臺和控制板實現了較為復雜的運算和顯示功能。由于本設計拋棄了傳統數據采集多線多程和固定數據采集卡的弊端,因而具有低成本、實時性較強、開源靈活、方便后期改進等突出優點,在特種車輛和工業機器人領域具有較高的實用價值。