访问电脑版页面

导航:老古开发网手机版STM32单片机STM32单片机应用

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

导读:
关键字:
MPU6050,飞行器,STM32,

引言

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

本设计主要通过利用惯性测量单元(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主控单元选择

 

基于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系统获取姿态信息根据反馈控制算法进行电机控制从而实现飞行控制。本系统飞控板采用一体设计使得系统简单、紧凑,遥控板采用摇杆输入使系统控制体验良好,最终实现飞行器的基本运动。实践证明该四轴飞行器飞行稳定、可靠,取得了较好效果。

来源:网络整理   作者:佚名  2017/11/29 17:56:00
栏目: [ STM32单片机应用]

相关阅读

STM32单片机实现无源蜂鸣器产生音乐声的设计

无人机陀螺仪主控芯片STM32应用详解

STM32单片机的TEA加密通信设计

基于STM32的LF RFID识别系统设计

基于STM32芯片的指纹识别系统设计与实现

STM32F103控制AD7606采集模拟信号

基于STM32单片机连接射频si4438模块的方案设计

STM32单片机以NEC协议实现红外遥控设计

STM32单片机对正交编码器的驱动

基于STM32的便携式二氧化碳监测仪设计

STM32音乐播放器,文件查找的实现

STM32单片机对红外接收系统的设计

如何利用stm32单片机进行超声波测距

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

STM32设计的嵌入式系统的智能控制网络终端方案

体感遥控器设计遭遇瓶颈?用STM32 MCU造!

stm32红外遥控总结

基于stm32f4的高速信号频谱分析仪的设计与实现

基于STM32单片机对HCSR04超声波的控制

一种基于STM32的温室远程监测和控制系统的设计