文献标识码: A
DOI:10.16157/j.issn.0258-7998.181570
中文引用格式: 刘琨,许哲,李飞飞. 基于ARM微控制器的飞行数据记录仪设计[J].电子技术应用,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 引言
实时记录飞行器的飞行数据对于监测飞行器飞行状态以及后续研究飞行器(如模型辨识等)都起着关键的作用。对于小型飞行器来说,设计开发一种体积小、重量轻且操作方便的数据记录仪显得尤为重要。随着微控制器技术的发展,其片上Flash空间也越来越大,一般都有几十到上百KB的容量,能够满足多数数据量小的应用,但对于某些应用(例如数据采集和文件存储等),片上Flash就不能提供足够的存储空间了。可见大容量数据的存储是微控制器应用系统的瓶颈[1]。因此需要外扩存储设备来解决存储空间不足的问题。以Flash为存储体的SD卡因其具备体积小、功耗低、可擦写以及非易失性等特点而被广泛应用。本文将介绍一种采用ARM处理器结合SD卡的直升机飞行数据记录仪设计方案。
1 飞行数据记录仪总体设计
本方案所选取的ARM处理器为意法半导体公司的Cortex-M3内核高性能微处理器STM32F103,其片内拥有丰富的资源。数据记录仪的数据接收端由STM32F103扩展出常用的通信接口:USART、SPI、I2C、USB2.0,以适用于不同通信协议的设备;直升机的控制输入数据即4个舵机PWM控制信号由STM32F103输入捕获单元捕获并做信号解混控处理;数据存储端采用STM32F103内特有的SDIO接口与SD卡连接并结合FatFs文件系统,实现与SD的通信与数据文件存储;同时增加按键与指示灯来实现对设备的操作和设备状态指示功能。飞行数据记录仪的总体设计图如图1所示。
2 记录仪硬件设计
记录仪所采用的核心处理器STM32F103是意法半导体公司生产的具有ARM Cortex-M3内核的32位高性能微处理器,最高主频72 MHz,具有512 KB容量片内Flash、64 KB片内SRAM、12通道DMA控制器,以及多达11个定时器,并拥有I2C、USART、SPI、CAN、USB2.0和SDIO通信接口[2],足以满足数据记录仪的设计要求。
2.1 串口通信电路
本无人直升机系统所使用的AHRS采用串口RS232协议,为了采集AHRS数据需要设计主控制器与AHRS的通信接口电路。本文采用RS232电平转换芯片MAX232作为RS232电平与TTL电平转换器,以实现AHRS与主控制器的数据通信。RS232串口通信电平转换电路如图2所示。
2.2 MicroSD卡电路
SD卡与主控制器内SDIO接口连接,以实现主控制器与SD卡的通信以及对SD卡的操作,完成SD卡检测和文件系统的建立以及数据存储。本文采用MicroSD卡作为存储介质,该型卡的数据信号线采用6线制,分别为数据线D0、D1、D2和D3,命令线CMD和时钟线CK。数据线D0~D3分别与主控制器SDIO接口的4根数据SDIO-D0~SDIO-D3线互连,命令线与时钟线分别与SDIO接口的SDIO-CMD和SDIO-CK连接。其中数据线和命令线需加上拉电阻。MicroSD卡采用3.3 V供电。MicroSD卡的SDIO模式电路图如图3所示。
2.3 舵机PWM信号捕获电路
由于舵机的控制信号PWM信号具有周期固定、占空比可调的特点,因此只需要捕获PWM信号高电平所占的宽度即可。使用STM32F103内部定时器的输入捕获功能就可完成此项任务。从接收机输出的PWM信号一路输入舵机同时分出相同一路输入STM32F103的定时器TIM3的4个通道TIM3_CH1~ TIM3_CH4进行信号捕获处理。舵机PWM信号的捕获电路示意图如图4所示。
3 记录仪软件设计
3.1 AHRS数据接收与解包
传感器数据包由数据包头、数据、数据包尾组成,且数据包连续发送至控制器串口缓冲区,为了保证能够接收到完整的数据包且需要保证数据是最新的,本文使用了环形缓冲区数据结构来对数据进行接收。环形缓冲区示意图如图5所示。
数据包以包头、数据、包尾的顺序依次进入缓冲区,程序中定义包头包尾检测函数,从当前指针位置实时检测寻找数据包尾,当找到数据包尾时,再逆序遍历找到对应的数据包头,以此保证一包数据的实时性。环形缓冲区的长度是一包数据长度的2倍,两个缓冲区交替读/写数据,因此能够保证数据的完整性。
3.2 文件系统
由于采集的数据需要使用与PC兼容的FAT16文件系统组织文件才可以直接在PC上使用MATLAB或Excel软件打开并绘制曲线,因此需要在微控制器中移植文件系统来完成此功能。本方案选取的FatFs文件系统是一个完全免费开源的文件系统,专门为小型的嵌入式系统设计。它完全用标准C语言编写,具有良好的硬件平台独立性,只需做简单的修改就可以方便移植到不同类型的微处理器上[3];它支持FAT12、FAT16和FAT32,支持多个存储媒介;具有多个缓冲区,可以对多个文件进行读/写。FatFs文件系统层次结构如图6所示。
对于最顶层的应用层,用户无须理会FatFs的内部结构和复杂的FAT 协议,只需要调用FatFs模块提供给用户的一系列应用接口函数,如f_open、f_read、f_write和f_close等,就可以方便地读/写文件。中间层的FatFs模块实现了FAT 文件读/写协议。FatFs模块提供的是ff.c和ff.h两个文件。除非有必要,用户一般不用修改,使用时将头文件直接包含进去即可。需要编写移植代码的是FatFs模块提供的底层接口,它包括存储媒介读/写接口(disk I/O)和供给文件创建修改时间的实时时钟[4]。本文采用的FatFs文件系统版本是R0.09a。FatFs在移植时一般只需要修改2个文件,即ffconf.h和diskio.c。FatFs的所有配置项都是存放在ffconf.h 中,可以通过配置其中一些选项来满足自己的需求。
FatFs的移植主要分为3步:(1)根据编译器的数据类型在integer.h文件中定义好数据类型;(2)ffconf.h文件配置FatFs的相关功能以满足需求;(3)在diskio.c文件中进行底层驱动编写,一般需要编写6个驱动函数:disk_initialize、disk_status、disk_read、disk_write、disk_ioctl和get_fattime。完成以上3个步骤后即可完成FatFs的移植,在使用FatFs之前必须先通过f_mount函数注册一个工作区才能开始后续应用接口函数的使用。
3.3 直升机倾斜盘舵机信号解混控
由于控制直升机倾斜盘的3个舵机是以联动的方式使倾斜盘产生相应动作来控制直升机姿态,而直升机的控制输入变量为纵向周期变距变量Δδe、侧向周期变距变量Δδa、总距变量Δδc以及尾桨变距变量Δδr[5],因此需要对控制倾斜盘动作的3个舵机信号做解混控处理来分别解算出纵向周期变距变量Δδe、侧向周期变距变量Δδa、总距变量Δδc。其中尾桨变距舵机单独工作,因此不需要做信号解混控,只需单独采集该舵机信号即可换算出尾桨变距变量Δδr。直升机倾斜盘结构示意图如图7所示。
当倾斜盘做单纯前后倾斜运动时(对应直升机滚转运动),舵机A与舵机B同时动作且幅度相同,舵机C则相对舵机A、B差动;当倾斜盘做单纯左右倾斜运动时(对应直升机俯仰运动),舵机A与舵机B差动且幅度相同,而此时舵机C则不动;当倾斜盘做单纯平行上下运动时(对应直升机总距变化),3个舵机同时动作且幅度相同。
由图7所示的倾斜盘结构示意图可简化出如图8所示的倾斜盘舵机间几何关系图。
由于A、B、C构成等边三角形3个顶点,因此由图8所示几何关系可知舵机A与舵机B的连线中点D对旋翼轴心O的力臂L1是舵机C对旋翼轴心O力臂的1/2,当倾斜盘做单纯前后倾斜运动时(对应直升机滚转运动),舵机C的动作幅度应是舵机A、B动作幅度的2倍,对应采集到的舵机C的PWM信号占空比变化量也是舵机A、B的PWM信号占空比变化量的2倍。由以上分析可得出直升机倾斜盘舵机控制信号值与纵向周期变距变量Δδe、侧向周期变距变量Δδa以及总距变量Δδc的关系式如式(1)所示:
式中,α、β、γ分别代表实时采集到的舵机A、B、C的PWM信号高电平宽度值,α0、β0、γ0分别代表总距为0°时舵机A、B、C的PWM信号高电平宽度值。
由式(1)可反解出对应的纵向周期变距变量Δδe、侧向周期变距变量Δδa、总距变量Δδc如式(2)所示:
由式(2)可知,由总距为0°时舵机A、B、C的PWM信号高电平宽度值和实时采集到舵机A、B、C的PWM信号高电平宽度值即可实时解算出对应的纵向周期变距变量Δδe、侧向周期变距变量Δδa和总距变量Δδc。
3.4 程序流程图
数据记录仪的软件部分如上所述,包含AHRS数据接收与解包、文件系统建立与文件存储、舵机PWM信号捕获与信号解混控以及人机交互程序。整个软件部分的程序流程图如图9所示。
4 飞行数据记录仪的应用
按照正常操作流程,将数据记录仪搭载到无人直升机上进行数据采集,各项飞行参数被正常记录到在板载MicroSD卡内创建的Flight Data.txt文件中,可以通过MATLAB、Excel等软件对文件中的数据绘制成曲线供后续数据分析,也可对数据做预处理后作为无人直升机模型辨识的控制输入数据。根据记录的数据利用MATLAB绘制的直升机三轴姿态角、三轴角速率分别如图10、图11所示。
5 结束语
本飞行数据记录仪能够很好地完成飞行数据记录功能,可将数据实时写入创建的Flight Data.txt中,并能够方便地在PC上使用MATLAB、Excel等软件读入数据并绘制曲线。同时,预留的不同通信协议接口可以方便地与使用不同通信协议的传感器等设备互连,且软件修改方便,只需修改前端数据接收部分程序即可快速投入使用,通用性强,可移植性好,能够满足实际使用的要求。
参考文献
[1] 张涛,左谨平,马华玲.FatFs在32位微控制器STM32上的移植[J].电子技术,2010(3):25.
[2] Stmicroelectronics.STM32F103xCDE datasheet[Z].2009.
[3] 洪岳炜,王百鸣,谢超英.一种易于移植和使用的文件系统FatFs Moduel[J].单片机与嵌入式系统应用,2008(5):29.
[4] 李世奇,董浩斌,李荣生.基于FatFs文件系统的SD卡存储器设计[J].测控技术,2011,30 (12):79-80.
[5] 杨一栋.直升机飞行控制[M].北京:国防工业出版社,2007.
作者信息:
刘 琨,许 哲,李飞飞
(中国航天科技集团有限公司第四研究院第四十一研究所,陕西 西安710025)