單片機設計_四軸飛行器(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
繁體地址,請注明出處:http://hk.pswp.cn/news/906576.shtml
英文地址,請注明出處:http://en.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…