单片机设计_四轴飞行器(STM32)

四轴飞行器(STM32)

想要更多项目私wo!!!

一、系统简介

四轴飞行器是一种通过四个旋翼产生的升力实现飞行的无人机,其核心控制原理基于欧拉角动力学模型。四轴飞行器通过改变四个电机的转速来实现六自由度控制(前后、左右、上下移动和俯仰、横滚、偏航旋转)

核心控制原理:

姿态感知:通过MPU6050/MPU9250等惯性测量单元获取飞行器的三轴加速度和三轴角速度数据
姿态解算:使用互补滤波或卡尔曼滤波算法将传感器数据转换为欧拉角(俯仰、横滚、偏航)
控制算法:采用串级PID控制,内环控制角速度,外环控制角度
电机混控:将控制量分配到四个电机,实现稳定飞行

二、系统总体框图

飞控原理图

遥控器原理图

三、部分代码

#include "control.h"
#include "BSP.H"
#include "rc.h"
#include "imu.h"
#include "uart1.h"
PID PID_ROL,PID_PIT,PID_YAW;
u8 ARMED = 0;
extern vs16 QH,ZY,XZ;float Get_MxMi(float num,float max,float min)
{if(num>max)return max;else if(num<min)return min;elsereturn num;
}void CONTROL(float rol_now, float pit_now, float yaw_now, float rol_tar, float pit_tar, float yaw_tar)        
{                                                //当前姿态角,,,目标姿态角u16 moto1=0,moto2=0,moto3=0,moto4=0;vs16 throttle;
//        u8 moto[8];float rol = rol_tar + rol_now;float pit = pit_tar + pit_now;float yaw = yaw_tar + yaw_now;throttle = Rc_Get.THROTTLE - 1000;        //1000<遥控油门值<2000if(throttle<0)        throttle=0;PID_ROL.IMAX = throttle/10;                        //积分限幅,积分值不超过当前油门值的一半PID_ROL.IMAX = Get_MxMi(PID_ROL.IMAX,1000,0);        //限制积分结果为,0到1000        PID_PIT.IMAX = PID_ROL.IMAX;PID_ROL.pout = PID_ROL.P * rol;PID_PIT.pout = PID_PIT.P * pit;
//、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、        /0.1  0.1   30  30if(rol_tar*rol_tar<1 && pit_tar*pit_tar<1 && rol_now*rol_now<100 && pit_now*pit_now<100 && throttle>300){                        //防止角度大了,积分超调//目标姿态角水平,姿态角几乎水平,油门值不太低PID_ROL.iout += PID_ROL.I * rol;PID_PIT.iout += PID_PIT.I * pit;PID_ROL.iout = Get_MxMi(PID_ROL.iout,PID_ROL.IMAX,-PID_ROL.IMAX);                //对输出的积分限幅PID_PIT.iout = Get_MxMi(PID_PIT.iout,PID_PIT.IMAX,-PID_PIT.IMAX);}else if(throttle<200){                        //油门值较小时,积分项清零PID_ROL.iout = 0;PID_PIT.iout = 0;}
//、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、        //        rc_roll_d = rol_tar - getlast_roll;
//        getlast_roll = rol_tar;
//        PID_ROL.dout = PID_ROL.D * (MPU6050_GYRO_LAST.X+rc_roll_d*300);//角速度+控制误差微分
//        
//        rc_pitch_d = pit_tar - getlast_pitch;
//        getlast_pitch = pit_tar;
//        PID_PIT.dout = PID_PIT.D * (MPU6050_GYRO_LAST.Y+rc_pitch_d*300);//角速度+控制误差微分PID_ROL.dout = PID_ROL.D * MPU6050_GYRO_LAST.X;               PID_PIT.dout = PID_PIT.D * MPU6050_GYRO_LAST.Y;
/PID_YAW.pout = PID_YAW.P * yaw;//若 *yaw_now;锁尾模式!!!!//若 *yaw;  非锁尾模式!!!!
/vs16 yaw_d;/if(1480>Rc_Get.YAW || Rc_Get.YAW>1520)        //给遥控加死区(偏航角的死区){yaw_d = MPU6050_GYRO_LAST.Z + (Rc_Get.YAW-1500)*10;        //用Z轴角速度及目标偏航角值进行四轴运动的预判GYRO_I.Z = 0;}elseyaw_d =  MPU6050_GYRO_LAST.Z;PID_YAW.dout = PID_YAW.D * yaw_d;
/        PID_ROL.OUT = PID_ROL.pout + PID_ROL.iout + PID_ROL.dout;PID_PIT.OUT = PID_PIT.pout + PID_PIT.iout + PID_PIT.dout;PID_YAW.OUT = PID_YAW.pout + PID_YAW.iout + PID_YAW.dout;if(throttle>200)        //油门值大于200才起飞        (遥控油门值大于1200){               
//                moto1 = throttle  - PID_ROL.OUT - PID_PIT.OUT + PID_YAW.OUT;
//                moto2 = throttle  - PID_ROL.OUT + PID_PIT.OUT - PID_YAW.OUT;
//                moto3 = throttle  + PID_ROL.OUT - PID_PIT.OUT - PID_YAW.OUT;
//                moto4 = throttle  + PID_ROL.OUT + PID_PIT.OUT + PID_YAW.OUT;//                moto4 = throttle  - PID_ROL.OUT - PID_PIT.OUT + PID_YAW.OUT;
//                moto3 = throttle  - PID_ROL.OUT + PID_PIT.OUT - PID_YAW.OUT;
//                moto2 = throttle  + PID_ROL.OUT - PID_PIT.OUT - PID_YAW.OUT;
//                moto1 = throttle  + PID_ROL.OUT + PID_PIT.OUT + PID_YAW.OUT;               //                moto1 = throttle -  25 + QH + ZY - XZ - PID_ROL.OUT - PID_PIT.OUT + PID_YAW.OUT;
//                moto2 = throttle -  25 + QH - ZY + XZ - PID_ROL.OUT + PID_PIT.OUT - PID_YAW.OUT;
//                moto3 = throttle -  25 - QH + ZY + XZ + PID_ROL.OUT - PID_PIT.OUT - PID_YAW.OUT;
//                moto4 = throttle +  75 - QH - ZY - XZ + PID_ROL.OUT + PID_PIT.OUT + PID_YAW.OUT;moto4 = throttle + QH + ZY - XZ - PID_ROL.OUT - PID_PIT.OUT + PID_YAW.OUT;moto3 = throttle + QH - ZY + XZ - PID_ROL.OUT + PID_PIT.OUT - PID_YAW.OUT;moto2 = throttle - QH + ZY + XZ + PID_ROL.OUT - PID_PIT.OUT - PID_YAW.OUT;moto1 = throttle - QH - ZY - XZ + PID_ROL.OUT + PID_PIT.OUT + PID_YAW.OUT;//                moto1 = throttle;
//                moto2 = throttle;
//                moto3 = throttle;
//                moto4 = throttle;}else{moto1 = 0;moto2 = 0;moto3 = 0;moto4 = 0;}//                moto[1] = moto1 & 0xFF;
//          moto[0] = (moto1>>8) & 0xFF;
//                moto[3] = moto2 & 0xFF;
//          moto[2] = (moto2>>8) & 0xFF;
//                moto[5] = moto3 & 0xFF;
//          moto[4] = (moto3>>8) & 0xFF;
//                moto[7] = moto4 & 0xFF;
//          moto[6] = (moto4>>8) & 0xFF;        //Uart1_Send_Buf(moto,8);               if(ARMED)        Moto_PwmRflash(moto1,moto2,moto3,moto4);        //未解锁则空心杯不转        ARMED=1则解锁else                        Moto_PwmRflash(0,0,0,0);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/906576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 3 与 Vue 2 的区别详解

Vue 3 在性能、语法、响应式、类型系统等方面相比 Vue 2 做了大幅优化和改进。本篇将从多个维度详细对比 Vue 3 与 Vue 2 的核心区别。 &#x1f4cc; 核心对比表格 对比维度Vue 2Vue 3说明核心 API 模式Options APIComposition API&#xff08;兼容 Options&#xff09;Vue 3…

深入理解 Redisson 看门狗机制:保障分布式锁自动续期

在分布式系统的开发中&#xff0c;分布式锁是解决资源竞争、数据一致性问题的关键手段。Redisson 作为一个在 Java 领域广泛使用的 Redis 客户端框架&#xff0c;为我们提供了功能强大且易用的分布式锁实现。其中&#xff0c;看门狗&#xff08;watchDog&#xff09;机制更是 R…

配置gem5环境:Dockerfile使用

下载ZIP文件 到dockerfile所在目录下&#xff1a; 运行以下命令 注意不要忘记最后的标点 . docker build -t gem5bootcamp .在 Dockerfile 所在目录下执行 docker build 时&#xff0c;Docker 会按照 Dockerfile 中的指令&#xff0c;自动下载和构建所需的一切。不过这过程里…

角度回归——八参数检测四边形Gliding Vertex

文章目录 一、介绍&#xff08;一&#xff09;五参数检测方法&#xff08; 基于角度&#xff09;&#xff08;二&#xff09;八参数检测方法&#xff08;point-based&#xff09;的边界 二、方案分析&#xff08;一&#xff09;问题定义&#xff08;二&#xff09;方案&#xf…

鸿蒙系统电脑:开启智能办公新时代

鸿蒙系统电脑&#xff1a;开启智能办公新时代 引言 2025 年 5 月 8 日&#xff0c;华为正式推出了鸿蒙系统电脑&#xff0c;这款具有里程碑意义的产品&#xff0c;不仅彰显了华为在智能设备领域的创新实力&#xff0c;也为用户带来了全新的智能办公体验。在数字化转型加速的背…

计量单片机 RN8302:特性、使用与应用

在现代电力监测与能源管理领域&#xff0c;精确的电能计量至关重要。计量单片机 RN8302 作为一款高性能的电能计量芯片&#xff0c;凭借其卓越的特性与功能&#xff0c;在众多应用场景中发挥着关键作用。本文将全面深入地介绍 RN8302 的各项特性、使用方法、注意事项以及广泛的…

Flink 的窗口机制

&#x1fa9f; 1. 基于时间驱动的滚动时间窗口&#xff08;Tumbling Time Window - Time-based&#xff09; ✅ 定义&#xff1a; 每隔固定的时间周期开启一个新的窗口。窗口之间不重叠。 &#x1f552; 示例&#xff1a; DataStream<Tuple2<String, Integer>>…

【RA-Eco-RA2L1-48PIN】ADC 电压表与OLED显示

【RA-Eco-RA2L1-48PIN】ADC 电压表与OLED显示 本文介绍了 RA-Eco-RA2L1-48PIN 开发板通过瑞萨 e2 Studio 灵活软件包&#xff08;FSP&#xff09;编程实现 ADC 串口采集电压和OLED显示电压数值的项目设计&#xff0c;包括串口电压值串口打印、硬件 IIC 通信协议配置、 OLED显示…

GraphQL在.NET 8中的全面实践指南

一、GraphQL与.NET 8概述 GraphQL是一种由Facebook开发的API查询语言&#xff0c;它提供了一种更高效、更灵活的替代REST的方案。与REST不同&#xff0c;GraphQL允许客户端精确指定需要的数据结构和字段&#xff0c;避免了"过度获取"或"不足获取"的问题。…

Elasticsearch 写入性能优化有哪些常见手段?

Elasticsearch 写入性能优化常见手段主要有以下 10 个方向&#xff0c;建议根据具体业务场景组合使用&#xff1a; 批量写入优化 使用_bulk API 批量提交文档建议每批次 5-15MB 数据量并发执行多个批量请求 索引配置调优 PUT /my_index {"settings": {"inde…

【图像大模型】基于深度对抗网络的图像超分辨率重建技术ESRGAN深度解析

基于深度对抗网络的图像超分辨率重建技术ESRGAN深度解析 一、技术背景与核心创新1.1 图像超分辨率技术演进1.2 核心技术创新对比 二、算法原理深度解析2.1 网络架构设计2.1.1 RRDB模块结构 2.2 损失函数设计2.2.1 对抗损失&#xff08;Adversarial Loss&#xff09;2.2.2 感知损…

第八天 搭建车辆状态监控平台(Docker+Kubernetes) OTA升级服务开发(差分升级、回滚机制)

前言 在智能网联汽车快速发展的今天&#xff0c;车辆状态监控和OTA&#xff08;Over-The-Air&#xff09;升级已成为智能汽车的核心能力。本文将手把手带你从零开始搭建基于云原生技术的车辆状态监控平台&#xff0c;并开发完整的OTA升级服务系统。无论你是刚接触容器技术的开…

五分钟学会如何封装Jsckson工具类

前言&#xff1a;在 Java 开发中&#xff0c;JSON 是一种非常常见的数据格式&#xff0c;而 Jackson 是处理 JSON 的主流库之一&#xff0c;为了提高代码的复用性、可维护性&#xff0c;我们通常会将 Jackson 的操作封装成一个工具类&#xff0c;简化使用。 ✨✨✨这里是秋刀鱼…

InternLM 论文分类微调实践(XTuner 版)

1.环境安装 我创建开发机选择镜像为Cuda12.2-conda&#xff0c;选择GPU为100%A100的资源配置 Conda 管理环境 conda create -n xtuner_101 python3.10 -y conda activate xtuner_101 pip install torch2.4.0cu121 torchvision torchaudio --extra-index-url https://downloa…

软考中级软件设计师——设计模式篇

一、设计模式核心分类 设计模式分为 3 大类&#xff0c;共 23 种模式&#xff08;考试常考约 10-15 种&#xff09;&#xff1a; 分类核心模式考试重点创建型模式工厂方法、抽象工厂、单例、生成器、原型单例模式的实现&#xff08;懒汉、饿汉&#xff09;、工厂模式的应用场…

小米2025年校招笔试真题手撕(一)

一、题目 小A每天都要吃a,b两种面包各一个。而他有n个不同的面包机&#xff0c;不同面包机制作面包的时间各不相同。第i台面包机制作a面包 需要花费ai的时间&#xff0c;制作b面包则需要花费bi的时间。 为能尽快吃到这两种面包&#xff0c;小A可以选择两个不同的面包机x&…

【微信小程序 + 高德地图API 】键入关键字搜索地址,获取经纬度等

前言 又到熟悉的前言&#xff0c;接到个需求&#xff0c;要引入高德地图api&#xff0c;我就记录一下&#xff0c;要是有帮助记得点赞、收藏、关注&#x1f601;。 后续有时间会慢慢完善一些文章&#xff1a;&#xff08;画饼时间&#xff09; map组件自定义气泡、mark标记点…

uni-app(2):页面

1 页面简介 uni-app项目中&#xff0c;一个页面就是一个符合Vue SFC规范的 vue 文件。 在 uni-app js 引擎版中&#xff0c;后缀名是.vue文件或.nvue文件。 这些页面均全平台支持&#xff0c;差异在于当 uni-app 发行到App平台时&#xff0c;.vue文件会使用webview进行渲染&…

Axure实战:智慧水务管理系统原型设计速览

本原型通过Axure构建覆盖生产到服务的全流程交互模型&#xff0c;聚焦"数据驱动智能决策"核心价值&#xff0c;助力水务企业实现管理效率提升与运营成本优化。 系统采用"13N"架构&#xff1a; 1个统一入口&#xff1a;集成单点登录与角色动态权限&#xff…

十二、Linux实现截屏小工具

系列文章目录 本系列文章记录在Linux操作系统下&#xff0c;如何在不依赖QT、GTK等开源GUI库的情况下&#xff0c;基于x11窗口系统&#xff08;xlib&#xff09;图形界面应用程序开发。之所以使用x11进行窗口开发&#xff0c;是在开发一个基于duilib跨平台的界面库项目&#x…