教你从小明给水桶加水的例子弄懂PID

2019/8/20 1:06:25 人评论 次浏览 分类:过程控制  文章地址:/tech/2683.html

PID的重要性应该不需多说,在自动控制领域的应用很广泛。Jason通过记录小明给水桶加水的过程展示经典PID算法过程,以举例子的形式给新手理解PID提供多一种思路。

Jason希望通过鲜活的例子解释以下五个概念:

1、简单描述何为PID, 为何需要PID,PID 能达到什么作用
2、理解P(比例环节)作用:基础比例环节
缺点: 产生稳态误差。
疑问: 何为稳态误差 为什么会产生稳态误差。
3、理解I(积分环节)作用:消除稳态误差。
缺点: 增加超调
疑问: 积分为何能消除稳态误差?
4、理解D(微分环节)作用:加大惯性响应速度,减弱超调趋势
疑问: 为何能减弱超调
5、理解各个比例系数的作用
PID控制中各个比例系数的作用
下面就开始进入正题。


1、何为PID以及为何需要PID?

以下是PID控制的整体框图,过程描述为:设定一个输出目标,反馈系统传回输出值,如与目标不一致,则存在一个误差,PID根据此误差调整输入值,直至输出达到设定值。
PID控制框图
疑问:那么我们为什么需要PID?比如我控制温度,我不能监控温度值,温度值一到就停止吗?


这里必须要先说下我们的目标,因为我们所有的控制无非就是想输出能够达到我们的设定,即如果我们设定了一个目标温度值,那么我们想要一个什么样的温度变化呢。


比如设定目标温度为30℃,目标无非是希望达到图1的效果:希望其能够快速而且没有抖动的达到30℃。

 PID控制系统输出的响应目标
图1 PID控制系统输出的响应目标
那这样大家应该就明白,如果使用温度一到就停止的办法,当然如果要求不高可能也行,当肯定达不到图1这样的要求,因为温度到了后余温也会让温度继续升高,而且温度自身也会通过空气散热。
总结:我们需要PID的原因无非就是普通控制手段没有办法使输出快速稳定的到达设定值。

如果你仍对此感到疑问,我们就开始用一个常用的例子来具体说明。


2、从小明给水桶加水的例子弄懂PID

在开始前,我们需要将公式搬出:

咋一看,这个公式挺唬人的。其实你只要知道微分和积分的基本定义就可以理解。而且最终我们所有的努力也都是能够理解这个公式,否则再精妙的比喻也无法使你真正的明白和使用。

这里我们将其离散化(如果这步骤有些太快的话,后面再加入对此的解释):


公式中Kp为比例常数,Ki=(Kp×T)/Ti为积分常数,Kd=(Kp×Td)/T为微分常数


以下Jason就通过一个例子具体展示这个方程是如何工作的。

①小明接到一个任务: 有个水桶,需要时刻保持1m的高度,目前水桶里有0.2m的水
那么小明采用P(比例)的方法加水:即每次测量与1m的误差,并加入与误差成比例的水量。比如设Kp=0.5
第一次加水:误差是1-0.2=0.8m,那么加入水量是Kp×0.8=0.4m;
第二次加水,误差是1-0.4 =0.6m,那么加入水量是 Kp×0.6=0.3m;
......

n次加水水桶水位统计表

n次加水水桶水位坐标图
我们发现这太完美了,那么比例环节就能够完美的解决问题了,可是等等,在下这个结论前,我们看小明的新任务


②小明的新任务:有个水桶,但桶底漏了个洞,仍需保持1m的高度,目前水桶里有0.2m的水,但每次加水都会流出0.1m。这个例子就接近我们实际工程的例子了,比如电机摩擦的阻力、损耗。


我们还是来给小明解决问题吧,
方案一仍是使用P(比例控制)U=Kp×e,仍然设Kp=0.5. 则U=0.5×e,L(最终水位)=本次输入U加上上一次水位。
第一次加水:误差是1-0.2=0.8m,那么加入水量是Kp×0.8=0.4m,最终水位时是0.4+0.2-0.1=0.5m。

第二次加水:误差是1-0.5=0.5m,那么加入水量是Kp×0.5=0.25m,最终水位是0.5+0.25-0.1=0.65m
......



我们发现了问题,水位最终在0.8m处稳定了,这个也很好理解,当误差是0.2m时,加水量时0.1,每次加入的刚好等于漏掉的。这里就引入了稳态误差的概念:稳态误差即当系统到达稳态时与目标的误差。

那么我们加大Kp呢,
我们发现误差变小了;

那我们继续增大吧,
我们发现系统开始震荡了。此处使用excel折线图,大家可以调节参数观察变化

结论: 比例控制引入了稳态误差,且无法消除.比例常数增大可以减小稳态误差,但如果太大则引起系统震荡,不稳定。


为了消除稳态误差,方案二:在比例基础上加入积分,使用PI(比例积分控制),
积分控制就是将历史误差全部加起来乘以积分常数。

这个式子什么意思呢,为啥就能消除稳态误差呢?
还是先设Kp=0.5,Ki=0.3(这个值我这里是随意设置的)
第一次加水:误差为0.8,比例部分Kp×0.8=0.4m, 积分部分 Ki×[e(1)]=0.24m,加入水量u为0.4+0.24=0.64m,最终水位0.2+0.64-0.1=0.74m
第二次加水:误差为0.26,比例部分Kp×0.26=0.13m,积分部分Kp×[e(1)+e(2)]=0.318m,加入水量u为0.13+0.318=0.448m。最终水位0.74+0.448-0.1=1.088m
PID控制方式加水水位统计数据表


我们发现,虽然过程曲折,但是最终可以稳定到设定值了。


如果加大Ki呢?
此处使用excel 折线图,大家可以调节参数观察变化

结论:

①只要存在偏差,积分就不停的累计,直到误差为0,积分项不再累加,变成一个常数,可以抵消稳态误差。
大家可以看到表2中系统稳定后,积分项约是0.1。
②引入积分可以消除稳态误差,但会增加超调,且Ki增大,超调量也增大。

为了消除超调,我们引入微分作用。
现在式子变成了:
 
还是先设Kp=0.5,Ki=0.5,Kd=0.3

第一次加水:误差为0.8m,比例部分Kp×0.8=0.4m,积分部分Ki×[e(1)]=0.24m,微分部分=0(因为没加水前水位差就是0.8m,加入水量U为0.4+0.4=0.8m,最终水位0.2+0.8-0.1=0.9m
第二次加水:误差为0.1m,比例部分Kp×0.1=0.5m,积分部分Kp×[e(1)+e(2)]=0.45m,微分部分为Kd×[e(2)-e(1)]=-0.21m,加入水量u为0.5+0.45-0.21=0.29,最终水位0.9+0.29-0.1=1.09m


 PID控制方式加水水位坐标图
我们发现对比上面那张Kp=0.5,Ki=0.5 的图,这张图的震荡减轻了,这正是微分发生了作用,


大家可以看到表3中当第2次误差为0.1时,上一次误差为0.8时,微分是一个负数,阻止结果快速的变化。

结论: 微分能够减弱超调趋势。

可是,这个波形还是在震荡啊,是的,别忘了,这个值是我随手设置的,我们不能指望我们随便设一个值就能使PID完美的工作起来,如果你自己用excel模拟一下你就会发现,如果Ki,Kd设置大些,这个系统会大幅度震荡起来。


因此我们就需要对Kp,Ki,Kd整定,其实就是试怎么使输出达到图1的要求。当然这个例子其实使用PI就可以了,我们这里是为了理解其作用的原理。

共有访客发表了评论 网友评论

  客户姓名:
邮箱或QQ:
验证码: 看不清楚?