文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.181570
中文引用格式: 劉琨,許哲,李飛飛. 基于A(yíng)RM微控制器的飛行數(shù)據(jù)記錄儀設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2018,44(11):57-60.
英文引用格式: Liu Kun,Xu Zhe,Li Feifei. Design of flight data recorder based on ARM microcontroller[J]. Application of Electronic Technique,2018,44(11):57-60.
0 引言
實(shí)時(shí)記錄飛行器的飛行數(shù)據(jù)對(duì)于監(jiān)測(cè)飛行器飛行狀態(tài)以及后續(xù)研究飛行器(如模型辨識(shí)等)都起著關(guān)鍵的作用。對(duì)于小型飛行器來(lái)說(shuō),設(shè)計(jì)開(kāi)發(fā)一種體積小、重量輕且操作方便的數(shù)據(jù)記錄儀顯得尤為重要。隨著微控制器技術(shù)的發(fā)展,其片上Flash空間也越來(lái)越大,一般都有幾十到上百KB的容量,能夠滿(mǎn)足多數(shù)數(shù)據(jù)量小的應(yīng)用,但對(duì)于某些應(yīng)用(例如數(shù)據(jù)采集和文件存儲(chǔ)等),片上Flash就不能提供足夠的存儲(chǔ)空間了??梢?jiàn)大容量數(shù)據(jù)的存儲(chǔ)是微控制器應(yīng)用系統(tǒng)的瓶頸[1]。因此需要外擴(kuò)存儲(chǔ)設(shè)備來(lái)解決存儲(chǔ)空間不足的問(wèn)題。以Flash為存儲(chǔ)體的SD卡因其具備體積小、功耗低、可擦寫(xiě)以及非易失性等特點(diǎn)而被廣泛應(yīng)用。本文將介紹一種采用ARM處理器結(jié)合SD卡的直升機(jī)飛行數(shù)據(jù)記錄儀設(shè)計(jì)方案。
1 飛行數(shù)據(jù)記錄儀總體設(shè)計(jì)
本方案所選取的ARM處理器為意法半導(dǎo)體公司的Cortex-M3內(nèi)核高性能微處理器STM32F103,其片內(nèi)擁有豐富的資源。數(shù)據(jù)記錄儀的數(shù)據(jù)接收端由STM32F103擴(kuò)展出常用的通信接口:USART、SPI、I2C、USB2.0,以適用于不同通信協(xié)議的設(shè)備;直升機(jī)的控制輸入數(shù)據(jù)即4個(gè)舵機(jī)PWM控制信號(hào)由STM32F103輸入捕獲單元捕獲并做信號(hào)解混控處理;數(shù)據(jù)存儲(chǔ)端采用STM32F103內(nèi)特有的SDIO接口與SD卡連接并結(jié)合FatFs文件系統(tǒng),實(shí)現(xiàn)與SD的通信與數(shù)據(jù)文件存儲(chǔ);同時(shí)增加按鍵與指示燈來(lái)實(shí)現(xiàn)對(duì)設(shè)備的操作和設(shè)備狀態(tài)指示功能。飛行數(shù)據(jù)記錄儀的總體設(shè)計(jì)圖如圖1所示。
2 記錄儀硬件設(shè)計(jì)
記錄儀所采用的核心處理器STM32F103是意法半導(dǎo)體公司生產(chǎn)的具有ARM Cortex-M3內(nèi)核的32位高性能微處理器,最高主頻72 MHz,具有512 KB容量片內(nèi)Flash、64 KB片內(nèi)SRAM、12通道DMA控制器,以及多達(dá)11個(gè)定時(shí)器,并擁有I2C、USART、SPI、CAN、USB2.0和SDIO通信接口[2],足以滿(mǎn)足數(shù)據(jù)記錄儀的設(shè)計(jì)要求。
2.1 串口通信電路
本無(wú)人直升機(jī)系統(tǒng)所使用的AHRS采用串口RS232協(xié)議,為了采集AHRS數(shù)據(jù)需要設(shè)計(jì)主控制器與AHRS的通信接口電路。本文采用RS232電平轉(zhuǎn)換芯片MAX232作為RS232電平與TTL電平轉(zhuǎn)換器,以實(shí)現(xiàn)AHRS與主控制器的數(shù)據(jù)通信。RS232串口通信電平轉(zhuǎn)換電路如圖2所示。
2.2 MicroSD卡電路
SD卡與主控制器內(nèi)SDIO接口連接,以實(shí)現(xiàn)主控制器與SD卡的通信以及對(duì)SD卡的操作,完成SD卡檢測(cè)和文件系統(tǒng)的建立以及數(shù)據(jù)存儲(chǔ)。本文采用MicroSD卡作為存儲(chǔ)介質(zhì),該型卡的數(shù)據(jù)信號(hào)線(xiàn)采用6線(xiàn)制,分別為數(shù)據(jù)線(xiàn)D0、D1、D2和D3,命令線(xiàn)CMD和時(shí)鐘線(xiàn)CK。數(shù)據(jù)線(xiàn)D0~D3分別與主控制器SDIO接口的4根數(shù)據(jù)SDIO-D0~SDIO-D3線(xiàn)互連,命令線(xiàn)與時(shí)鐘線(xiàn)分別與SDIO接口的SDIO-CMD和SDIO-CK連接。其中數(shù)據(jù)線(xiàn)和命令線(xiàn)需加上拉電阻。MicroSD卡采用3.3 V供電。MicroSD卡的SDIO模式電路圖如圖3所示。
2.3 舵機(jī)PWM信號(hào)捕獲電路
由于舵機(jī)的控制信號(hào)PWM信號(hào)具有周期固定、占空比可調(diào)的特點(diǎn),因此只需要捕獲PWM信號(hào)高電平所占的寬度即可。使用STM32F103內(nèi)部定時(shí)器的輸入捕獲功能就可完成此項(xiàng)任務(wù)。從接收機(jī)輸出的PWM信號(hào)一路輸入舵機(jī)同時(shí)分出相同一路輸入STM32F103的定時(shí)器TIM3的4個(gè)通道TIM3_CH1~ TIM3_CH4進(jìn)行信號(hào)捕獲處理。舵機(jī)PWM信號(hào)的捕獲電路示意圖如圖4所示。
3 記錄儀軟件設(shè)計(jì)
3.1 AHRS數(shù)據(jù)接收與解包
傳感器數(shù)據(jù)包由數(shù)據(jù)包頭、數(shù)據(jù)、數(shù)據(jù)包尾組成,且數(shù)據(jù)包連續(xù)發(fā)送至控制器串口緩沖區(qū),為了保證能夠接收到完整的數(shù)據(jù)包且需要保證數(shù)據(jù)是最新的,本文使用了環(huán)形緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)來(lái)對(duì)數(shù)據(jù)進(jìn)行接收。環(huán)形緩沖區(qū)示意圖如圖5所示。
數(shù)據(jù)包以包頭、數(shù)據(jù)、包尾的順序依次進(jìn)入緩沖區(qū),程序中定義包頭包尾檢測(cè)函數(shù),從當(dāng)前指針位置實(shí)時(shí)檢測(cè)尋找數(shù)據(jù)包尾,當(dāng)找到數(shù)據(jù)包尾時(shí),再逆序遍歷找到對(duì)應(yīng)的數(shù)據(jù)包頭,以此保證一包數(shù)據(jù)的實(shí)時(shí)性。環(huán)形緩沖區(qū)的長(zhǎng)度是一包數(shù)據(jù)長(zhǎng)度的2倍,兩個(gè)緩沖區(qū)交替讀/寫(xiě)數(shù)據(jù),因此能夠保證數(shù)據(jù)的完整性。
3.2 文件系統(tǒng)
由于采集的數(shù)據(jù)需要使用與PC兼容的FAT16文件系統(tǒng)組織文件才可以直接在PC上使用MATLAB或Excel軟件打開(kāi)并繪制曲線(xiàn),因此需要在微控制器中移植文件系統(tǒng)來(lái)完成此功能。本方案選取的FatFs文件系統(tǒng)是一個(gè)完全免費(fèi)開(kāi)源的文件系統(tǒng),專(zhuān)門(mén)為小型的嵌入式系統(tǒng)設(shè)計(jì)。它完全用標(biāo)準(zhǔn)C語(yǔ)言編寫(xiě),具有良好的硬件平臺(tái)獨(dú)立性,只需做簡(jiǎn)單的修改就可以方便移植到不同類(lèi)型的微處理器上[3];它支持FAT12、FAT16和FAT32,支持多個(gè)存儲(chǔ)媒介;具有多個(gè)緩沖區(qū),可以對(duì)多個(gè)文件進(jìn)行讀/寫(xiě)。FatFs文件系統(tǒng)層次結(jié)構(gòu)如圖6所示。
對(duì)于最頂層的應(yīng)用層,用戶(hù)無(wú)須理會(huì)FatFs的內(nèi)部結(jié)構(gòu)和復(fù)雜的FAT 協(xié)議,只需要調(diào)用FatFs模塊提供給用戶(hù)的一系列應(yīng)用接口函數(shù),如f_open、f_read、f_write和f_close等,就可以方便地讀/寫(xiě)文件。中間層的FatFs模塊實(shí)現(xiàn)了FAT 文件讀/寫(xiě)協(xié)議。FatFs模塊提供的是ff.c和ff.h兩個(gè)文件。除非有必要,用戶(hù)一般不用修改,使用時(shí)將頭文件直接包含進(jìn)去即可。需要編寫(xiě)移植代碼的是FatFs模塊提供的底層接口,它包括存儲(chǔ)媒介讀/寫(xiě)接口(disk I/O)和供給文件創(chuàng)建修改時(shí)間的實(shí)時(shí)時(shí)鐘[4]。本文采用的FatFs文件系統(tǒng)版本是R0.09a。FatFs在移植時(shí)一般只需要修改2個(gè)文件,即ffconf.h和diskio.c。FatFs的所有配置項(xiàng)都是存放在ffconf.h 中,可以通過(guò)配置其中一些選項(xiàng)來(lái)滿(mǎn)足自己的需求。
FatFs的移植主要分為3步:(1)根據(jù)編譯器的數(shù)據(jù)類(lèi)型在integer.h文件中定義好數(shù)據(jù)類(lèi)型;(2)ffconf.h文件配置FatFs的相關(guān)功能以滿(mǎn)足需求;(3)在diskio.c文件中進(jìn)行底層驅(qū)動(dòng)編寫(xiě),一般需要編寫(xiě)6個(gè)驅(qū)動(dòng)函數(shù):disk_initialize、disk_status、disk_read、disk_write、disk_ioctl和get_fattime。完成以上3個(gè)步驟后即可完成FatFs的移植,在使用FatFs之前必須先通過(guò)f_mount函數(shù)注冊(cè)一個(gè)工作區(qū)才能開(kāi)始后續(xù)應(yīng)用接口函數(shù)的使用。
3.3 直升機(jī)傾斜盤(pán)舵機(jī)信號(hào)解混控
由于控制直升機(jī)傾斜盤(pán)的3個(gè)舵機(jī)是以聯(lián)動(dòng)的方式使傾斜盤(pán)產(chǎn)生相應(yīng)動(dòng)作來(lái)控制直升機(jī)姿態(tài),而直升機(jī)的控制輸入變量為縱向周期變距變量Δδe、側(cè)向周期變距變量Δδa、總距變量Δδc以及尾槳變距變量Δδr[5],因此需要對(duì)控制傾斜盤(pán)動(dòng)作的3個(gè)舵機(jī)信號(hào)做解混控處理來(lái)分別解算出縱向周期變距變量Δδe、側(cè)向周期變距變量Δδa、總距變量Δδc。其中尾槳變距舵機(jī)單獨(dú)工作,因此不需要做信號(hào)解混控,只需單獨(dú)采集該舵機(jī)信號(hào)即可換算出尾槳變距變量Δδr。直升機(jī)傾斜盤(pán)結(jié)構(gòu)示意圖如圖7所示。
當(dāng)傾斜盤(pán)做單純前后傾斜運(yùn)動(dòng)時(shí)(對(duì)應(yīng)直升機(jī)滾轉(zhuǎn)運(yùn)動(dòng)),舵機(jī)A與舵機(jī)B同時(shí)動(dòng)作且幅度相同,舵機(jī)C則相對(duì)舵機(jī)A、B差動(dòng);當(dāng)傾斜盤(pán)做單純左右傾斜運(yùn)動(dòng)時(shí)(對(duì)應(yīng)直升機(jī)俯仰運(yùn)動(dòng)),舵機(jī)A與舵機(jī)B差動(dòng)且幅度相同,而此時(shí)舵機(jī)C則不動(dòng);當(dāng)傾斜盤(pán)做單純平行上下運(yùn)動(dòng)時(shí)(對(duì)應(yīng)直升機(jī)總距變化),3個(gè)舵機(jī)同時(shí)動(dòng)作且幅度相同。
由圖7所示的傾斜盤(pán)結(jié)構(gòu)示意圖可簡(jiǎn)化出如圖8所示的傾斜盤(pán)舵機(jī)間幾何關(guān)系圖。
由于A(yíng)、B、C構(gòu)成等邊三角形3個(gè)頂點(diǎn),因此由圖8所示幾何關(guān)系可知舵機(jī)A與舵機(jī)B的連線(xiàn)中點(diǎn)D對(duì)旋翼軸心O的力臂L1是舵機(jī)C對(duì)旋翼軸心O力臂的1/2,當(dāng)傾斜盤(pán)做單純前后傾斜運(yùn)動(dòng)時(shí)(對(duì)應(yīng)直升機(jī)滾轉(zhuǎn)運(yùn)動(dòng)),舵機(jī)C的動(dòng)作幅度應(yīng)是舵機(jī)A、B動(dòng)作幅度的2倍,對(duì)應(yīng)采集到的舵機(jī)C的PWM信號(hào)占空比變化量也是舵機(jī)A、B的PWM信號(hào)占空比變化量的2倍。由以上分析可得出直升機(jī)傾斜盤(pán)舵機(jī)控制信號(hào)值與縱向周期變距變量Δδe、側(cè)向周期變距變量Δδa以及總距變量Δδc的關(guān)系式如式(1)所示:
式中,α、β、γ分別代表實(shí)時(shí)采集到的舵機(jī)A、B、C的PWM信號(hào)高電平寬度值,α0、β0、γ0分別代表總距為0°時(shí)舵機(jī)A、B、C的PWM信號(hào)高電平寬度值。
由式(1)可反解出對(duì)應(yīng)的縱向周期變距變量Δδe、側(cè)向周期變距變量Δδa、總距變量Δδc如式(2)所示:
由式(2)可知,由總距為0°時(shí)舵機(jī)A、B、C的PWM信號(hào)高電平寬度值和實(shí)時(shí)采集到舵機(jī)A、B、C的PWM信號(hào)高電平寬度值即可實(shí)時(shí)解算出對(duì)應(yīng)的縱向周期變距變量Δδe、側(cè)向周期變距變量Δδa和總距變量Δδc。
3.4 程序流程圖
數(shù)據(jù)記錄儀的軟件部分如上所述,包含AHRS數(shù)據(jù)接收與解包、文件系統(tǒng)建立與文件存儲(chǔ)、舵機(jī)PWM信號(hào)捕獲與信號(hào)解混控以及人機(jī)交互程序。整個(gè)軟件部分的程序流程圖如圖9所示。
4 飛行數(shù)據(jù)記錄儀的應(yīng)用
按照正常操作流程,將數(shù)據(jù)記錄儀搭載到無(wú)人直升機(jī)上進(jìn)行數(shù)據(jù)采集,各項(xiàng)飛行參數(shù)被正常記錄到在板載MicroSD卡內(nèi)創(chuàng)建的Flight Data.txt文件中,可以通過(guò)MATLAB、Excel等軟件對(duì)文件中的數(shù)據(jù)繪制成曲線(xiàn)供后續(xù)數(shù)據(jù)分析,也可對(duì)數(shù)據(jù)做預(yù)處理后作為無(wú)人直升機(jī)模型辨識(shí)的控制輸入數(shù)據(jù)。根據(jù)記錄的數(shù)據(jù)利用MATLAB繪制的直升機(jī)三軸姿態(tài)角、三軸角速率分別如圖10、圖11所示。
5 結(jié)束語(yǔ)
本飛行數(shù)據(jù)記錄儀能夠很好地完成飛行數(shù)據(jù)記錄功能,可將數(shù)據(jù)實(shí)時(shí)寫(xiě)入創(chuàng)建的Flight Data.txt中,并能夠方便地在PC上使用MATLAB、Excel等軟件讀入數(shù)據(jù)并繪制曲線(xiàn)。同時(shí),預(yù)留的不同通信協(xié)議接口可以方便地與使用不同通信協(xié)議的傳感器等設(shè)備互連,且軟件修改方便,只需修改前端數(shù)據(jù)接收部分程序即可快速投入使用,通用性強(qiáng),可移植性好,能夠滿(mǎn)足實(shí)際使用的要求。
參考文獻(xiàn)
[1] 張濤,左謹(jǐn)平,馬華玲.FatFs在32位微控制器STM32上的移植[J].電子技術(shù),2010(3):25.
[2] Stmicroelectronics.STM32F103xCDE datasheet[Z].2009.
[3] 洪岳煒,王百鳴,謝超英.一種易于移植和使用的文件系統(tǒng)FatFs Moduel[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2008(5):29.
[4] 李世奇,董浩斌,李榮生.基于FatFs文件系統(tǒng)的SD卡存儲(chǔ)器設(shè)計(jì)[J].測(cè)控技術(shù),2011,30 (12):79-80.
[5] 楊一棟.直升機(jī)飛行控制[M].北京:國(guó)防工業(yè)出版社,2007.
作者信息:
劉 琨,許 哲,李飛飛
(中國(guó)航天科技集團(tuán)有限公司第四研究院第四十一研究所,陜西 西安710025)