基于STM32的简易四轴飞行器系统的设计实现

控制/MCU

1878人已加入

描述

引言

四轴飞行器是一种结构紧凑、飞行方式独特的垂直起降式飞行器,与普通的飞行器相比具有结构简单,故障率低和单位体积能够产生更大升力等优点,在军事和民用多个领域都有广阔的应用前景,非常适合在狭小空间内执行任务。因此四旋翼飞行器具有广阔的应用前景,吸引了众多科研人员,成为国内外新的研究热点。

本设计主要通过利用惯性测量单元(IMU)姿态获取技术、PID电机控制算法、2.4G无线遥控通信技术和高速空心杯直流电机驱动技术来实现简易的四轴方案。整个系统的设计包括飞控部分和遥控部分,飞控部分采用机架和控制核心部分一体设计增加系统稳定性,遥控部分采用模拟摇杆操作输入使操作体验极佳,两部分之间的通信采用2.4G无线模块保证数据稳定传输。飞行控制板采用高速单片机STM32作为处理器,采用含有三轴陀螺仪、三轴加速度计的运动传感器MPU6050作为惯性测量单元,通过2.4G 无线模块和遥控板进行通信,最终根据PID控制算法通过PWM方式驱动空心杯电机来达到遥控目标。

1、系统总体设计

系统硬件的设计主要分要遥控板和飞控板两个部分,遥控板采用常见羊角把游戏手柄的外形设计,控制输入采用四向摇杆,无线数据传输采用2.4G无线模块。飞控板采用控制处理核心和机架一体的设计即处理器和电机都集成在同一个电路板上,采用常规尺寸能够采用普通玩具的配件。系统软件的设计同样包括遥控板和飞控板两部分的工作,遥控板软件的设计主要包括ADC的采集和数据的无线发送。飞控板的软件的设计主要包括无线数据的接收,自身姿态的实时结算,电机PID增量的计算和电机的驱动。整个四轴飞行器系统包括人员操作遥控端和飞行器控制端,遥控端主控制器STM32通过ADC外设对摇杆数据进行采集,把采集到的数据通过2.4G无线通信模块发送至飞控端。飞控板的主要工作就是通过无线模块进行控制信号的接收,并且利用惯性测量单元获得实时系统加速度和角速度原始数据,并且最终解算出当前的系统姿态,然后根据遥控板发送的目标姿态和当姿态差计算出PID电机增量,然后通过PWM驱动电机进行系统调整来实现飞行器的稳定飞行。系统的总体设计框图如图1所示。

 

STM32

 

图1 系统总体设计框图

2、四轴飞行器的硬件设计

2.1主控单元选择

从成本和性能综合考虑,飞控板和遥控板的主控单元都采用意法半导体公司的增强型高速单片机STM32F103作为主控的,STM32F103是基于的ARM 32位的Cortex-M3内核架构,稳定工作频率可达72MHz,是一个具有丰富资源、高速时钟的精简指令的微处理器。STM32F103拥有从64K或128K字节的闪存程序可选存储器,高达20K字节的SRAM,2个12位模数转换器多达16个输入通道,7通道DMA控制器,多达80个快速I/O端口,串行单线调试(SWD)和JTAG接口调试模式,多达7个定时器,多达2个I2C接口(支持SMBus/PMBus),多达3个USART接口(支持ISO7816接口,LIN,IrDA接口和调制解调控制),多达2个SPI接口(18M位/秒),CAN接口(2.0B主动),USB2.0全速接口。主控单元原理图如图2所示。

 

STM32

 

图2 主控单元原理图

2.2 飞控板电路设计

飞控板的核心设计是MPU6050测量传感器、NRF2401无线模块以及飞控板电机驱动等模块的设计。飞控系统的惯性测量单元采用MPU6050作为测量传感器,MPU6050的驱动方式采用IIC接口,时钟引脚SCL连接到STM32的PB10,数据引脚连接到STM32的PB11引脚,数据中断引脚连接到PB5,为了增强驱动能力在每个引脚上都加入了10K的上拉电阻,原理图的设计如图3所示。

 

STM32

 

图3 飞控板惯性测量单元原理图

相对于其他模块电系统也是比较重要的部分,飞控系统采用3.7V高放电倍率锂电池进行供电。主控芯片供电部分和IMU传感器部分采用各自独立的LDO进行供电,这样确保了系统的稳定性和IMU传感器数据采集的准确性,稳压直流电源模块的原理图设计如图4所示。

 

STM32

 

图4 飞控板电源稳压原理图

飞控板与遥控板数据的通信同样采用的是基于2.4G频段的NRF2401模块,确保了数据的稳定传输。STM32的SPI1外设对2.4G模块进行操作驱动,引脚的连接如下表1所示。

 

STM32

 

NRF2.4G为采用3.3V供电无线模块,系统采用与单片机相同的电源网络对其供电,同时加入0.1UF电容进行滤波确保模块正常工作,无线模块的具体原理图连接如图5所示。

 

STM32

 

图5 飞控板无线模块原理图

飞控板的驱动系统采用的是四个分布对称十字交叉的高速空心杯电机,电机的驱动开关部分采用N沟道增强型场效应晶体管进行控制,通过修改STM32对应引脚上的PWM信号来进行开关MOS管实现电机运行开与关,从而实现电机运转速度的调节。电机1、2、3、4分别采用STM32的定时器2的通道0、通道1、通道2和通道3的PWM进行控制。电机1的控制端连接PA0,电机2的控制端采用PA1,电机2的控制端采用PA2,电机3的控制端采用PA3控制,电机的驱动原理图如图6所示。

 

STM32

 

图6 飞控板电机驱动原理图

2.3遥控板电路设计

遥控板主控单元通过SPI总线驱动2.4G无线模块,通过8位并口驱动1602液晶显示,通过ADC输入引脚对摇杆和电池电量进行采集,通过引脚驱动三极管开关驱动蜂鸣器提示。遥控板的核心设计是摇杆模拟数据进行采集模块、NRF2401无线模块等设计。

采用STM32单片机ADC1的通道4、通道5、通道6和通道7进行摇杆模拟数据进行采集并转换为数字量,分别连接到PA4、PA5、PA6和PA7引脚,并且加入滤波电容减少杂质信号的影响。遥控板摇杆输入原理图设计如图7所示。

 

STM32

 

图7 遥控板摇杆输入原理图设计

遥控板采用NRF2.4G模块的驱动采用STM32的自带外设SPI2进行驱动,各个功能引脚的连接如表2所示。

 

STM32

 

NRF2.4G模块采用3.3V供电,在供电端口外加0.1UF滤波存储电容确保无线系统的稳定性,的具体原理图连接8所示。

 

STM32

 

图8 遥控板无线模块原理图

3、四轴飞行器的软件设计

四轴飞行器的软件设计主要包括飞控板软件的设计和遥控板软件的设计。整体软件在MDK环境下采用C语言编写,采用ST-LINK仿真器对程序进行调试与下载。

3.1飞控板系统软件设计

飞控程序的主要设计思想是开机对无线模块的初始化、MPU6050的初始化、PWM电机初始化。随后对整个系统IMU继续零偏处理,随后等待进入解锁信息的传入。飞控采用定时器中断的方式,在中断中进行对时间的处理,每次中断计次标志就会自增,根据不同的中断积累即不同时间的间隔分别处理优先级不同的任务。飞控系统程序设计流程图如图9所示。

 

STM32

 

图9 飞控系统程序设计流程图

飞控系统每0.5毫秒中断一次,每次中断就会检查一次无线模块数据的接收,确保飞控系统的控制信息的实时性。每两次中断即1毫秒读取一次IMU单元的数据,通过滤波算法获得较为准确的系统加速度、角速度的原始数据。每四次中断即2毫秒通过IMU的原始数据计算下当前飞控板系统的姿态,然后结合遥控端的目标姿态,根据两者的差值通过PID控制算法进行对各个电机的调速控制。每200次中断即100毫秒,飞控系统会采集一次电池电压,然后把电池电压发送给遥控板,用来高速操作人员当前电压的大小。

MPU6050作为系统的惯性测量单元,是整个系统正常运行基础。MPU6050的驱动总线为IIC方式,为了程序的方便性本系统选用PB10和PB11模拟IIC来驱动。IMU读取出来的数据只是最简单的加速度、陀螺仪角速度的原始数据,需要通过进一步的处理才能得到本系统想要的姿态角度。飞控板姿态结算流程图如图10所示。

根据处理过后的MPU数据来获得当前的姿态,具体的姿态获取理论上是根据各个角度的积分得到当前的系统姿态欧拉角。本系统的设计实现是采用四元数算法对MPU6050最滤波后的数据进行计算得到最终的欧拉角。

整个飞控系统的运行动作是通过调整飞控姿态来实现的,本系统设计在当前姿态的基础上,根据接收到的遥控器的目标姿态对空心杯电机进行基于PID算法的PWM控制调速,从而实现飞控系统的各种基本运动。飞控板会对系统惯性测量单元传感器的原始数据进行滤波,然后对滤波后的数据进行实时结算,最后根据遥控板发送来的目标信息进行计算出电机的控制增量,最后根据PID控制算法对电机进行控制输出,飞控姿态控制流程图如图11所示。

 

STM32

 

图10 飞控板姿态结算流程图

 

STM32

 

图11  飞控板姿态控制流程图

3.2遥控板系统软件设计

遥控板的作用就是把操作人员的操作动作转化成信号传给飞行控制板,同时将一些控制信息和飞控板传回来的信息进行实时的显示和处理。飞控板摇杆数据的采集用到了STM32的ADC功能STM32F103xx增强型产品内嵌2个12位的模拟/数字转换器(ADC),每个ADC共用多达16个外部通道,可以实现单次或扫描转换。而且STM32的ADC可以采用DMA通道,这样可以进一步的节省硬件资源,加快系统实时性。采用SPI1驱动NRF无线模块,进行与飞控板的数据通信,遥控板系统软件流程如图12所示。

 

STM32

 

图12 遥控板软件流程图

本系统采用STM32的ADC1的通道4、通道5、通道6和通道7进行摇杆模拟数据进行采集,ADC和DMA的配置代码如下:

ADC_Configuration();                                    //ADC 功能配置

DMA_Configuration();                                    //DMA 功能配置

下面是ADC和DMA的启动和时能代码如下:

ADC_SoftwareStartConvCmd(ADC1, ENABLE);                  //启动 ADC1 转换

DMA_Cmd(DMA1_Channel1, ENABLE);                    //启动 DMA 通道

采用STM32外设SPI1驱动NRF2.4G模块,SPI初始化代码如下:

Spi1_Init();

采用无线模块的通道40进行通信,2401初始化函数如下:

Nrf24l01_Init(MODEL_RX2,40);                           //通道40

2.4G无线模块NRF2401的接收函数如下:

Nrf_Check_Event();                                          //读取NRF2401数据

通过2401将控制信号发送,发送函数如下:

NRF_TxPacket_AP(NRF24L01_TXDATA_RC,32);           //将控制信号发给四轴

4、结论

本文描述了一个简易四轴飞行器系统的设计实现,整个方案分为遥控控制板各飞行控制板两部分,通过2.4G无线模块进行控制通信,飞控系统采用IMU系统获取姿态信息根据反馈控制算法进行电机控制从而实现飞行控制。本系统飞控板采用一体设计使得系统简单、紧凑,遥控板采用摇杆输入使系统控制体验良好,最终实现飞行器的基本运动。实践证明该四轴飞行器飞行稳定、可靠,取得了较好效果。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
不忘初心_2012 2018-06-02
0 回复 举报
厉害1,牛逼,学习学习{:20:} 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分