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

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

底层驱动应用

嵌入式软件平台建立在我系物联网实验室搭建的底层驱动平台之上,该平台用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更新提示等。
这里写图片描述

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值