gd32f303 设计中断优先级_浅谈飞控的软件设计

本文深入探讨了飞控软件的设计,尤其是中断优先级在GD32F303上的配置。文章指出,前后台操作方式在实现简单性和系统稳定性上的优势,但也存在实时性不足的问题,可能导致飞行器控制失灵。作者对比了带OS和裸机方案,并分析了不同设计方法的优缺点。此外,文章还讨论了飞控软件的更新周期、任务优先级和状态机设计,强调了实时性、延迟和控制回路频率对系统性能的影响。
摘要由CSDN通过智能技术生成

写在前面

开这个专栏的目的主要是深感自己对飞控软件、算法的知识点过于杂乱,很久没有进行系统的总结了,因此决定写几篇文章记录一些飞控开发过程的知识点。主要是针对一些软件、算法部分进行讨论,如内容有错误,欢迎指出。


2019.03.02更新

距离专栏的第一篇文章已经快2年半了,最近在回看文章的时候,发现有些地方写得不尽如人意,或亦是之前的技术水平不足,导致对一些问题的理解不深刻。由此,萌生了将已有文章进行更新的想法,同时也不忘初衷,自己能同时回顾一些知识,毕竟年纪大,工作中不常使用便会遗忘。

1 飞控软件的基本模块

无人机能够飞行主要是依靠传感器系统获取位姿信息并反馈到微处理器进行控制系统的运算。所以飞控软件设计主要负责搭建合理软件流程,使各功能模块协调有效的工作。

一个飞控系统的基本工作主要有:

1、CPU接收遥控器的操作指令和传感器信号;

2、传感器的数据处理和数据融合算法运算,得到位置、姿态信息;

3、根据控制指令完成相应的控制器(姿态、位置)计算,得出控制量并输出到电机驱动;

2 软件设计方法的讨论

刚接触飞控的时候,实验室在设计之初,为了方便快捷,软件系统的编写采用前后台操作的方式。这个方式的应用程序是在放在mian主函数里面无限循环,调用相应的处理子函数。这称为后台程序。而前台程序指的就是中断程序处理异步触发事件的程序。故前台程序称为中断级程序,而后台程序称为任务级程序。因此有些固定周期执行的任务都要靠中断服务程序来完成,以保证时间的精确性。但是在中断处理程序中只标记事件的发生,不做任何处理,转而由后台系统调度处理,这是为了避免在中断程序执行时间过长影响后续和其他中断事件。

这种设计方法的优点:

1、实现简单,特别是对于笔者这样的编程渣,照着stm32的库函数写代码,也可简单实现;

2、类似单片机的编程,没有OS,因此对CPU的性能要求不算高,不太关注ROM/RAM;

3、如果设计得当,相较于带OS的飞控,系统运行更加稳定,听说很多工业级的飞控是不带OS的;

缺点:

由于是用在飞行控制系统中,对整个系统的实时性有着很高的要求,如果逻辑和时序出现偏差,将出现无法估计的严重后果。而在初始开发过程中,发现采用此前后台系统带来两大问题:

1、设计不当的话,比如某个周期的函数执行超时,后面所有的程序都会受到影响。如果飞控程序执行时间变得不够准确,不利于对飞行器的控制,严重时发生飞机失控的现象。

2、移植性和扩展性差,给整个程序后续改动和维护带来不便,由于各种任务都是相关的子函数,往往一个任务需要调用多个子函数。在程序改动或者维护的时候变得非常繁琐复杂。经常由于忽略某一细节而导致功能无法实现,最后导致程序的可读性降低,不利于他人做程序修改。

最近几年也接触了一些开源飞控,看了有关带OS的飞控设计。这种设计方法是在某一操作系统上进行二次开发,OS通过一个内核的调度来管理CPU,使得所有的模块也就是任务都能正常运行,达到相对意义的“并行”。同时采用基于优先级的可剥夺性调度算法来保证实时性。RTOS 将应用层软件分成多个任务,简化了应用软件的设计,同时使得飞行控制的实时性得到保证。

个人偏好,其实比较喜欢裸机的方案。飞控其实说到底不是一个软件功能特别复杂的产品&#

今天本来也没做好起飞的准备,不过感觉老是在屋里调有些东西是观察不到的,因此就冒险去户外飞了一下。果然。。。。。。坠机了,原因是其中一个非自紧螺旋桨的螺丝松了,稍后上图,之前也松过一次,没处理好,这次得到教训了。这一摔就是400块钱没了,维修也得1到2个星期。 目前的功能: 1.开启传感器低通滤波98Hz,滤掉电机震动对加速度计和陀螺仪的影响。 2.磁力计现场校准,代码直接完成,不需要PC干预。换个地方飞不用再带个电脑做校准了。 3.陀螺仪零偏自校准 4.加速度计零偏和灵敏度校准 4.代码时间片管理,姿态融合500Hz,PID控制200Hz 5.位置式PID控制,控制参数采用kp,Ti,Td,从今天飞行状况来看,此功能日后需大力改进 6.固定航向模式。日后加入可控航向。 7.串口在线调试,支持在线参数保存和读取,采用GD32F103内部Flash来保存参数,不用外扩存储芯片,也方便调试PID参数和磁力计校准。 8.飞行模式:x模式 自己设计飞控板第二版,兼容F10x/F2xx/F4xx系列MCU,正面:外扩4个PWMin外接遥控接收机,4个PWMout外接motor,4个PWM备用,1个DCMI摄像头接口,1个USART1接蓝牙模块,1个SPI可接SPI nand。外接TF卡用于存储视频 整机:两个白色轴中间是机头,右边白色轴上是之前做的蓝牙模块,整机标配:450机架,980kv电机,好盈20A电调,11.1V-3S动力电池,7通道接收机,锂电池低压报警器,桨1047 PID分两种位置式和增量式,我采用的是位置式,将Ki和Kd用Ti和Td的形式来表达,并带入到式2-3中,ek=角度的期望-传感器输出的角度,所用的PID三个参数是:Kp、Ti、Td。 公式如图所示: 四轴PID控制的目的就是将接收到的遥控的控制信号(一般有油门THR、升降舵ELE(对应pitch)、副翼Ail(对应roll)、方向舵RUD(对应yaw))与飞控板本身计算得出pitch、roll、yaw做比较,分别得出它们之间的误差值,然后将Kp、Ti、Td与这个误差值结合得出PID输出(PID_pitch、PID_roll或者PID_yaw),再将这三个PID输出与油门结合在一起算出送到每一个电调的PWM数值,从而控制每一个电机的转动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值