微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 四轴飞行器的设计之PID算法概述-STC15单片机实战指南连载

四轴飞行器的设计之PID算法概述-STC15单片机实战指南连载

时间:10-02 整理:3721RD 点击:
考虑到我的四轴飞行器正在众筹(众筹已经结束),估摸大家对这个更感兴趣,那就先来分享四轴飞行器的案例吧,基础内容后面连载。
先来讲一个故事:

杨过走了一会神,再伸手去会第二柄剑,只提起数尺,呛一声,竟然脱手掉下,在石上一碰,火花四溅,不禁吓了一跳。原来那剑黑黝黝的毫无异状,却是沉重之极,三尺多长的一把剑,重量竟自不下七八十斤,比之战阵上最沉重的金刀大戟尤重数倍。杨过提起时如何想得到,出乎不意的手上一沉,便拿捏不住。于是再俯身会起,这次有了防备,会起七八十斤的重物自是不当一回事。看剑下的石刻时,见两行小字道:“重剑无锋,大巧不工。四十岁前恃之横行天下。”过了良久,才放下重剑,去取第三柄剑,这一次又上了个当。他知道这剑定然犹重前剑,因此提剑时力运左臂。那知拿在手,却轻飘飘的浑似无物,凝神一看,原来是柄木剑,年深日久,剑身剑柄均已腐朽,但见剑下的石刻道:“四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进于无剑胜有剑之境。”

金庸笔下的一代大侠杨过,为什么会发生连续两次拿剑失误呢?原因很简单,因为他没有学过自动调节系统啊!可见自动调节系统存在于生活的方方面面,何其平常,又何其重要!吹下牛皮吧!

下面咱们就来说说自动调节系统到底是怎么回事,到底是谁先发现,到底该怎么应用吧。自动调节系统说复杂其实也很简单。其实每个人从生下来以后,就逐渐地从感性上掌握了自动调节系统。

比方说桌子上放个物体,样子像块金属,巴掌大小。你心里会觉得这个物体比较重,就用较大力量去拿,可是这个东西其实是海绵做的,外观被加工成了金属的样子。手一下子“拿空了”,打住了鼻子。这是怎么回事?比例作用太强了。导致你的大脑发出指令,让你的手输出较大的力矩,导致“过调”。

还是那个桌子,还放着一块相同样子的东西,这一次你会用较小的力量去拿。可是东西纹丝不动。怎么回事?原来这个东西确确实实是钢铁做的。刚才你调整小了比例,导致比例作用过弱,从而导致你的大脑发出指令,命令你的手输出较小的力矩,导致“欠调”。

还是那个桌子,第三块东西样子跟前两块相同,这一次你一定会小心点了,开始力量比较小,感觉物体比较沉重了,再逐渐增加力量,最终顺利拿起这个东西。为什么顺利了呢?因为这时候你不仅使用了比例作用,还使用了积分作用,根据你使用的力量和物体重量之间的偏差,逐渐增加手的输出力量,直到拿起物品以后,你增加力量的趋势才得以停止。这三个物品被拿起来的过程,就是一个很好的整定自动调节系统参数的过程。

前面咱们说的杨过拿剑也是一个道理。当他去拿第一柄剑的时候,心里已经预设了比例带,可惜比例带有点大了,用的力量不够,所以没有拿起来。他第二次拿重剑,增强了比例作用,很容易就拿起来重剑。可是当他拿第三柄剑的时候,没有根据被调节对象的情况进行修改,比例作用还是很大,可是被调量已经很轻了,所以“力道”用过头了。

同样的道理,在调节的四轴的时候,也是需要比例、微积分同时作用,否则四轴要嘛飞行不稳,要嘛直接坠机,因此在讲述四轴之前,我们先为大家简单介绍一下PID算法,对PID算法有个大概的认识,只有这样,在学习四轴的时候,才会得心应手。


PID算法介绍
当今的自动控制技术都是基于反馈的概念。反馈理论的三要素包括:测量、比较和执行,测量关心的变量,与期望值相比较,用这个误差纠正调节控制系统的响应。
PID算法概述
在讲述四轴飞行器内容之前,我觉得让大家有必要先学习一下PID算法,因为四轴的难点就在与算法,可是这部分内容比较泛,又不是太好梳理,我就想到哪里,写到哪里,但争取为大家讲清楚,大家也不必将重点放在一些架构上。
在开始讲述之前,先来认识一下PID,看它具体指什么,或者说P、I、D的具体含义是?
(1)P:Proportion(比例),就是输入偏差乘以一个常数。
(2)I:Integral(积分),就是对输入偏差进行积分运算。
(3)D: Derivative(微分),当然是对输入偏差进行微分运算了。
同时,这里为大家补充一个公式,公式很简单,能理解就好。
输入偏差 = 被调量 - 设定值(有时候也用:设定值-被调量,依个人习惯而定)。
自动控制系统一般分为:开环控制系统和闭环控制系统。
(1)开环控制系统(open-loop control system)是指控制对象的输出(被控制量)对控制器(controller)的输入没有影响,也即系统的输出端与输入端之间不存在反馈。
(2)闭环控制系统(closed-loop control system)是指被控对象的输出(被控制量)会反送回来影响控制器的输入,形成一个或多个闭环。闭环控制系统有正反馈和负反馈,若反馈信号与系统给定值信号相反,则称为负反馈( Negative Feedback),若极性相同,则称为正反馈,一般闭环控制系统均采用负反馈,又称负反馈控制系统。闭环控制系统的例子很多,比如人就是一个具有负反馈的闭环控制系统,眼睛便是传感器,人体系统能通过不断的修正最后做出各种正确的动作。如果没有眼睛,就没有了反馈回路,也就成了一个开环控制系统。再者,上面DIY的空调,就是一个闭环控制系统,借助温度传感器将环境温度实时控制在一定范围之内。
PID控制器的参数整定是控制系统设计的核心内容。它是根据被控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。就像《由入门到精通吃透PID》作者老师傅说的一样:在自动专业,水平的高低最直接的衡量办法——会不会投自动,也就是看会不会整定参数。整定参数的方法分:理论计算法和经验试凑法。理论计算法需要大量的计算,对于初学者和类似于笔者这种数学底子薄的人只能望而止步。
接下来看看怎么经验试凑,笔者就抛砖引玉两种,看读者能不能有点感觉。
1.口诀法

参数整定找最佳,从小到大顺序查。先是比例后积分,最后再把微分加。
曲线振荡很频繁,比例度盘要放大。曲线漂浮绕大弯,比例度盘往小扳。
曲线偏离回复慢,积分时间往下降。曲线波动周期长,积分时间再加长。
曲线振荡频率快,先把微分降下来。动差大来波动慢,微分时间应加长。
理想曲线两个波,前高后低四比一。一看二调多分析,调节质量不会低。
2.经验值法

温度T: P=20~60%,T=180~600s,D=3~180s;
压力P: P=30~70%,T=24~180s;
液位L: P=20~80%,T=60~300s;
流量F: P=40~100%,T=6~60s。
有了上面大致的理论概述,接下来以一个比较通俗的实例来解释PID的模型建立。
/*  版权声明,内容出自以下链接。引用于:http://blog.sina.com.cn/s/blog_498dc96f0100hdfb.html        */
控制模型:你控制一个人让他以PID控制的方式走110步后停下,则模型的建立如下。
(1)P比例控制,就是让他走110步,他按照一定的步伐走到一百零几步(如108步)或110多步(如112步)就停了。说明:比例(P)控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。
(2)PI积分控制,就是他按照一定的步伐走到112步然后回头接着走,走到108步位置时,然后又回头向110步位置走。在110步位置处来回晃荡几次,最后停在110步的位置。
说明:在积分I控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统来说,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。
(3)PD微分控制,就是他按照一定的步伐走到一百零几步后,再慢慢地向110步的位置靠近,如果最后能精确停在110步的位置,就是无静差控制;如果停在110步附近(如109步或111步位置),就是有静差控制。
说明:在微分控制D中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。
自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳,其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入“比例P”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势。这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例P+微分D(PD)控制器能改善系统在调节过程中的动态特性。
PID算法模型的建立过程一直是一个难点,上面走路的例子或许还不够通俗、不够直接,接下来再举个更简单易懂的例子。只有掌握了PID模型的建立过程,才能够熟练应用PID算法。
小明接到这样一个任务:有一个水缸底漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。
小明接到任务后就一直守在水缸旁边,时间长觉得无聊,就跑到房里看小说了,每30分钟来检查一次水面高度。水漏得太快,每次小明来检查时,水都快漏完了,离要求的高度相差很远,小明改为每3分钟来检查一次,结果每次来水都没怎么漏,不需要加水,来得太频繁做的是无用功。几次试验后,确定每10分钟来检查一次。这个检查时间就称为采样周期。
开始小明用瓢加水,水龙头离水缸有十几米的距离,经常要跑好几趟才加够水,于是小明又改为用桶加,一加就是一桶,跑的次数少了,加水的速度也快了,但好几次将缸给加溢出了,不小心弄湿了几次鞋,小明又动脑筋,我不用瓢也不用桶,老子用盆,几次下来,发现刚刚好,不用跑太多次,也不会让水溢出。这个加水工具的大小就称为比例系数。
小明又发现水虽然不会加过量溢出了,有时会高过要求位置比较多,还是有打湿鞋的危险。他又想了个办法,在水缸上装一个漏斗,每次加水不直接倒进水缸,而是倒进漏斗让它慢慢加。这样溢出的问题解决了,但加水的速度又慢了,有时还赶不上漏水的速度。于是他试着变换不同大小口径的漏斗来控制加水的速度,最后终于找到了满意的漏斗。漏斗的时间就称为积分时间。
小明终于喘了一口,但任务的要求突然严了,水位控制的及时性要求大大提高,一旦水位过低,必须立即将水加到要求位置,而且不能高出太多,否则不给工钱。小明又为难了。于是他又开动脑筋,终于想到一个办法,常放一盆备用水在旁边,一发现水位低了,不经过漏斗就是一盆水下去,这样及时性是保证了,但水位有时会高多了。他又在要求水面位置上面一点将水缸凿一孔,再接一根管子到下面的备用桶里这样多出的水会从上面的孔里漏出来。这个水漏出的快慢就称为微分时间。


最后说明下和本文配套的STC15开发板目前正在电子发烧友销售,如果需要请戳这里购买: http://bbs.elecfans.com/product/stc15.html

上学时,课本上能这样讲的话,就用不着分文理科拉,精彩!

是啊,自己做个4翼悬停ying该挺好玩

平哥的讲解总是通俗易懂

厉害厉害,膜拜膜拜,顶顶顶

通俗易懂,厉害

都要发货了才看到这篇文章,还好不晚!

都要发货了才看到这篇文章,还好不晚!

看看。正在学习中,支持下!

看看。正在学习中,支持下!

看看。正在学习中,支持下!

看看。正在学习中,支持下!

谢谢小编分享

总感觉讲得不深,,,

谢谢小编讲解

但是这种简单的pid运算并不能达到非常高的稳定性,没有达到真正的智能化调节pid的对应数值,需要有所改进,与做出来的也愿分享

说的很好   研究研究  

不错不错

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top