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