文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.181570
中文引用格式: 劉琨,,許哲,李飛飛. 基于ARM微控制器的飛行數(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)測飛行器飛行狀態(tài)以及后續(xù)研究飛行器(如模型辨識(shí)等)都起著關(guān)鍵的作用。對(duì)于小型飛行器來說,,設(shè)計(jì)開發(fā)一種體積小,、重量輕且操作方便的數(shù)據(jù)記錄儀顯得尤為重要。隨著微控制器技術(shù)的發(fā)展,,其片上Flash空間也越來越大,,一般都有幾十到上百KB的容量,能夠滿足多數(shù)數(shù)據(jù)量小的應(yīng)用,,但對(duì)于某些應(yīng)用(例如數(shù)據(jù)采集和文件存儲(chǔ)等),,片上Flash就不能提供足夠的存儲(chǔ)空間了??梢姶笕萘繑?shù)據(jù)的存儲(chǔ)是微控制器應(yīng)用系統(tǒng)的瓶頸[1],。因此需要外擴(kuò)存儲(chǔ)設(shè)備來解決存儲(chǔ)空間不足的問題。以Flash為存儲(chǔ)體的SD卡因其具備體積小,、功耗低,、可擦寫以及非易失性等特點(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í)增加按鍵與指示燈來實(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],,足以滿足數(shù)據(jù)記錄儀的設(shè)計(jì)要求。
2.1 串口通信電路
本無人直升機(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卡檢測和文件系統(tǒng)的建立以及數(shù)據(jù)存儲(chǔ)。本文采用MicroSD卡作為存儲(chǔ)介質(zhì),,該型卡的數(shù)據(jù)信號(hào)線采用6線制,,分別為數(shù)據(jù)線D0、D1,、D2和D3,,命令線CMD和時(shí)鐘線CK。數(shù)據(jù)線D0~D3分別與主控制器SDIO接口的4根數(shù)據(jù)SDIO-D0~SDIO-D3線互連,,命令線與時(shí)鐘線分別與SDIO接口的SDIO-CMD和SDIO-CK連接,。其中數(shù)據(jù)線和命令線需加上拉電阻。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)來對(duì)數(shù)據(jù)進(jìn)行接收,。環(huán)形緩沖區(qū)示意圖如圖5所示。
數(shù)據(jù)包以包頭,、數(shù)據(jù),、包尾的順序依次進(jìn)入緩沖區(qū),程序中定義包頭包尾檢測函數(shù),,從當(dāng)前指針位置實(shí)時(shí)檢測尋找數(shù)據(jù)包尾,,當(dāng)找到數(shù)據(jù)包尾時(shí),,再逆序遍歷找到對(duì)應(yīng)的數(shù)據(jù)包頭,以此保證一包數(shù)據(jù)的實(shí)時(shí)性,。環(huán)形緩沖區(qū)的長度是一包數(shù)據(jù)長度的2倍,,兩個(gè)緩沖區(qū)交替讀/寫數(shù)據(jù),因此能夠保證數(shù)據(jù)的完整性,。
3.2 文件系統(tǒng)
由于采集的數(shù)據(jù)需要使用與PC兼容的FAT16文件系統(tǒng)組織文件才可以直接在PC上使用MATLAB或Excel軟件打開并繪制曲線,,因此需要在微控制器中移植文件系統(tǒng)來完成此功能。本方案選取的FatFs文件系統(tǒng)是一個(gè)完全免費(fèi)開源的文件系統(tǒng),,專門為小型的嵌入式系統(tǒng)設(shè)計(jì),。它完全用標(biāo)準(zhǔn)C語言編寫,具有良好的硬件平臺(tái)獨(dú)立性,,只需做簡單的修改就可以方便移植到不同類型的微處理器上[3],;它支持FAT12、FAT16和FAT32,,支持多個(gè)存儲(chǔ)媒介,;具有多個(gè)緩沖區(qū),可以對(duì)多個(gè)文件進(jìn)行讀/寫,。FatFs文件系統(tǒng)層次結(jié)構(gòu)如圖6所示,。
對(duì)于最頂層的應(yīng)用層,用戶無須理會(huì)FatFs的內(nèi)部結(jié)構(gòu)和復(fù)雜的FAT 協(xié)議,,只需要調(diào)用FatFs模塊提供給用戶的一系列應(yīng)用接口函數(shù),,如f_open、f_read,、f_write和f_close等,,就可以方便地讀/寫文件。中間層的FatFs模塊實(shí)現(xiàn)了FAT 文件讀/寫協(xié)議,。FatFs模塊提供的是ff.c和ff.h兩個(gè)文件,。除非有必要,用戶一般不用修改,,使用時(shí)將頭文件直接包含進(jìn)去即可,。需要編寫移植代碼的是FatFs模塊提供的底層接口,它包括存儲(chǔ)媒介讀/寫接口(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 中,,可以通過配置其中一些選項(xiàng)來滿足自己的需求。
FatFs的移植主要分為3步:(1)根據(jù)編譯器的數(shù)據(jù)類型在integer.h文件中定義好數(shù)據(jù)類型,;(2)ffconf.h文件配置FatFs的相關(guān)功能以滿足需求,;(3)在diskio.c文件中進(jìn)行底層驅(qū)動(dòng)編寫,,一般需要編寫6個(gè)驅(qū)動(dòng)函數(shù):disk_initialize、disk_status,、disk_read,、disk_write、disk_ioctl和get_fattime,。完成以上3個(gè)步驟后即可完成FatFs的移植,,在使用FatFs之前必須先通過f_mount函數(shù)注冊一個(gè)工作區(qū)才能開始后續(xù)應(yīng)用接口函數(shù)的使用。
3.3 直升機(jī)傾斜盤舵機(jī)信號(hào)解混控
由于控制直升機(jī)傾斜盤的3個(gè)舵機(jī)是以聯(lián)動(dòng)的方式使傾斜盤產(chǎn)生相應(yīng)動(dòng)作來控制直升機(jī)姿態(tài),,而直升機(jī)的控制輸入變量為縱向周期變距變量Δδe、側(cè)向周期變距變量Δδa,、總距變量Δδc以及尾槳變距變量Δδr[5],,因此需要對(duì)控制傾斜盤動(dòng)作的3個(gè)舵機(jī)信號(hào)做解混控處理來分別解算出縱向周期變距變量Δδe、側(cè)向周期變距變量Δδa,、總距變量Δδc,。其中尾槳變距舵機(jī)單獨(dú)工作,因此不需要做信號(hào)解混控,,只需單獨(dú)采集該舵機(jī)信號(hào)即可換算出尾槳變距變量Δδr,。直升機(jī)傾斜盤結(jié)構(gòu)示意圖如圖7所示。
當(dāng)傾斜盤做單純前后傾斜運(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)傾斜盤做單純左右傾斜運(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)傾斜盤做單純平行上下運(yùn)動(dòng)時(shí)(對(duì)應(yīng)直升機(jī)總距變化),,3個(gè)舵機(jī)同時(shí)動(dòng)作且幅度相同。
由圖7所示的傾斜盤結(jié)構(gòu)示意圖可簡化出如圖8所示的傾斜盤舵機(jī)間幾何關(guān)系圖,。
由于A,、B、C構(gòu)成等邊三角形3個(gè)頂點(diǎn),,因此由圖8所示幾何關(guān)系可知舵機(jī)A與舵機(jī)B的連線中點(diǎn)D對(duì)旋翼軸心O的力臂L1是舵機(jī)C對(duì)旋翼軸心O力臂的1/2,,當(dāng)傾斜盤做單純前后傾斜運(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ī)傾斜盤舵機(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ù)記錄儀搭載到無人直升機(jī)上進(jìn)行數(shù)據(jù)采集,,各項(xiàng)飛行參數(shù)被正常記錄到在板載MicroSD卡內(nèi)創(chuàng)建的Flight Data.txt文件中,,可以通過MATLAB、Excel等軟件對(duì)文件中的數(shù)據(jù)繪制成曲線供后續(xù)數(shù)據(jù)分析,,也可對(duì)數(shù)據(jù)做預(yù)處理后作為無人直升機(jī)模型辨識(shí)的控制輸入數(shù)據(jù),。根據(jù)記錄的數(shù)據(jù)利用MATLAB繪制的直升機(jī)三軸姿態(tài)角、三軸角速率分別如圖10,、圖11所示,。
5 結(jié)束語
本飛行數(shù)據(jù)記錄儀能夠很好地完成飛行數(shù)據(jù)記錄功能,可將數(shù)據(jù)實(shí)時(shí)寫入創(chuàng)建的Flight Data.txt中,,并能夠方便地在PC上使用MATLAB,、Excel等軟件讀入數(shù)據(jù)并繪制曲線。同時(shí),預(yù)留的不同通信協(xié)議接口可以方便地與使用不同通信協(xié)議的傳感器等設(shè)備互連,,且軟件修改方便,,只需修改前端數(shù)據(jù)接收部分程序即可快速投入使用,通用性強(qiáng),,可移植性好,,能夠滿足實(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].測控技術(shù),2011,,30 (12):79-80.
[5] 楊一棟.直升機(jī)飛行控制[M].北京:國防工業(yè)出版社,2007.
作者信息:
劉 琨,,許 哲,,李飛飛
(中國航天科技集團(tuán)有限公司第四研究院第四十一研究所,陜西 西安710025)