分割器 天秤座满月 不逼自己一把就不知道你有多优秀 重庆重负载45DF-10-270卧式转台工厂直发 平板共轭型凸轮分割器
数控转台 BT型凸轮分割器类型 机床行业资讯机床行业动态分析——158网 中国机床行业加快速度进行发展令全球瞩目

以STM32F4为控制核心的四轴航拍飞行器的设计与实现

来源:贝博app体育网页版    发布时间:2024-01-08 15:27:14

■ 本设计是基于STM32F4的四轴航拍平台。以STM32F407为控制核心,四轴飞行器为载体,辅以


  •   本设计是基于STM32F4的四轴航拍平台。以STM32F407为控制核心,四轴飞行器为载体,辅以云台的航拍系统。硬件上由飞控电路,电源管理,通信模块,动力系统,机架,云台伺服系统组成。算法上采用简洁稳定的四元数加互补滤波作为姿态解算算法,PID作为控制器,实现飞行,云台增稳等功能。具有灵活轻盈,延展性,适应性强好等特点。

      四轴飞行器是一种利用四个旋翼作为飞行引擎来进行空中飞行的飞行器。进入20世纪以来,电子技术快速的提升四轴飞行器开始走向小型化,并融入了人工智能,使其发展趋于无人机,智能机器人。

      四轴飞行器不但实现了直升机的垂直升降的飞行性能,同时也在某些特定的程度上降低了飞行器机械结构的设计难度。四轴飞行器的平衡控制管理系统由各类惯性传感器组成。在制作的步骤中,对整体机身的中心、对称性以及电机性能要求较低,这也正是制作四轴飞行器的优势所在,而且相较于固定翼飞机,四轴也有着可垂直起降,更加灵活,易维护等优点。

      在实际应用方面,四轴飞行器可以在复杂、危险的环境下能够实现特定的飞行任务,也能够适用于监控交通,环境等。比如,在四轴飞行器上安装甲烷等有害化学气体的检测装置,则可以在高空定点地检测有害化学气体;进入辐射区检查;做军事侦察;甚至搬运材料,搭建房屋等等。本设计利用四轴搭载云台实现航拍任务,当然通过改装也可以执行其他任务。

      本设计主要研究了四轴飞行器的姿态结算和飞行控制,并设计制作了一架四轴飞行器,对关键传感器做了标定,并利用用matlab分析数据,设计算法,还进行了单通道平衡试验调试,进行试飞实验取得了一定的效果。

      本设计采用STM32F4作为核心处理器,该处理器内核架构ARM Cortex-M4,具有高性能、低成本、低功耗等特点。

      主控板包括传感器MPU6050电路模块、无线蓝牙模块、电机启动模块,电源管理模块等;遥控使用商品遥控及接收机。控制芯片捕获接收机的PPM命令信号,传感器与控制芯片之间采用IIC总线连接,MCU与电调之间用PWM传递控制信号。

      软件算法才用基于四元数的互补滤波解算姿态叫,控制算法才用经典PID控制器控制云台舵机和四轴电机。如图2-1为本设计总体框图。

      针对前面提出的整体设计的具体方案,本设计采取模块化策略,将各个功能部分开来设计,最后组合起来。

      四轴飞行器要求整体设计质量较轻,体积较小,因此在电池的选取方面,采用体积小、质量轻、容量大的锂电池供电最合适。系统的核心芯片为STM32F103,常用工作电压为3.3V,同时惯性测量传感器,蓝牙通信模块的常规供电电压也为3.3V,锂电池的电压为11.4V,要使系统正常工作,需要将11.4V的锂电池电压稳压到3.3V。常用的78系列稳压芯片已不再适用,一定要选择性能更好的稳压芯片。

      经综合考虑,本电路采取LM1117-3.3和LM2940-5电源部分的核心芯片。电池电源经过LM2940-5降到5V后在输入LM1117-3.3稳压为3.3V。由于电机部分电流比较大,故在飞控电路部分加入了过流保护,使用500mA的保险丝。电路图如下。

      软件设计上由控制核心STM32F4读取传感器信息,解算姿态角,以姿态角为被控制量融合遥控信息后,输出到四个电机及两个舵机以完成四轴飞行控制和云台的稳定补偿。下图是软件流程:

      根据前面给出的姿态解算方程与四元数,即可得到姿态计算系统的计算原理如下图(4-1)

      本设计基于互补滤波的思想上完成的四元素算法,其核心思路为利用加速度测得的重力向量与估计姿态得到重力向量的误差来矫正陀螺仪积分误差,然后利用矫正后的陀螺仪积分得到姿态角。

      首先不妨设处理后的加速度数据为:ax,ay,az,单位m/s^2。加速度计的向量为 (ax,ay,az)陀螺仪数据为:gx,gy,gz,单位rad/s。陀螺仪向量 (gx,gy,gz),由式(4-5)可得由载体到导航坐标系的四元数形式转换矩阵为:

      根据余弦矩阵和欧拉角的定义,地理坐标系的重力向量,转到机体坐标系,是 中的第三列的三个元素,即

      然后利用向量的叉积, 可视为误差向量,这个叉积向量仍旧是位于机体坐标系上的,而陀螺积分误差也是在机体坐标系,而且叉积的大小与陀螺积分误差成正比,正好拿来纠正陀螺。由于陀螺是对机体直接积分,所以对陀螺的纠正量会直接体现在对机体坐标系的纠正。用上面得到的结果校正陀螺仪:

      再利用二阶毕卡法解四元数微分方程(4-6),更新四元数为下一次计算做准备。毕卡二阶算法为:

      通过以上算法我成功得出了飞行器的姿态角,在开启电机的情况下,角度误差在+/-2°以内,满足了控制要求。姿态计算效果如下图所示,其中红色和蓝色是直接由加速度计算出的俯仰角和横滚角,青色和黄色为姿态结算后的俯仰角和横滚角。由图中数据可看出,解算的姿态角不仅能即时的反应角度变化切曲线平滑,说明姿态解算算法有效。4.2.控制设计

      由于四轴飞行器独特的机械结构,即结构上的对称设计,使得四轴在俯仰角的控制欲横滚角的控制上有这近乎相同的控制特性,且两者相对独立。四轴飞行器的俯仰,横滚,偏航,升降能够最终靠四个输入量来控制。通过设定一个期望角度,调整电机转速,使得测得的姿态角稳定在期望角。控制律的设计主要是采用是闭环控制。以姿态角做为被控制量,采用经典的PID控制算法。

      四轴飞行器系统是一个时变且非线性的系统,采用传统PID算法的单一的反馈控制会使系统存在不同程度的超调和振荡现象,没办法得到理想的控制效果。本文将前馈控制引入到了四轴飞行器系统的控制中,有效地改善了系统的实时性,提高了系统的反应速度;并且根据四轴飞行器系统的特点,对数字PID算法进行了改进,引入了微分先行环节,改善了系统的动态特性;使得控制器能够更好地适应四轴飞行器系统的实际情况。

      在姿态角的控制中,本设计将控制器捕获到的遥控器信号转换为一个角度,作为期望角,与解算出来的测量角作差,得到偏差error。将error乘以一个比例系数kp。在只有kp作用下,系统会有静差所以考虑利用积分ki控制消除稳态误差。但积分控制会降低系统的动态性能,甚至造成闭环系统不稳定,因此要对积分进行限幅,防止积分过大。

      对于微分,如果采用传统的D方法,在人为操纵四轴时会产生输入的设定值变化频繁且幅度较大,从而造成系统的振荡。对人为控制十分不利,未解决设定值的频繁变化给系统带来的不良影响,本文在姿态角控制上引入了微分先行PID算法,其特点是只对输出量进行微分,即只对陀螺仪角速度测量值进行微分,而不对姿态角的设定值进行微分。这样,在设定值发生明显的变化时,输出量并不会改变,而被控量的变化相对是比较缓和的,这就很好地避免了设定值的频繁变化给系统造成的振荡,明显地改善了系统的动态性能。控制周期定为4ms,姿态控制系统示意图如下:

      通过前面一章的介绍我们已的达到了俯仰,横滚,航向三个控制量,然后将它们分别输入三个独立的如上图所示的PID控制器,我们大家可以得到三个PID输出:pid_roll,pid_pitch,pid_yaw将这三个输出量做简单的线性运算输出给电机。部分代码如下:

      PID参数的整定是PID控制的关键环节,直接影响到控制的效果。故一个PID设计的好不好往往要看其参数能否调节好,本设计的PID参数调节采用凑试法。凑试法是通过实际的闭环系统,通过观察系统的响应曲线,在本设计中通过观察被调量,PID输出,设定值三条曲线,判断出kp,ki,kd对系统响应的影响,反复尝试,最终达到满意响应,进而达到确定控制参数的kp,ki,kd的目的。在参数调节过程总遵循以下原则[17]:

      确定比例增益P时,首先去掉PID的积分项和微分项,一般是令Ti=0、Td=0(具体见PID的参数设定说明),使PID为纯比例调节。输入设定为系统允许的最大值的60%~70%,由0逐渐加大比例增益P,直至系统出现振荡;再反过来,从此时的比例增益P逐渐减小,直至系统振荡消失,记录此时的比例增益P,设定PID的比例增益P为当前值的60%~70%。比例增益P调试完成。

      比例增益P确定后,设定一个较大的积分时间常数Ti的初值,然后逐渐减小Ti,直至系统出现振荡,之后在反过来,逐渐加大Ti,直至系统振荡消失。记录此时的 Ti,设定PID的积分时间常数Ti为当前值的150%~180%。积分时间常数Ti调试完成。

      积分时间常数Td一般不用设定,为0即可。若要设定,与确定 P和Ti的方法相同,取不振荡时的30%。

      (5)最终调试好的标准应该是,PID输出曲线在有一个阶跃响应来是,响应一大一小两个波,小波是的四分之一。

      四轴飞行器的PID整定,我们第一步四轴固定在单轴平衡平台上,让飞行器完成单轴平衡,主要观察姿态角的(1)稳定性,能否平衡在期望角度;(2)响应性,当操纵命令改变时,四轴能否即时的响应期望的变化;(3)操纵性,由操纵员感受四轴的姿态是否已与操纵,会不会产生响应过冲。

      在参数调整时,先调P,将I,D给0,先给一个小值P1,如果飞行器不能稳定在一个角度,则P1给小了,下一次给一个较大值P2,如果飞行器产生震荡则证明P2给大了,那么合适的P在P1-P2之间,反复试验几次可找到P震荡的临界点P0,然后保持P0不变按照调P的方法来调D,D是用来消除误差的,当抖动差不多被消除时,此时我们有较合适的P0,D0,在这两个值附近再试几组参数,观察效果得到最优参数。调好P,D后此时四轴的稳定状态与期望状态间也学会有静差,接下来加入I,参数有小到大,当静差差不多被消除时,我们再对P,I,D三组参数在小范围内联调。最后确定恰当的积分限幅值,完成整个PID参数的整定。5.系统创新

      采用STM32F407这样一款高性能芯片作为控制核心,计算快速,扩展空间大。

      姿态算法采用基于四元数的互补滤波,姿态角无奇点,比起卡尔曼李春波等高端算法有着计算量小的特点且能投入到正常的使用中,大大节约了cpu计算时间,也降低了对cpu的性能要求。

      利用四轴作为云台载体有着灵活机动,可让摄像头获得比较好的视野,且云台能消除四轴机体抖动。

      在完成控制器底层的硬件驱动后,开始姿态角算法的调试。利用蓝牙模块将解算出的姿态角数据发回上位机,摇动四轴机体,观察上位机数据曲线与姿态演示立方块。

      图6-1 姿态角数据对比曲线中黄色和蓝色为直接由加速度计算出的俯仰与横滚角,红色和青色为姿态解算后的姿态角,可明显看出直接由加速度计算出的姿态角噪声大,不平滑,不能真实反映姿态角的变化。而由四元数算法解算后的姿态角反应快,噪声小,足以满足控制要求。光观察曲线并不直观,还可以观察上位机中的立方块,当小立方块的姿态与四轴机体能够保持一致变化时说明姿态解算良好。通过以上手段可知姿态角解算满足需求。

      在第五章,已经针对四轴飞行器进行了PID的控制设计,但为得到实际使用的PID控制参数我们还一定要通过反复试验来整定出最优参数。为了方便参数的调试,在本设计过程中才用了先调平衡一个方向,再调另一个方向,最后联达到平衡的效果。为此设计了如下图所示试试验平台:

      在调试过程中,为了尽最大可能避免频繁的下载程序带来的不变,采用串口蓝牙发送参数的做法,大幅度的提升了调试效率。当俯仰与横滚两个轴都能够独立的平衡时,可以脱离单轴平台开始在空中进行航向角的稳定性调试。

      6.2.四轴飞行器的试飞当前面的各项调试都完成了之后,就准备要进行试飞实验。飞行试验是对控制管理系统的功能和技术指标做验证的最终手段,也是衡量四轴设计是否成功的重要标志。

      试飞前要确保系统各部分工作正常,稳定。检查各个接口连接是不是正确,各部件安装是否牢固,电池的电量是否充足。打开电源前检查遥控器油门是否在最低位置,起飞前先轻门确保电机工作正常。一切准备就绪,即可进行试飞。将四种飞行器放在水平地面上,开始启动姿态初始化程序,听到电调提示音后,缓慢增加油门,螺旋桨转速上升,将飞机拉离地面。由真实的情况可看出当姿态发生倾斜时,姿态解算及PID控制能够及时作出调整电机转速,稳定飞行姿态。飞行器还能根据遥控指令的变化完成相应的动作。本此设计的四轴飞行器可实现垂直升降的要求,能保持姿态的稳定,机体晃动小,在微风的干扰下能自动调整姿态,确保平稳飞行,且系统响应快,航时大概在8分钟。因此本次的设计是有效的。

      关键字:编辑:什么鱼 引用地址:以STM32F4为控制核心的四轴航拍飞行器的设计与实现

      下一篇:采用DSP与STM32的智能型伺服控制器的软硬件设计及性能测试分析

      STM32F4有多种定时器,其中TIM2-TIM5称为通用定时器,具有相似的软件设置及使用方法。在这里还必须要格外注意的是TIM3和TIM4为16位定时器,TIM2和TIM5为32位定时器。 使用TIM2-5可以遵循以下步骤: 1、打开config.h文件,对如下图所示的宏进行设置,设置为0表示不启动相应的定时器,设置为1表示当前定时器定时1ms,设置为2表示当前定时器定时10ms,设置为3表示当前定时器定时100ms,设置为4表示当前定时器为1s。 上图所示的设置结果为,启动定时器2设置为1ms定时,启动定时器5设置为1s定时,定时器3和定时器4没有启动。 2、打开main.c文件,在相应的中断函数中填入逻辑代

      开发笔记3: 定时器2-5的使用方法 /

      现在汽车的电子电气架构逐步在更新,慢慢的变多的ECU进行整合,从原来的分布式阶段逐步演进到域控制器和中央计算架构。在架构演进过程中,支撑这一变革的底层芯片也在慢慢地发展,慢慢的变多的主机厂关注的是一整套的解决方案,而不是独立的芯片解决单独的区域。面向未来电子电气架构核心区域进行全场景布局的芯片厂商,将具备更明显的竞争优势。 主流OEM电子电气架构的演变进度 博世认为汽车电子电气架构演变路径为分布式、域集中、中央集中式。电子电气架构逐步成为汽车产品的一个核心技术,过去汽车上的控制器相互独立,软件为嵌入式,整车做最终的集成即可,随着分布式架构朝着域控制器,主机厂自己掌握中央控制管理系统,否则就会失去对汽车产品的控制权。 特斯拉Mod

      器技术解析 /

      引言 想要快速完成网络协议栈和USB OTG功能,使用ST自家的工具STM32CubMx再好不过的了。如果你还不会使用,别着急下面我会一步一步的用图片告诉你如何做。 软件平台:windows、STM32CubMx、keil v5 硬件平台:原子的stm32f407ZGT6开发板, STM32CubMx配置 1、以太网管脚的映射配置 第一:阅读原理图,使用STM32CubMx完成配置,原理图这里不说明。直接到STM32CubMx配置。 (1)、打开STM32CubMx软件,选择New Project,在弹出的菜单选择,选择对应的芯片,点击OK即可。如下图: (2) 设置clock,板子使用的是8MHz的晶振,软件对应

      07以太网及USB OTG快速开发 /

      使用库函数点亮LED,不用我们自己去查看寄存器,方便我们的开发,但是库函数是怎样封装的呢? int main(void) { //声明一个结构体变量 GPIO_InitTypeDef GPIO_InitStructure; //使能GPIO外设时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //定义一个结构体 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9 GPIO_Pin_10;//连接LED的引脚 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT; //输出模式

      的库函数分析怎么来实现点亮一个LED(点亮LED)(三) /

      一直被说是就不能把几个串口放在一起,写个标准例程直接用,非要每次用哪个串口才现场改程序,被迫把usart1,usart2,usart3进行了资源整合,挂在这以备不时之需。 功能简述: 串口1,串口2,串口3串口内自收自发数据,串口之间通信互发数据,读取串口的缓冲区进行收发都可以,资源冲突已经解决,可以直接用。 程序声明: 根据标准例程对usart1,usart2,usart3进行了GPIO,时钟,串口等配置,放在了一个工程中,为每个串口定义了自己的缓冲区(大小也是)用于存储串口接收到的数据。 因为主要用的是usart1来进行调试,所以就为usart1中配置了标准库函数,若需要用其他串口来打印输出,可以将下方代码

      STM32F4说是有192KRAM 但是很是很坑。192k分为两部分128k普通RAM和64K CCM RAM,CCM只能内核调用,外设没办法使用。本来想着192KRAM挺好,结果仔细看悲剧了。但是也不能浪费,能够尝试使用它,把UCOS内核数据放到CCM。网上搜索到一个FreeRTOS的照着他的自己弄了弄。 1.勾选IARM2 确认使用CCM 此时编译程序后打开.map文件会发现使用了CCM但没数据定义到这块RAM。同时发现IRAM1内部关于UCOS的存储。 2.打开.sct文件添加如下图代码--UCOS_ii_IARM自己写的,把刚刚在IRAM1中看到的 os_core.o 和os_cpu_c.o文件

      定义ucosii到CCM /

      07的串口使用集合(USART1,USART2,USART3,USART6)

      由于项目需要用多串口,因此基于正点原子探索者开发板的串口例程里的串口不够用,在此基础之上,自己对需要用的几个串口操作做了简要的封装,其中已经实现的串口有串口1,串口2,串口3以及串口六,如果有大神能够帮忙完善,本菜鸟在此先谢过,请多多指教 其中的头文件内容如下: /* * file: usart.h * author: Jeans Oyoung * create on June 23, 2016 */ #include string.h #define USE_USART1 #define USE_USART2 #define USE_USART3 #define USE_USART4 #define USE_U

      USART又叫通用同步异步收发器,塔提供了一种灵活的方法与工业使用标准NRZ异步春航数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择,支持同步单向通信和半双工单线通信,也支持LIN(局部互联网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范以及调制解调器(CTS/RTS)操作,它还允许多处理器通信,使用多换成器配置的DMA方式,能轻松实现高速数据通信。 USART寄存器控制框图如下 可通过对 USART_CR1 寄存器中的 M 位进行编程来选择 8(置0) 位或 9(置1) 位的字长。TX 引脚在起始位工作期间处于低电平状态。在停止位工作期间处于高电平状态。

      的设计 /

      Cube(第2版) (杨百军)

      算法与应用 (陈世勇, 苏博览,杨敬文)

      ADI世健工业嘉年华——深度体验:ADI伺服电机控制方案

      解锁【W5500-EVB-Pico】,探秘以太网底层,得捷电子Follow me第4期来袭!

      【下载】LAT1317 STM32CubeProgrammer和STM32CubeIDE协同调试的方法

      【下载】LAT1334 基于MCSDK5.4.8电机库修改两电阻采样方法

      【直播】轻松使用STM32MP13x如MCU般在Cortex A 核上裸跑应用程序

      【新品】STM32H5-Arm® Cortex®-M33 内核,主频高达250MHz,提升性能与信息安全性

      【新品】STM32MP13X-支持Linux、RTOS和Bare Metal应用,新一代通用工业级MPU

      【新品】Arm® Cortex®-M33处理器内核,运行频率160 MHz,基于Armv8-M架构并带有TrustZone®

      【Matter】康普和意法半导体强强联手,让物联网设备Matter证书管理既安全又简便

      【方案】STM32WLE5 x 利尔达LoRa模组助力亚残会开幕式惊艳秀

      【新品】意法半导体发布远距离无线微控制器,提高智能计量、智能建筑和工业监控的连接能效

      1写在前面该教程前面讲述了许多关于CAN协议的一些概念,可能许多初学者看的云里雾里,那么本文将结合代码让大家理解之前讲述的内容。因为关 ...

      本文介绍一个小技巧:使用MDK编译器,让STM32程序HEX文件中加入固件版本信息。代码代码如下: ----------------------------------------- ...

      使用STM32开发的朋友不知道是否有发现过这样的一些宏定义?如下: if defined (__CC_ARM) pragma anon_unions endif看到上面的语句一开 ...

      对一款国产的3D霍尔传感器的SPI封装 上这篇文章完成我们的封装,以及在STM32F4的板子上面测试。一次费我这么多引脚,我吐了。看来得上IIC, ...

      开始学习51的时候有的人会直接选择进行对单片机的寄存器做相关操作,可以很好的理解单片机的工作原理,对于代码的编写也会后很好的理解,但是 ...

      站点相关:综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程