四轴PID算法学习之一理解PID控制的理论

前言

PID控制算法在控制领域应用的非常广泛,在四轴飞行器的开发中为了保证姿态稳定在大多数情况下采用的也是PID算法,我在学习四轴之前也接触过PID,但是对它的理解总是不够深刻,因此最近也查了一些资料把自己的理解写下来。

一、什么是PID

简单来说,我们为什么要用PID控制呢?因为当我们在做实验或者项目的时候,总会遇到这么一个问题,怎么让单片机控制系统的输出值准确、快速地达到我们期望的值,举个例子,在电烤箱恒温控制实验中,如何通过加热热电偶使烤箱的温度准确的达到我们的期望加热温度?在电机转速控制中,如何通过控制PWM使电机的转速达到我们期望的转速?这时,就需要PID登场了。下图就是PID控制的方框图
PID
抛开PID这部分,对于学过自控的人很容易看出这是个闭环系统,由于存在输出反馈的环节使系统的输出量可以得到控制,但是由于被控对象往往是不变的,所以y(t)的波形也往往存在着很多“缺陷”。我们往往以加入控制器的形式,改变系统的某些性能来使y(t)达到期望的波形。说了这么多,PID的形式是什么样的呢?
公式
结合上面的方框图来看,PID的输入量是设定值与输出值的误差,输出量是被控对象的输入信号。我们要知道PID控制器通常应用在线性系统中(控制力度越大,系统反应越强),或者是非线性系统中局部线性的地方。可想而知,PID的本质就是对误差进行一个数学上的运算,使其能够根据误差曲线的“特征”(如数值大小、斜率等)来产生相应强度的输出来作用于被控对象。这里仍以电机转速控制为例,当转速误差越大时,PID的输入就越大,因此通过PID公式计算后会产生更强的输出(PWM)作用于电机来加快转速。这就是PID控制起到的作用。

二、 PID是怎么控制的

这里,我不打算通过数学计算来说明PID的控制效果,只是说说我对PID的一些个人理解。从PID的数学公式入手,输入是误差e(t),输出是u(t)。那么输出与输入之间又怎样的关系呢?这里Kp 、Ti和Td是我们根据实际系统设定的常数(正的),抛去这些常数只看变量,很容易看出输出量与误差的大小、误差的积分、误差的微分有关。首先,我们只看比例项的变量e(t),e(t)越大,u(t)就越大,e(t)越小,u(t)就越小。我们再只看积分项,由于误差e(t)越大,误差的累计就会越快,导致误差的积分更大,输出u(t)便会越大,反之误差越小,输出会越小。我们再只看微分项,误差的变化率越快,误差的微分 de(t)/dt 也就越大,因而使得输出量u(t)就更大;相反,误差的变化的慢,输出量就会更小。单独分析三个部分之后,在把这三者的作用叠加便是最终PID控制的作用了。
只从公式入手可能对PID还是有很多不懂得地方。下面,我们再结合实例看看PID在控制效果上是怎么体现出来的。我想了很多的例子感觉都不是很形象这里便引用https://blog.csdn.net/qq_25352981/article/details/81007075这篇文章的例子,讲的很形象!

比例控制

刚才分析过了,只看比例项的作用,当误差越大时,输出越大,控制效果也就越强。当误差越小时,输出也就越小,控制效果也就越弱。以水位控制为例,假设有一个水缸,我们每一时刻对水缸进行注水使水位达到我们的期望高度。目标水位是1米,当前水位是0.2米,比例系数我们设定为0.5,比例控制系统的输入量为目标水位与当前水位之差,输出量为下一时刻我们的注水量。根据公式计算:在t=0时,e(t)为0.8m,kp=0.5,因此t=1时刻的注水量为u(t)=0.8*0.5=0.4m;那么在t=1时刻的水位高度由0.2m变成了0.6m,再计算t=2时刻的注水量为(1-0.6)*0.5=0.2m,也就是说在t=2时刻,水位高度变成了0.8m,依次计算在t=3时刻,注水量为0.1m,水位变成0.9m。如此循环往复,最终水位高度会越来越接近目标水位,误差也会越来越小,注水量趋近于0。这就是比例控制的作用了,我们可以看到,误差越大时,注水量也会越大从而使水位更快的靠近目标水位,当误差越小时,注水量也会慢慢减小直至为0。下图是用matlab的仿真结果。
P
这样的效果从刚才的例子中可以大致想象到,但是这里要注意两个问题:
1.最终水位并不会准确到达1m,而是存在一个稳态误差,这是因为在实际系统中,水缸可能会“漏水”,如电机转速控制中,电机转动的同时要克服空气阻力和摩擦阻力;在电烤现恒温控制中,加热的同时还会像外界散热。当“漏水”的量等于注水的量时,水位即使想再继续上升也上不去了,即遇到了一个瓶颈,这时系统便会稳定,这就是稳态误差存在的原因。
2.比例系数因为是人为选取的,过小会使控制速度缓慢,但是太快会产生超调现象,对于上例中如果比例系数变为1.5,那么t=1时刻的注水量为1.2m,则t=1时刻的水位高为1.4m高于目标水位,这时误差为负,下一时刻则要向外倒水。这就形成了超调。水位曲线图如下:
P2peye.com

积分控制

既然只通过比例控制并不能实现无误差跟踪,那要怎样才能在只有误差e(t)作为输入的情况下,把差的那点儿稳态误差弥补上呢。这时候我们大概就能联想到,积分是具有累积效果的,它代表着误差变化曲线与时间轴围成的面积。既然他是随时间累积的,那我们把它乘以一个适当系数再与比例控制的效果相加结果会怎么样呢?
不妨结合刚刚只有比例控制的水位变化曲线想一想,在第一阶段中由于比例控制的效果水位会一直上升,这段期间实际水位始终低于目标水位,因此误差一直为正,误差的累积也会越来越大,我们在乘以一个合适的系数后(这里合适的系数可以理解为一种换算)加到比例控制上更加加快的水位的上升。在第二阶段,水位到达了刚刚稳定时的位置,如果只有比例作用这时水位就不在变化了,但是积分项的存在,之前误差的累积使得注水量的增加超过了“漏水”的量,水位可以继续上升直到目标水位。我们这里看下带有比例积分控制的水位曲线图。
PI
可以看出,现在水位已经可以很好的保持在1m的位置了。从图中可以发现虽然系统没有了稳态误差,即稳态性能得到了提高,但是系统产生了超调。这个超调其实可以理解,因为当我们水位到达目标水位后,由于积分项的作用,误差还会进行累积会使水位继续上升,这时当前的误差为负,但是总体历史上的误差总和仍为正,水位继续上升,直到历史上的误差总和为负时水位便会下降,这样水位会围绕着目标水位震荡几次后才会稳定。从这一现象中我们可以得出两个结论:
1.加入积分项,虽然提高了系统的稳态性能,但是也使系统出现了超调降低了其动态性能,使其调节时间变长。
2.积分项的存在使系统有了滞后的特性,也可以理解为惯性,即水位的变化要考虑到历史上所有的误差数据,这就会导致即便当前的误差为0,也阻止不了水位继续变化,直到历史上的误差累积总和变号才会使水位向相反方向变化。在一定程度上也就拖慢了系统的进程。

微分控制

事实上,对于性能要求不高的系统来说,比例积分控制已经可以解决信号的跟踪问题了。既然由于积分项的存在会使系统产生超调还会减慢系统进程,有没有什么方法让系统更快更平稳呢?不妨加入微分控制试一试,微分项:d(e(t))/dt,在水位控制中由于我们采取的单位时长为1,这里的微分项我们可以理解为e(t)-e(t-1),
假设目标水位是h,t时刻水位是h(t),那么微分项可以用h-h(t)-(h-h(t-1))=h(t-1)-h(t)代替,这个数再乘以一个系数就是微分项起的作用了。我们可以很明显的看出如果水位是上升的那么微分项的值是负的;如果水位时下降的,那么微分项的值是正的。也就是说,微分项的存在增大了系统的阻尼,水位想上升时,微分项会抑制它上升,水位想下降时,微分项会抑制它下降。这样,水位的超调就不会这么大了,使曲线总体上更加平稳,也更快的趋向稳定。下图是加入微分控制后的水位变化曲线。
PID
可以看到此时的曲线既没有了超调,也没有了稳态误差,这就使PID控制的强大作用!那么微分项虽然可以提高系统的阻尼,加快系统平稳,但也使系统更加的敏感,我们可以想象在实际生活中,存在着各种各样的干扰,包括外部的干扰和测量时数据错误的干扰等,这些干扰的存在很容易使微分项产生很大的变化,这就使系统的稳态性能降低了。因此,在实际进行PID参数整定的时候各个参数既不能太小也不能过大,各个参数还要互相弥补,最终使输出曲线达到满意的程度。

三、PID应用

在实际编程过程中,由于单片机处理的是离散数据,因此PID的公式可以表示为如下形式:
离散
主要有两种编程思路,分别为:位置式PID和增量式PID,此处不详细介绍了。
此外,为了减小由积分项而引起超调现象常常还采用积分分离法和抗积分饱和法来改善系统的输出性能。
1.积分分离法:当偏差大于某个规定的门限值时,取消积分作用,从而使积分不至于过大。只有当e(k)较小时,才引入积分作用,以消除静差。这样控制量不易进入饱和区;即使进入了饱和区,也能较快退出,所以能使系统的输出特性得到改善。
2.抗积分饱和法:当控制量进入饱和区后,只执行削弱积分项的累加,而不进行增大积分项的累加。即计算u(k)时,先判断u(k-1)是否超过限制范围,若已超过umax,则只累计负偏差;若小于umin,则只累计正偏差,这种方法也可以避免控制量长期停留在饱和区。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值