基于STM32的四旋翼飞行器控制系统设计
liuian 2025-07-21 15:55 4 浏览
摘 要:四旋翼飞行器控制系统的性能决定了飞行效果的优劣,如何改善飞行控制系统使其拥有更良好的表现成为近几年的研究热点。根据四旋翼飞行器的飞行原理,设计了一种新型四旋翼飞行器控制系统。该系统以STM32作为主控制器,配合各姿态传感器实现飞行器姿态及位置的控制,并结合以姿态角为主要误差源的双环结构PID控制器,提高了飞行器的平稳性。经实际飞行验证,该飞行控制系统方案能够取得较稳定的飞行效果。
0 引言
目前,以精确的电子技术取代复杂的机械结构已成为一种趋势,四旋翼飞行器(four-rotor)以机载电子设备控制机身的姿态及运动,机械结构得到简化,降低了生产成本及维护成本。它可以实现垂直起降、悬停等空中动作,飞行速度为每秒几米甚至十几米,具有较高的机动性与操控性,与其他类型飞行器相比具有较明显的优势,在军工、警用、民用等诸多领域有广泛的应用前景。
四旋翼飞行器具有4个输入力,但却有6个状态输出,是一个欠驱动系统,具有非线性、强耦合、多变量等特性,因此对控制器的设计要求较高[1]。根据四旋翼飞行器结构特点及实际需求,选用意法半导体公司生产的STM32F405RG微处理器作为控制系统的主控制器,其强大的运算处理能力及丰富的片上资源能够满足四旋翼控制的需求。
1 四旋翼的飞行原理
四旋翼飞行器结构形式是一种最直观、最简单的稳定控制形式。四旋翼飞行器机身为两根刚性支架呈十字形交叉结构,飞控板、外部设备及电池等安装在支架的交叉处,作为飞行器动力来源的4个电机及旋翼轴对称地安装在支架的4个末端,相邻两个旋翼旋转方向相反,空中平衡飞行时相邻旋翼产生的反作用力相互抵消,防止机身自旋[2]。通过控制4个旋翼的转速,产生升力的变化,便可实现飞行器空中姿态的控制。四旋翼飞行器有6种基本的运动状态,分别是:垂直运动、前后运动、侧向运动、俯仰运动、滚转运动和偏航运动。基于以上基本运动状态,四旋翼可以完成各种复杂动作[3]。四旋翼的结构形式如图1所示。
2 系统硬件选型与电路设计
四旋翼飞行器的控制系统主要由主控制器、各种姿态传感器、数据传输模块、电机及其驱动模块组成。主控器通过SPI、IIC总线采集各姿态传感器的数据,实时计算飞行器相对于地面的姿态角和航向角的变化,结合相应的控制律与任务指令输出恰当的PWM波信号,电调根据PWM波处理产出相应的电压信号输入给4个电机,以此控制电机转速,实现自动调整飞行器在空中的姿态与位置。四旋翼飞行器飞行控制系统设计方案如图2所示。
2.1 主控制器
四旋翼控制系统对实时性、稳定性及低功耗具有较高要求,因此选用一款高性能的芯片作为其主控制器尤为重要。STM32F405RG基于32位ARM Cortex-M4内核开发,主频可达168 MHz,处理单条指令速度可达1.25 DMIPS/MHz,满足对数据处理速度的要求。它具有功耗动态调整功能,能够在运行模式下和从Flash存储器执行时实现低至238 A/MHz的电流消耗。多达15个高速通信接口,包括6个USART、3个SPI和3个IIC等,可用于将各传感器模块采集的姿态数据传输给主控制器。STM32集成多个PWM定时器,可实现多路PWM脉冲信号的输出。用户可使用SWD或JTAG两种模式下载和调试程序。
2.2 陀螺仪传感器
陀螺仪是飞行器惯导系统中的核心器件,用于检测俯仰、滚转和偏航3个方向的角速度,积分后可得到相应的倾斜角度[4]。控制器对倾斜角的控制使飞行器在受到外界干扰(如气流等)时能保持姿态的平稳。
系统采用体积小、功耗低的MAX21000型号3轴数字输出陀螺仪。用户可设定±31.25~±2 000 dps的量程范围,灵敏度可达960 digit/dps。通过10 MHz的SPI接口向STM32提供测得的角速度数据。陀螺仪工作时存在一定的温度漂移,需通过软件对陀螺仪中立点进行实时修正来提高数据的精准度。MAX21000陀螺仪电路原理如图3所示。
2.3 加速度传感器
本系统采用ST公司的LSM303D加速度计。该芯片整合了一个3轴加速度计和一个3轴磁场传感器。通过SPI接口向STM32提供数据。LSM303D加速度计电路原理如图4所示。
加速度传感器用于检测飞行器轴向的加速度,积分可得飞行速度与距离。陀螺仪的数据因为存在“温漂”,在积分作用下,较长时间后数据将不可靠,加速度计传感器的数据可以对陀螺仪的误差进行矫正。但同时加速度传感器对震动比较敏感,加入简单的滤波会降低数据的实时性,因此精确的姿态采集需多传感器配合实现。
2.4 高度计
HC-SR04超声波测距模块只需提供一个10 ?滋m以上的脉冲触发信号,将自动发射8个40 kHz方波,同时检测是否有返回波,根据发射信号与检测到返回信号的时间差可计算模块与障碍物的距离。该模块测量飞行器离地高度精度可达3 mm,在精度上优于气压计,但是也有其缺陷,当地面为草坪或被测障碍物表面不平整时,返回的信号太弱。同时该模块测距范围为2~400 cm,只能用于较低高度的检测。
飞行器在户外飞行时,高度易超出超声波模块的测量范围,则系统采用MS5611气压传感器测量高度[5]。上电时,气压传感器测量当前的稳定气压并保存为0 m气压,此后飞行器高度改变,在此参数基础上进行叠加。该芯片集成了一个24位AD转换器,将气压值转换成数字信号输出,测距精度可达10 cm。
3 四旋翼飞行器建模
选择合适的坐标系有利于四旋翼飞行器飞行状态的分析。如图1所示,本文选择地面坐标系为E(OXYZ),机体坐标系为B(oxyz)。地面坐标系与机体坐标系的关系为滚转角
、俯仰角
和偏航角
,表示分别绕Bx、By、Bz旋转到Ex、Ey、Ez轴的角度。从机体坐标系B到地面坐标系E的旋转矩阵R可表示为:
定义Fi(i=1,2,3,4)表示第i个旋翼产生的升力。在机体坐标系下,飞行器所受的拉力为:
代入旋转矩阵R可转换为飞行器在地面坐标系中的受力:
F
四旋翼飞行器在地面坐标系中的线性位移为[x y z]T,根据牛顿第二定理F=ma,得线性加速度方程为:
定义l为飞行器臂长,M
、M
、M
分别为飞行器绕机体坐标系3个轴的转矩,I
、I
、I
分别为飞行器绕机体坐标系3个轴的转动惯量,i为旋翼i转速,则飞行器在滚转、俯仰、偏航3个方向上的转矩为:
由欧拉方程可得,四旋翼飞行器在地面坐标系中的角加速度方程式为:
令:
式(7)为四旋翼飞行器控制系统的4个输入力,U1、U2、U3、U4分别为飞行器的滚转力、俯仰力、偏航力及升力。结合式(4)、式(6)和式(7)可得四旋翼飞行器的动力学模型为:
该动力学模型忽略了空气阻力、机体形变、重力加速度随高度的改变而变化等对系统影响较小的因素,相对于实际飞行状态,该模型进行了简化,有利于控制算法的设计。
4 PID控制器设计
本系统采用双环PID设计,内回路为姿态PID回路,外回路为位置PID回路[6]。给出预期位置指令后,位置PID回路计算出所需改变的姿态角,输入给姿态回路,姿态回路计算出电机的控制量。姿态的改变可引起飞行器线性的运动,因此实施闭环设计以精确控制飞行器的姿态。位置控制回路的设计可以使飞行更精确、快速地按照设定轨迹飞行。PID控制器结构如图5所示。
四旋翼平衡飞行时,PID控制器以倾斜角作为其主要的误差来源,通过将偏差量的比例、积分和微分进行线性组合,构成控制量。比例参数的大小决定了控制器的响应速度,但参数过大会使系统不稳定;对角速度积分后可得飞行器的倾斜角度,从而产生抵抗力,消除倾斜角,直到飞行器达到平衡位置;飞行器偏差的产生与控制器的响应之间存在微秒级的滞后,微分环节能提前抑制倾斜角的偏差,但是过强的微分会放大传感器的噪声干扰,降低控制器的抗干扰性能。因此设定恰当的PID控制参数才能保证飞行器达到稳定的飞行状态。
5 飞行试验结果
飞行实验在室内进行,实验过程中,地面监控站接收飞行器通过串口模块传送的实时飞行数据,并将其保存,同时设定悬停高度为2 m。手动操控四旋翼飞行器起飞至2 m左右,切换到平衡模式,使其进行悬停飞行,在此过程中,飞控系统对飞行器的滚转角、俯仰角及高度进行自主控制。飞行实验时间约为2 min,实验结果如图6~8所示。
从图6和图7可以看出,飞行器的滚转角度和俯仰角度基本控制在±2°以内,俯仰角的稳定性略高于滚转角,两个姿态角都达到了较理想的控制效果。
图8为高度曲线,从图中可以看出,飞行器在最初的几秒内自主调整到设定的高度位置,之后的时间稳定在1.9 m到2.1 m之间。飞行器高度的自主调整在0.2 m的范围波动,但总体仍在目标高度附近。
6 结论
本文提出了一套四旋翼飞行器控制系统的设计方案,经悬停飞行实验验证,飞行器能够成功实现滚转、俯仰和高度的自主控制,各个模块性能可靠、稳定,达到了设计要求。飞行控制系统以STM32为主控制器,与传统单片机相比具有较明显优势,其丰富的片上资源有利于系统功能的进一步扩展,为后续课题的研究提供了良好的平台。四旋翼飞行器操控难度低、飞行角度灵活,在军事侦查、安全巡检、低空航拍等众多领域具有广泛的应用前景。
参考文献
[1] 刘乾,孙志锋.基于ARM的四旋翼无人飞行器控制系统[J].机电工程,2011(10):1237-1240.
[2] 殷强.四旋翼无人机自主控制系统研究[D].天津:天津大学,2011.
[3] 杨明志,王敏.四旋翼微型飞行器控制系统设计[J].计算机测量与控制,2008,16(4):485-490.
[4] 韩涛.四倾转旋翼机直升机模式飞行控制系统研究[D].哈尔滨:哈尔滨工业大学,2012.
[5] 冀明,卢京潮.基于Cortex-M4的四旋翼飞行控制系统设计[J].计算机测量与控制,2013,21(7):1816-1821.
[6] 宿敬亚,樊鹏辉,蔡开元.四旋翼飞行器的非线性PID姿态控制[J].北京航空航天大学学报,2011,37(9):1054-1058.
- 上一篇:单片机差分升级(STM32,M0,M3,M4适用)
- 已经是最后一篇了
相关推荐
- 基于STM32的四旋翼飞行器控制系统设计
-
摘要:四旋翼飞行器控制系统的性能决定了飞行效果的优劣,如何改善飞行控制系统使其拥有更良好的表现成为近几年的研究热点。根据四旋翼飞行器的飞行原理,设计了一种新型四旋翼飞行器控制系统。该系统以STM32...
- 单片机差分升级(STM32,M0,M3,M4适用)
-
参考文档:https://blog.csdn.net/darling757267/article/details/80652267https://www.cnblogs.com/idreamo/p/9...
- STM32入门: Step3 UART简介(stm32的uart和usart)
-
Step3UART简介UART和新板介绍34分钟目标描述完成本教程后,您将:熟悉L475IoTNodeDiscovery板,了解如何在以下位置对RS232串行链路进行编程和使用:以前使...
- 如何使用GCC手动编译stm32程序(如何在gcc上编译并运行代码)
-
如何不使用任何IDE(集成开发环境)编译stm32程序?集成开发环境将编辑器、编译器、链接器、调试器等开发工具集成在一个统一的软件中,使得开发人员可以更加简单、高效地完成软件开发过程。如果我们不使用K...
- STM32单片机从零开始使用教程(二) 使用Cube搭建跑马灯工程并下载
-
通过cube建立工程RCC设置为外部晶振高速晶振对应的引脚会亮起进入clockconfiguration进行时钟配置,输入频率8M盒子PLLSourceMu改为使用外部时钟HSE,系统时钟Sys...
- 超详细的FreeRTOS移植全教程——基于stm32
-
准备在移植之前,我们首先要获取到FreeRTOS的官方的源码包。这里我们提供两个下载链接:一个是官网:http://www.freertos.org/另外一个是代码托管网站:https://sourc...
- 用ESP32和STM32设计了一块主控板,却用来养鱼?
-
前言我做了一个智能鱼缸系统的控制板。基于ESP32和STM32设计。成本不到200元。全文导航功能描述、电路设计图、主要模块选型、软件说明、获取开源资料、结语。功能描述①自动投食。②自动过滤供氧。③灯...
- STM32物联网套件基础版03-控制继电器
-
前言继电器是一个生活中比较常用的元器件,有了继电器,我们可以使用单片机输出的低电平控制高电平期间工作,比如继电器接到220V用电器上,可通过单片机智能控制用电器,本节我们开始正式学习如何使用继电器。一...
- STM32单片机详细教学(三):STM32单片机的开发方法
-
大家好,今天给大家介绍STM32单片机的开发方法,文章末尾附有本毕业设计的论文和源码的获取方式,可进群免费领取。前言经过前两章节对STM32的简单介绍,在接下来的几个章节中开始进行STM32单片机的软...
- 原来STM32单片机的开发如此的简单
-
大家好,我是华维今天我们讲下用STM32CubeMX和Keil5点亮一个LED,这个项目比较简单,大家都可以尝试下。这个就是我们今天的主角,这款单片机芯片是STM32F030K6T6。这个开发板非常简...
- STM32 F103 使用HAL库配置PVD(stm32l0 hal库)
-
PVD(ProgrammableVotageDetector),即可编程电压监测器PVD可以检测电压变化并触发中断,一般用于判断断电并进行数据保存工程是使用STM32CubeMx生成的,在ST...
- STM32F4芯片嵌入式学习7(stm32f4芯片包安装)
-
文档是本人学习总结的文档,有些乱,勿怪。1、STM32F407时钟系统在STM32F4中,有5个最重要的时钟源,为HSI、HSE、LSI、LSE、PLL。其中PLL实际是分为两个时钟源,...
- ARM和STM32,嵌入式是什么关系(arm嵌入式和单片机的区别)
-
ARM,STM和嵌入式的关系就是上图,其中ARM负责内核架构,指令集的设计,提供给IC设计厂商内核和编译器等支持(如ARM11,Cortex-M,Cortex-A系列处理器)STM32是基于ARM...
- STM32CUBEMX 使用教程2 — GPIO的使用、输入/输出
-
学习和使用任何一款MCU,最初开始往往都是从GPIO入手的,学会如何配置IO,能让IO输出想要的电平状态,能读取IO口的电平。本篇介绍一下STM32的GPIO。GPIO(General-Purpose...
- 入手STM32单片机的知识点总结(stm32单片机的介绍)
-
文章下方附学习资源,自助领取本文将以STM32F10x为例,对标准库开发进行概览。主要分为三块内容:STM32系统结构寄存器通过点灯案例,详解如何基于标准库构建STM32工程STM32系统结构上图,S...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
系统C盘清理:微信PC端文件清理,扩大C盘可用空间步骤
-
10款高性能NAS丨双十一必看,轻松搞定虚拟机、Docker、软路由
-
飞牛OS入门安装遇到问题,如何解决?
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- table.render (33)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)