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