張月魁 姜 祝 吳永紅 蔡惠華 高小強
(1.北京航天計量測試技術(shù)研究所,北京 100076)
飛行器在運輸、存儲、飛行過程中需要對其各種狀態(tài)進行監(jiān)測用于判斷飛行器的健康狀況。飛行器需要監(jiān)測的狀態(tài)包括振動、沖擊、溫度、濕度、氣壓等。以往狀態(tài)監(jiān)測使用的傳感器多采用有線方式連接至采集裝置,電纜數(shù)量多,布線復雜,導致飛行器增加了負擔,降低了有效載荷的攜帶能力。將傳感器的數(shù)據(jù)傳輸方式變更為無線方式將可有效改善這一問題。
目前的無線傳輸方式包括ZigBee、WIFI、藍牙等方式,其中ZigBee技術(shù)在飛行器狀態(tài)監(jiān)測中使用廣泛。但ZigBee的傳輸速度較慢,有效數(shù)據(jù)的傳輸速度實測在24Kb/s左右,當需要采集頻率較高的沖擊數(shù)據(jù)時,該技術(shù)不能保證數(shù)據(jù)傳輸?shù)挠行?,需要在?shù)據(jù)處理時采用相應算法對欠采樣的數(shù)據(jù)進行處理,甚至可能無法得到有效的結(jié)果。WIFI、藍牙具有高的數(shù)據(jù)傳輸速率,但功耗較高,在飛行器狀態(tài)監(jiān)測中使用較少。nRF24L01+是一款工作于ISM頻段的無線單片收發(fā)芯片。該芯片的體積小、功耗低(0dBm功率發(fā)送數(shù)據(jù)時,電流為11.3mA,空氣傳播速率2Mbps時,接收電流為13.5mA),傳輸速度適中(空氣中傳播速率最快2Mbps),適合應用于低功耗、中等速度的飛行器狀態(tài)監(jiān)測系統(tǒng)中。
本文以nRF24L01+為無線傳輸核心芯片,設(shè)計了一種采用無線方式傳輸狀態(tài)數(shù)據(jù)的飛行器狀態(tài)監(jiān)控系統(tǒng),實現(xiàn)了飛行器沖擊、振動、溫度、濕度、氣壓的監(jiān)測。
系統(tǒng)總體結(jié)構(gòu)如圖1所示。
圖1 飛行器狀態(tài)監(jiān)控系統(tǒng)總體結(jié)構(gòu)圖
狀態(tài)監(jiān)控系統(tǒng)由三部分組成:數(shù)據(jù)讀取計算機、主節(jié)點、各狀態(tài)監(jiān)測子節(jié)點。數(shù)據(jù)讀取計算機通過USB(TTL電平)轉(zhuǎn)換器監(jiān)控或讀取主節(jié)點的狀態(tài)監(jiān)測數(shù)據(jù)。主節(jié)點通過無線方式獲取各狀態(tài)監(jiān)測節(jié)點的狀態(tài)數(shù)據(jù)。狀態(tài)監(jiān)測節(jié)點完成狀態(tài)數(shù)據(jù)的獲取。
數(shù)據(jù)讀取計算機可使用工控機或筆記本電腦,由于系統(tǒng)僅用于數(shù)據(jù)監(jiān)測或讀取,不需要過高的配置,除運行系統(tǒng)必要的資源外,運行監(jiān)控軟件只需512MBytes內(nèi)存和512MBytes硬盤存儲空間即可。
主節(jié)點以微控制器為核心,通過SPI接口分別與nRF24L01+和FLASH存儲器通信,完成無線數(shù)據(jù)傳輸和數(shù)據(jù)存儲。其結(jié)構(gòu)如圖2所示。
圖2 主節(jié)點硬件結(jié)構(gòu)圖
主節(jié)點微控制器選擇STM32F103RET6,其采用ARM公司Cortex M3內(nèi)核,運行時鐘可達72MHz,內(nèi)部集成FLASH存儲器和SRAM,可在不擴展外部存儲的情況下,完成最小系統(tǒng)的搭建,內(nèi)部資源及接口豐富,具有3個SPI硬件接口,接口最快時鐘頻率為18MHz,具備4種工作模式,滿足節(jié)點對控制器硬件的需求。
FLASH存儲器采用W25N01GVZEIT,其容量為128MBytes,可通過SPI接口與外部進行數(shù)據(jù)交換,數(shù)據(jù)讀寫速度快且功耗低至82.5mW,可進行100000次擦寫,所存儲數(shù)據(jù)可以保存10年以上,滿足本設(shè)計對容量、速度和功耗的要求。
無線數(shù)據(jù)傳輸芯片的有效數(shù)據(jù)傳輸速度實測最大值為440kb/s,由于系統(tǒng)采用非標準協(xié)議進行數(shù)據(jù)傳輸,為減輕數(shù)據(jù)擁塞及CPU負擔,主節(jié)點使用兩個nRF24lL01+進行數(shù)據(jù)傳輸,充分利用了微控制器的SPI接口。
狀態(tài)監(jiān)測節(jié)點同樣以微處理器為核心,通過SPI接口與nRF24L01+通信完成數(shù)據(jù)的傳輸,通過模擬或數(shù)字接口連接傳感器,獲取狀態(tài)數(shù)據(jù),如圖3所示。
圖3 狀態(tài)監(jiān)測節(jié)點硬件結(jié)構(gòu)圖
狀態(tài)監(jiān)測節(jié)點的微控制器同樣采用STM32F103RET6,該款單片機內(nèi)部集成了模數(shù)轉(zhuǎn)換器和SPI等數(shù)字接口,符合節(jié)點對微控制器的要求。
系統(tǒng)對飛行器的以下狀態(tài)進行監(jiān)測:沖擊、振動、溫度、濕度、氣壓。其中,沖擊、低頻振動傳感器輸出的是模擬信號,需要經(jīng)過信號調(diào)理電路后由微控制器內(nèi)部的ADC進行數(shù)據(jù)采集。高頻振動、溫度、濕度、氣壓傳感器的輸出為數(shù)字信號,由微控制器的SPI或數(shù)字接口進行數(shù)據(jù)采集。各傳感器的技術(shù)指標如表1所示。
從表1中可以看出,數(shù)據(jù)傳輸速度相對最大數(shù)據(jù)傳輸速度有較大裕量,因此各狀態(tài)監(jiān)測節(jié)點中只需1片nRF24L01+即可保證數(shù)據(jù)的傳輸。而在主節(jié)點中,nRF24L01+_1負責與沖擊狀態(tài)監(jiān)測節(jié)點進行通信,nRF24L01+_2負責與其它狀態(tài)監(jiān)測節(jié)點進行通信。
表1 飛行器狀態(tài)監(jiān)測參數(shù)技術(shù)指標
本部分按照狀態(tài)監(jiān)測數(shù)據(jù)采集、傳輸、存儲和讀取的順序說明系統(tǒng)軟件的工作過程。
狀態(tài)監(jiān)測節(jié)點負責狀態(tài)數(shù)據(jù)的采集并將數(shù)據(jù)傳輸至主節(jié)點。狀態(tài)監(jiān)測節(jié)點軟件包括主函數(shù)、無線芯片中斷處理函數(shù),定時器1中斷處理函數(shù)和定時器2中斷處理函數(shù)。函數(shù)的工作流程如圖4所示。
圖4 狀態(tài)監(jiān)測節(jié)點程序流程圖
主函數(shù)負責數(shù)據(jù)的整體處理流程。節(jié)點上電后,微控制器首先對自身的系統(tǒng)資源進行初始化,包括GPIO口、定時器、SPI接口、USART接口的初始化。其次,程序?qū)λ褂玫牡淖兞窟M行初始化,對中斷資源進行配置并打開相應中斷。最后,主函數(shù)在是否處理nRF24L01+中斷、是否切換nRF24L01+收發(fā)狀態(tài)、是否復位nRF24L01+三個狀態(tài)之間不斷進行切換,完成相應工作。
nRF24L01+接口有IRQ引腳,用于指示nRF24L01+中斷的狀態(tài),在IRQ引腳拉低后,程序觸發(fā)nRF24L01+中斷,在中斷處理函數(shù)中,程序僅置位相應標志,中斷的處理則放置在主函數(shù)中。觸發(fā)nRF24L01+中斷的事件有三類,數(shù)據(jù)發(fā)送完成、數(shù)據(jù)接收完成和數(shù)據(jù)重傳完成。nRF24L01+以32個字節(jié)數(shù)據(jù)為一幀進行傳輸,當數(shù)據(jù)傳輸完成時觸發(fā)數(shù)據(jù)發(fā)送完成中斷,此時程序判斷是否還有待發(fā)送幀以決定是否繼續(xù)傳輸。數(shù)據(jù)接收完成中斷在主節(jié)點發(fā)送數(shù)據(jù)請求命令時產(chǎn)生,當狀態(tài)監(jiān)測節(jié)點收到命令后,開始數(shù)據(jù)的傳輸。數(shù)據(jù)重傳中斷發(fā)生在通信質(zhì)量不佳的情況下,此時需要重傳數(shù)據(jù)并開始通信質(zhì)量不佳的計數(shù),當通信質(zhì)量持續(xù)不佳時,將nRF24L01+復位為數(shù)據(jù)接收狀態(tài)。通信質(zhì)量不佳除通信信號弱的原因外,還有可能是由于主節(jié)點和狀態(tài)監(jiān)測節(jié)點同時處于發(fā)狀態(tài)造成的。
nRF24L01+收發(fā)狀態(tài)的切換在以下情況發(fā)生:當接收到主節(jié)點的數(shù)據(jù)請求命令后,nRF24L01+的狀態(tài)由收變?yōu)榘l(fā);當向主節(jié)點發(fā)送完64幀數(shù)據(jù)后,nRF24L01+的狀態(tài)由發(fā)變?yōu)槭铡?/p>
當nRF24L01+處于空閑狀態(tài)時間過長時,nRF24L01+復位為收狀態(tài),以保證節(jié)點間輪詢時間過長或發(fā)生其它未知錯誤時,nRF24L01+始終處于接收主節(jié)點數(shù)據(jù)請求命令的狀態(tài)。
定時器1中斷用于節(jié)點計時及傳感器數(shù)據(jù)的采集。狀態(tài)監(jiān)測節(jié)點具有自身的時間基準,同時在接收的主節(jié)點數(shù)據(jù)幀中包含主節(jié)點的時間信息,兩者結(jié)合能得到整個系統(tǒng)的統(tǒng)一時間標準,節(jié)點的計時周期為1ms。當?shù)竭_數(shù)據(jù)采集的時間結(jié)點時進行數(shù)據(jù)采集,由于每次數(shù)據(jù)采集的時間最多在10us左右,因此數(shù)據(jù)采集放在中斷程序中執(zhí)行。
定時器2中斷用于收發(fā)及復位狀態(tài)的計時。節(jié)點設(shè)置了收發(fā)狀態(tài)轉(zhuǎn)換時的中間態(tài),用于保證數(shù)據(jù)收發(fā)時序的正確執(zhí)行,減少主節(jié)點和狀態(tài)監(jiān)測節(jié)點同時處于發(fā)狀態(tài)的幾率。中間態(tài)由定時器2進行計時。當節(jié)點由收狀態(tài)經(jīng)中間態(tài)到達發(fā)狀態(tài)時,由定時器2程序開始第一幀首字節(jié)數(shù)據(jù)的傳輸。同時,定時器2還有類似看門狗的功能,當數(shù)據(jù)收發(fā)時間過長,不能定時清零定時器2的復位計數(shù)時,復位設(shè)置被執(zhí)行,狀態(tài)監(jiān)測節(jié)點回到收狀態(tài)。
主節(jié)點負責輪詢各狀態(tài)監(jiān)測節(jié)點數(shù)據(jù)并將數(shù)據(jù)存入FLASH存儲器,同時,數(shù)據(jù)可通過串口被數(shù)據(jù)讀取計算機讀取。根據(jù)系統(tǒng)使用環(huán)境的不同,主節(jié)點的工作模式可設(shè)置為命令啟動數(shù)據(jù)采集或上電啟動數(shù)據(jù)采集。當飛行器處于運輸、存儲環(huán)節(jié)時,系統(tǒng)可設(shè)置為命令啟動數(shù)據(jù)采集,此時數(shù)據(jù)讀取計算機可以向主節(jié)點發(fā)送開始數(shù)據(jù)采集命令,主節(jié)點可向數(shù)據(jù)讀取計算機定時發(fā)送數(shù)據(jù),使系統(tǒng)的工作狀態(tài)受控。當飛行器處于飛行環(huán)節(jié)時,系統(tǒng)可設(shè)置為上電啟動數(shù)據(jù)采集,此時,主節(jié)點FLASH中存儲的數(shù)據(jù)將在飛行器飛行結(jié)束后,由工作人員將主節(jié)點取回并由數(shù)據(jù)讀取計算機讀取數(shù)據(jù)。主節(jié)點軟件可分為主函數(shù)、定時器1中斷處理函數(shù)和定時器2中斷處理函數(shù)。函數(shù)的工作流程如圖5所示。
圖5 主節(jié)點程序流程圖
主函數(shù)負責數(shù)據(jù)的整體處理流程,包括兩個nRF24L01+的輪詢策略以及FLASH數(shù)據(jù)存儲。節(jié)點上電后,微控制器對系統(tǒng)資源、使用的的變量進行初始化,對中斷資源進行配置并打開相應中斷。隨后,主函數(shù)在是否處理nRF24L01+_1/2中斷、是否切換nRF24L01+_1/2收發(fā)狀態(tài)或復位、是否向FLASH中寫入數(shù)據(jù)三個狀態(tài)之間不斷進行切換,完成相應工作。
nRF24L01+_1/2中斷同樣是由IRQ引腳觸發(fā),在中斷處理函數(shù)中,程序僅置位相應標志,中斷的處理放在主函數(shù)中。nRF24L01+_1/2的中斷事件類型與狀態(tài)監(jiān)測節(jié)點一致。nRF24L01+_1/2的發(fā)送完成中斷發(fā)生在數(shù)據(jù)請求命令傳輸完成之后。nRF24L01+_1/2的接收完成中斷發(fā)生在接收一幀監(jiān)測數(shù)據(jù)之后,當接收到64幀數(shù)據(jù)之后,置位相應標志,nRF24L01+_2還需進行狀態(tài)監(jiān)測節(jié)點的切換。數(shù)據(jù)重傳中斷發(fā)生的nRF24L01+_1/2復位,將nRF24L01+_1復位為發(fā)送沖擊狀態(tài)監(jiān)測數(shù)據(jù)請求命令,將nRF24L01+_2復位為發(fā)送高頻振動狀態(tài)監(jiān)測數(shù)據(jù)請求命令。
nRF24L01+_1/2收發(fā)狀態(tài)的切換在以下情況發(fā)生:當接收到狀態(tài)監(jiān)測節(jié)點的64幀數(shù)據(jù)后,nRF24L01+_1/2的狀態(tài)由收變?yōu)榘l(fā);當向狀態(tài)監(jiān)測節(jié)點發(fā)送完數(shù)據(jù)請求命令后,nRF24L01+_1/2的狀態(tài)由發(fā)變?yōu)槭眨琻RF24L01+_1/2收發(fā)狀態(tài)轉(zhuǎn)換同樣有過渡的中間態(tài)。
當nRF24L01+_1/2處于空閑狀態(tài)時間過長時,nRF24L01+_1/2復位,復位后的狀態(tài)與重傳中斷一致。
向FLASH中寫入數(shù)據(jù)的條件是節(jié)點接收到完整的64幀數(shù)據(jù)并且節(jié)點處于收發(fā)轉(zhuǎn)換的中間態(tài)。為提高讀寫效率并延長FLASH的使用壽命,F(xiàn)LASH讀寫為頁讀寫。所用FLASH存儲器中一頁包含2048字節(jié),nRF24L01+的一幀數(shù)據(jù)包含32字節(jié),因此以64幀為一個完整讀寫單位。對于溫度、濕度、氣壓三種數(shù)據(jù)采集慢的狀態(tài)監(jiān)測節(jié)點,有效數(shù)據(jù)為60字節(jié),其余字節(jié)為無效數(shù)據(jù),以避免該類節(jié)點長時間無數(shù)據(jù)寫入。
定時器1中斷用于節(jié)點計時,計時周期為1ms。
定時器2中斷用于nRF24L01+_1/2收發(fā)及復位狀態(tài)、狀態(tài)監(jiān)測節(jié)點切換的計時。主節(jié)點收發(fā)狀態(tài)轉(zhuǎn)換時的中間態(tài)由定時器2進行計時。當節(jié)點由收狀態(tài)經(jīng)中間態(tài)到達發(fā)狀態(tài)時,由定時器2程序開始數(shù)據(jù)請求命令的傳輸。同樣,定時器2有復位計時功能,復位狀態(tài)與前述一致。當主節(jié)點向某狀態(tài)監(jiān)測節(jié)點索要數(shù)據(jù)時間過長時,主節(jié)點認為通信出現(xiàn)問題或狀態(tài)監(jiān)測節(jié)點本身出現(xiàn)問題,此時進行節(jié)點切換,以保證其他狀態(tài)監(jiān)測節(jié)點的數(shù)據(jù)傳輸不受影響。
數(shù)據(jù)讀取軟件用于向主節(jié)點發(fā)送開始數(shù)據(jù)采集命令、監(jiān)控網(wǎng)絡(luò)運行狀態(tài)和主節(jié)點存儲數(shù)據(jù)的讀取。數(shù)據(jù)讀取軟件由面向?qū)ο笳Z言C#開發(fā),開發(fā)環(huán)境為Visual Studio 2010,軟件界面如圖6所示。
圖6 數(shù)據(jù)讀取軟件界面
該軟件包含兩部分功能:當飛行器處于運輸或存儲狀態(tài)時,軟件可以監(jiān)控系統(tǒng)運行狀態(tài),此時圖形以每2k字節(jié)抽取固定數(shù)據(jù)顯示監(jiān)測結(jié)果;當飛行器處于飛行狀態(tài)后,軟件只能以后處理方式讀取FLASH中存儲的數(shù)據(jù),并以圖形方式顯示。圖6是存儲狀態(tài)下,各狀態(tài)監(jiān)測節(jié)點的數(shù)據(jù)情況。圖中,沖擊值在0到1之間漂移是由模擬量采集后進行數(shù)字化造成的,沖擊值只有飛行器受到大的沖擊(飛行或擊中目標)時才有意義;振動部分為1g的值表示垂直地球表面的重力加速度;氣壓、溫度、濕度值分別為0.1Mpa、26℃、49(46)%,其表示當前的存儲環(huán)境為常規(guī)狀態(tài)??梢?,所設(shè)計系統(tǒng)實現(xiàn)了飛行器狀態(tài)的有效監(jiān)測。
針對飛行器狀態(tài)監(jiān)測的實際需求,設(shè)計了包含數(shù)據(jù)讀取計算機、主節(jié)點、狀態(tài)監(jiān)測節(jié)點架構(gòu)的狀態(tài)監(jiān)測系統(tǒng),實現(xiàn)了飛行器的狀態(tài)監(jiān)測,為飛行器狀態(tài)監(jiān)測方式的發(fā)展提供了一種有效可行的解決方案。