多文本注意。。其实就是我那个飞控是怎么写的

底层驱动应用

嵌入式软件平台建立在我系物联网实验室搭建的底层驱动平台之上,该平台用C++对STM32F103C8T6底层驱动进行了较为完善的封装,能够让使用者更专心于编辑逻辑层的代码。该平台我也是参与编写者之一,将其移植到飞控里,使用了一下几种外设:ADC,主要用于监控电池电量,对于飞行器来说,电源不足就意味着控制失灵、飞机坠毁,所以对其进行实时监控是非常重要的。当然对于SMT32来说不能直接将电池电压输入到ADC引脚,需要进行简单的电阻分压。在程序中还需要对采集的值进行简单的均值滤波,使其输出的数据更为可靠。IIC,主要使用它来读取磁力计、加速度计、陀螺仪的值,使用的是硬件IIC,姿态获取是相当重要的,也就是在程序中需要将IIC的优先级设置为最高,因为有严格顺序不允许如果被其他程序打断。PWM,同样是使用了硬件PWM,让芯片定时器来进行控制,用于驱动空心杯电机。USART,使用了两个串口,一个用于研究时的调试,另一个用于将需要发送的数据通过wifi模块发送给其他设备,并且实时监控其他设备发来的各种信息。GPIO,引脚控制主要是管理LED指示灯。Flash操作是为了将调价好的PID值、校准值进行保存,方便第二次开机时能够直接运行。Clock,系统滴答时钟,我将其用作了整个程序的系统时钟,任务的开始时间也就是根据该时钟进行的判断。以上便是SMT32F103c8t6的使用设计。
驱动设计主要是针对姿态检测传感器、电机、和通讯模块。我使用的姿态检测传感器包含陀螺仪、加速度计和磁力计三个部分。他们都是搭载在IIC总线上的,加速度计和陀螺仪是通过一个芯片集成,实际驱动文件只需要编写两个,输入参数均为芯片的IIC,输出为三轴加速度、三轴角速度、三轴磁场强度。并且传感器都需要校正。加速度和角速度可通过读取一定时间的数据做均值来得到零偏,但磁力计就需要做环绕运动来找到各个方向的最大最小值,进行一定的算法得到校验值。电机驱动仅需要PWM控制即可,PWM的占空比即是电机的转速,PWM的频率可设定为24000.至于通信模块的驱动就无需编写,主要是依靠对改款芯片的单独配置来到达虚拟透传,即对底层来说无需知道如何发送,只需要向其扔数据即可。

任务逻辑

微型四轴飞行器的嵌入式软件不使用操作系统,主要原因在于较高的实时 性要求和较大的运算量。在无操作系统下能够更好的进行程序运行定位和算法修改。代码均使用C++编写,利用其出色的封装性,区分开各个功能模块。系统由5大职能如图。每个功能都分配有固定的执行周期。姿态数据更新每8ms执行一次,该部分主要利用传感器获取的9轴数据,通过姿态解算算法进行融合处理后得到欧拉角。控制的执行周期和姿态更新相同,也就是在姿态更新获取到了新的欧拉角之后便利用当前姿态和上一次获取到的遥控器数据经过PID算法对四个电机输出控制信号。发送数据这项任务和飞行控制不相关,主要是给使用者提供参考数据,于是可以放大其执行周期,为其他紧急任务挪出空间。这里我将发送周期定为100ms一次,过快的数据更新并没有什么意义。发送主要是提供给上位机或者遥控器姿态角、传感器原始数据、油门量、当前PID值等配置信息。接收数据就和发送数据不一样了,他需要接收遥控器发送来的数据,该控制数据会直接影响电机的控制量,执行周期过慢会导致飞行控制的滞后。我将执行周期定位20ms,该周期需要配合遥控器的发送频率进行调整,理想情况下是越快越好,但是需要考虑不影响最重要的姿态解算部分,速率也就不能高于它。接收还包含接收上位机发送来的有些命令,例如陀螺仪校准、磁力计校准、PID数据更新等。 提示是优先级最低的功能,其主要目的是对一个状态进行闪灯提示,让使用者明白的当前情况。我设定为0.5s执行一次,主要进行微四轴飞行器上锁解锁提示、电量过低提示、初始化设置提示、校准提示、PID更新提示等。

微型四轴飞行器(3)嵌入式软件设计相关推荐

  1. 微型四轴飞行器(4)通讯设计

    通讯方式选择 如今的四轴飞行器上使用的无线通信模块有5种大类,WIFI.蓝牙.2.4G模块.433M模块.868M模块.Wifi和2.4G其实都是一个频段,但是wifi是经过了协议封装的结果,而后者模 ...

  2. 一群微型四轴飞行器怎么玩

    一群微型四轴飞行器怎么玩 http://v.youku.com/v_show/id_XMzQ5OTA0Nzcy.html?from=y1.2-1-98.4.8-1.12-1-2-7

  3. 深入解读四轴飞行器的硬件设计

     转载自:http://www.openedv.com/posts/list/20892.htm 传感器之一:角速度传感器应用科里奥利力原理:科里奥利力来自于物体运动所具有的惯性,在旋转体系中进行 ...

  4. 微型四轴飞行器(7)串级PID控制器

    PID控制器是通过目标与当前状态的误差,然后利用比例.积分.微分三个计算公式计算出控制量来进行自动控制的系统[8].自动控制有三大要求:稳定性,快速性,准确性.稳定性是当系统受到来自外界的干扰时能够恢 ...

  5. 基于STM32的开源微型四轴飞行器

    [匿名开源微型四轴] 电机直径        7mm 高20mm 轴径1mm 传感器           MPU6050 3轴加速度 3轴陀螺仪 主控MCU      STM32F103 72M 调试 ...

  6. 微型四轴飞行器(5)九轴姿态融合算法A

    1 概述 所谓的九轴姿态融合就是将通过传感器获得的3轴加速度.3轴角速度.3轴磁场数据,在相应的算法处理后能够得到飞行器的姿态信息(欧拉角).输入输出如下图 在惯性导航领域的欧拉角分别表示的是航向角( ...

  7. 微型四轴飞行器(5)九轴姿态融合算法B

    方向余弦矩阵 飞行器在空中的运行姿态可以用平面和转动来表示,为了方便使用向量表示,需要建立两个空间直角坐标系.设R表示单位矢量在机体坐标系下的三个轴的投影,B表示单位矢量在地球坐标系下的三个轴的投影. ...

  8. 《DIY四轴飞行器》读书笔记1

    内容整理于黄和悦的<DIY四轴飞行器>. 一.四轴飞行器概述 1.四轴飞行器的现状 (1)研究内容 多级协作,自主飞行倾斜: 最优控制理论,飞行器自主飞行和避障: 主要是飞控部分. (2) ...

  9. 第1讲、Cadence Allergo绘制小马哥DragonFly四轴飞行器PCB四层板教程简介

    初学者在学习单片机的时候大多都没有很明确的学习目的,所以往往学了很多课程之后,还是不能独立开发一个比较简单的项目,甚至不能完成一个简单项目的单独软件或者硬件部分的开发.这是因为大多数人是被动的.没有目 ...

  10. 一起DIY四轴飞行器(一)项目简介

    前言 前段时间看到一篇博客,利用开源的飞控,自己DIY的四轴飞行器,内心就开始躁动,想自己也DIY一架四轴飞行器.本系列博客,记录业余时间DIY的过程,个人能力有限,中间肯定会遇到很多困难,希望能坚持 ...

最新文章

  1. CTO 说了,如果发现谁用 kill -9 关闭程序就开除
  2. python【数据结构与算法】战争之城(分支限界法)
  3. mix2线刷开发板救砖_小米Mix 2(安卓8.0)一键救砖教程,轻松刷回官方系统
  4. 大数据,TB、PB、EB
  5. etl 不能转换成date_java怎么将date类型转换成datetime类型
  6. C++ Error C2664:无法将参数 1 从“const char [9]”转换为“LPCWSTR”解决方案
  7. 未来Linux系统将是运维行业必备的技能之一
  8. mvc 生成输出url
  9. 机器学习面试题目整理
  10. centos 网卡状态
  11. 相等变为1 编号_量子力学中的线性代数(Qiskit 学习笔记之1)
  12. DirectSOFT(光洋PLC编程软件)v6.3官方版
  13. Ubuntu安装NVDIA显卡驱动,CUDA及cuDNN
  14. 笔记本辐射与日常电器辐射对比
  15. Halcon实战之MLP颜色匹配(一)
  16. 你知道了区块链,现在该了解DCEP央行数字货币了
  17. PS_一寸照片换背景底色
  18. Quasi-Dense Similarity Learning for Multiple Object Tracking
  19. 交通违章查询接口代码示例
  20. 4G远程智能巡检摄像机解决方案对比

热门文章

  1. linux加载scsi硬盘驱动程序使用,linux scsi硬盘的安装
  2. stm32Cubemx USB虚拟串口
  3. 方程求全微分结果和法向量、切向量的关系
  4. c#制作仿win7屏幕键盘之笔记
  5. 爬取淘宝买家秀,sign值的生成
  6. ab st语言编程手册_AB-PLC自学笔记
  7. 【重要】股票收益互换
  8. 使用 Vue.js 全家桶开发的高颜值第三方网易云播放器
  9. i7-10750H和i7-8750H 对比哪个好
  10. HaaS506-HD1本地更新固件教程