误差:error或bias

实际值:actual、current、 measured、observed

比例系数:kp

积分时间常数:Ti

微分时间常数:Td

改变kp会同时改变三个系数,不便调参,令:

Ki = Kp / Ti,Kd = Kp * Td

3个参数更加独立,调节3个参数,分别就是调节每一项(比例项、积分项、微分项)

pid公式:不是自然定律引出的公式(例:牛顿万有引力公式、牛顿三大定律公式) 而是经验公式,设计者根据实际经验,感觉这样算比较好,就这样设计这个公式了(例如和面,水多了加面 面多了加水,这就是生活经验,不需要很深的理论去分析)

一、比例项

1.1 比例项(Kp项、P项)

比例控制是一种最简单的控制方式,其控制器的输出与输入信号误差成比例关系,当仅有比例控制时系统输出存在稳态误差(Steady-state error)。只有比例项的PID输出值如下:

比例调节作用:按比例反应系统的偏差,将输出偏差成比例放大后用作新的输出,直到没有误差后,比例项的输出为0,以达到跟踪到目标值的目的。比例作用大,可以加快调节,减少误差,但是过大的比例,使系统的稳定性下降,甚至造成系统的不稳定。

1.2 比例项的特点

(1)反应迅速,系统一旦出现了偏差,比例调节立即产生相应的调节作用,用以减少偏差。

(2)比例项的输出仅取决于当前时刻的误差,与历史时刻无关——当前时刻存在误差时,比例项输出一个与误差呈正比例的值;当前不存在误差时,比例项输出为0。(比例项最本质的特点就是输出仅取决于当前时刻的误差,与历史时刻无关,这使得比例项具有最快的响应速度

(3)比例系数Kp越大,比例项权重越大,系统响应越快(比例项最大的优点就是响应快,误差一旦变化,比例项输出立刻做出对应的变化以减小误差)。

(4)Kp过小,系统响应过慢,达不到PID算法快速、准确、稳定的要求。

(5)Kp过大,系统响应过快,超调会随之增大,Kp太大甚至会引起系统的自激振荡。

(6)纯比例项控制时,系统一般会存在稳态误差,Kp越大,稳态误差越小。(但是Kp太大,超调会比较严重甚至可能导致系统自激振荡)

1.3 比例系数Kp

极性:PID进行负反馈调节,若加正Kp能使误差减小,则Kp极性为正,若加负Kp能减小误差,则Kp的极性为负。(若error = true - actual,则kp为正,若error = actual - true,则kp为负)

数量级:以电机控速为例,输出值(CCRx)= Kp * 误差 = Kp * (目标值 - 真实值),则Kp的最高数量级确定方法为:最大输出值 = Kp * (最大目标值 - 最小真实值),若有最大输出值(CCRx)为7200,最大目标值(编码速度,与编码读取周期有关,同一个转速用不同的编码周期去测会有不同的编码速度)为100,最小真实值为0,则Kp的数量级为0~100(0~72)。

1.4 纯比例项调节图像

上图4个稳态误差都小于目标值,因为稳态误差的方向是自发偏移方向,自发向下偏移,稳态误差就为向下误差,速度为0时电机不会产生稳态误差 (阻力不起作用)。

1.5 稳态误差

(1)什么是稳态误差

系统进入稳态时,实际值和目标值之间始终存在一个固定的差值。

(2)为什么存在稳态误差?——一句话,因为阻力的存在

通过纯比例项控制公式来看,有误差——>PID就有输出——>有输出,就会减小误差,直到误差为0,似乎最后达到稳态时不会存在误差。

实际上,误差为0时——>比例项输出为0——>PID的输出值是给到PWM设置占空比(提供动力) 驱动力给0——>显然电机无法按照原速旋转(存在阻力)

如果不给持续的驱动力,电机就会自发减速,产生一个越来越大的误差,输出动力逐渐增大直到:kp(动力)*误差 = 阻力,电机不再减速,驱动力不再增大,系统达到稳态。

总结一下这个过程:

假设无稳态误差(无阻力),则电机会一直加速,直到目标值

此时误差为0,比例项输出为0,电机无动力

电机必然由于阻力而减速,产生误差

误差越大,比例项输出越大,电机驱动力越大

电机驱动力和摩擦力平衡,电机不再减速,误差不再增大,驱动力不再增大,系统达到稳态。

1.6 自发偏移

(1)自发偏移的产生

稳态误差产生原因:纯比例项控制时,若误差为0,则比例项结果也为0。被控对象输入0时,一般会自发地向一个方向偏移,产生误差。产生误差后,误差非0,比例项负反馈调控输出,当调控输出力度和自发偏移力度相同时,系统达到稳态。

判断是否会产生稳态误差:给被控对象输入0,判断被控对象会不会自发偏移

判断稳态误差的方向:给被控对象输入0,自发偏移方向即为稳态误差方向——自发偏移向下,则为向下误差,自发偏移向上,则为向上误差。换句话说,从目标值向下自发偏移,误差为目标值向下的误差。从目标值向上自发偏移,误差为目标值向上的误差。

(2)自发偏移的原因

对于定速控制而言,自发偏移的原因就是阻力。

对于锅炉定温度控制,自发偏移的原因就是锅炉的自然散热。

判断方法是:不给锅炉加任何燃料,锅炉会逐渐降温,如果锅炉保温措施比较好,稳态误差就比较小,如果锅炉绝对保温,不存在任何散热,那么纯比例项调节,就没有稳态误差

电机定位控制:一般也很少有稳态误差,比如电机转到指定位置了,给电机输入0,电机不转,位置一般不会自发偏移,这是基本就不会有稳态误差。 实际情况可能也会有很小的误差,这个误差产生的原因是,实际值离目标值很近时,误差比较小,如果kp也比较小,输出值就会很小,可能不能让电机转起来,这样就会产生误差。但是这个误差值很小,算是调控误差,这个误差的原因,也是阻力的存在,当驱动力很小时,可能无法让电机转起来。

1.7 比例项总结

作用按比例反应系统的偏差,将输出偏差成比例放大后用作新的输出,直到没有误差后,比例项的输出为0,以达到跟踪到目标值的目的。

优点比例项最大的优点就是响应快,误差一旦变化,比例项输出立刻做出对应的变化以减小误差。

缺点:纯比例项调节一般存在稳态误差(如果稳态时没有自发偏移,就没有这个缺点)。

1.8 纯比例项调节的思考

二、积分项

2.1 积分项(Ki项、I项)

在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,误差会一直累积,积分项会一直增大,直到大到足够驱动被控对象往误差减小的方向发展。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分控制器(PI控制器),可以使系统在进入稳态后无稳态误差。积分项一般不会单独使用——因为积分项的滞后性,单独使用很难满足PID算法的快速要求,某些特殊的对反应速度没有要求的使用场景可能能够单独使用积分项。单独判断积分项系数的极性的时候也会单独用到积分项。

积分调节作用:是使系统消除稳态误差,提高无差度——因为积分项能够在稳态存在误差时,累积误差,增大驱动力到无误差状态。因为有误差,积分调节就进行,直至无差,积分调节停止,积分调节输出值稳定为一个常值。积分作用的强弱取决与积分时间常数Ti,Ti越小,积分系数Ki=Kp/Ti就越大,积分作用就越强。反之Ti大则积分作用弱。

加入积分调节会使系统稳定性下降,动态响应变慢。积分作用常与另两种调节规律结合,组成PI调节器或PID调节器。

2.2 积分项的特点

(1)积分项的输出值取决于0~t所有时刻误差的积分,与历史时刻有关(会随时间累积历史时刻的误差,一直增大积分项的输出值,直到无误差)。积分项将历史所有时刻的误差累积,乘上积分项系数Ki后作为积分项输出值。

(2)积分项用于弥补纯比例项产生的稳态误差,若系统持续产生误差,则积分项会不断累积误差,增大积分项的输出,直到控制器产生动作,让稳态误差消失。有积分项,系统就不会有稳态误差,因为如果系统存在正稳态误差,积分项会一直累计这个稳态误差,PID输出的控制力度就会不断加大,加大的驱动力就会减小误差,直到误差为0,此时比例项输出为0,积分项只是误差不再累计,而之前累计的驱动力不会归零,所以误差为0时PID可以有恒定的输出值,用于对抗系统的自发偏移(例如摩擦阻力)。

(3)Ki越大,积分项权重越大,误差累积越快,稳态误差消失越快,但系统滞后性也会随之增加

(4)和比例项不同,积分项需要单独定义一个积分变量errorint,+=历次误差。

(5)积分过程可视化如图:

在t0之前,error为正(目标值比实际值大),积分项一直增大(为正)

t0之后,error为负(目标值比实际值小),积分项减小(为正)

比例项为负,总的输出为正。

直到比例项接近0,积分项独自输出(正负正负地抵消后恰和目标值的阻力相当,误差接近0后,积分项不怎么变化了)

(6)如上图公式,所有误差累积后,还要乘一个积分系数Ki,才是积分项的输出,上图公式还可以如下图这么理解:

即,所有误差乘以一个比例系数Ki后,再累积成为积分项的输出

这下,比例项和积分项的对比就很明显——

P项只表示:当前时刻的误差*比例系数Kp

I项表示:当前时刻的误差*比例系数Ki,加到历史所有误差*Ki上之后再输出

2.3 系统滞后性

例如: 电机驱动,在PI控制下,平衡在目标值后(只有I项正输出)

此时突然让电机反转,I项累积了较大,只能慢慢减下来,先负向累积,把正向累积抵消掉,然后才能反向累积,产生反向驱动力,这样的话,积分项的输出就慢了,这就是滞后性。

滞后性会导致系统不稳定——想变,但是很久了都变不过来,尤其是平衡控制的项目,积分项太大,系统无法稳定控制。

另外,积分项还有其他一些问题:如:积分饱和……等

反观比例项,误差为负,立刻就输出反向的驱动力,比例项的响应是最快的,而且比例项的结果只取决于当前时刻的误差,与历史时刻无关,比例项也不会累计,不会产生饱和的问题,这些就是比例项相对于积分项的优势,因此,积分项一般不单独拿出来用,而是配合比例项使用。

比例项输出+积分项输出 ——>PI控制器(结合比例项、积分项的优势:反应快+无稳态误差)。

电机控速,使用PI控制器就可以很完美了。

2.4 PI控制器调节图像

以下这6个图也是电机定速控制的波形——红线:目标速度;紫线:实际速度。

PID的输出CCRx,就正比于给到电机的PWM占空比CCRx / AAR。

(PWM占空比可以简单理解为电机的驱动力)

图1:纯积分项控制——积分系数比较小,当目标速度给到100,产生误差,积分项开始累积误差,产生一个不断递增的正向驱动力,这个力使得实际速度不断提升……只要有正误差,这个力就会不断增加(—>∞),让电机不断加速,所以不存在稳态误差。当目标速度和实际速度一致时,误差为0,积分项不再递增。

一个容易被忽视而又及其重要的点:误差积累的速度越来越慢——因为KI项输出,每次递增的值都是Ki * 当前误差,由于当前误差越来越小,所以积分项每次递增的值都越来越小,图线斜率就会越来越小,就不会产生超调。

此时会有一个结论:这段时间误差的积分,也就是这块区域的面积,乘上Ki后,输出的驱动力,会正好抵消电机的摩擦力,这时,电机就会匀速运动

之后设置目标速度为0,误差为负,积分项反向积分,驱动力逐渐减弱,电机速度逐渐下降,最后到达0,这就是纯积分项控制的实验波形——响应比较缓慢。

图2:PI控制器——当目标速度给到100,产生误差100,比例项立刻输出一个正向驱动力,这个力会让实际速度立刻增加,因此紫线前段主要是P项的作用。

到达拐点时,P项需要对抗摩擦力,无法再让误差减小,接下来的过程,主要靠积分项发力,I项逐渐累积误差,增加驱动力。

直到误差为0时,P项无输出,I项有一个稳定的输出,对抗摩擦力。这就是PI控制器的调控过程。

可以看出,实际速度的波形也可以体现P和I的作用,前一段迅速上升的速度,是P项在起主要作用的波形,后一段逐渐累积上升,是I项起主要作用的波形。

不过当前这个波形还不够令人满意,是因为kp和ki两个参数调得不够好。

图3:PI控制器——这个实际速度的波形就比较完美了,当目标速度给到100时,P 项让实际速度立刻大跨度增加,然后I项累积,弥补 P 项的稳态误差,两者配合,在这个参数下,波形就比较好看,实际速度对目标速度的跟踪也比较到位,这说明这个参数是比较合适的。

电机控速,使用PI控制器就可以很完美了。

图4:KP 等于0.5,KI 等于0.2,KP 调到更大,看波形,虽然这时 P 项的大跨步力度比较大,反应更加迅速,但是在这里产生了一些震荡,这主要是 P 项过大导致的,后续呢, I 项发力消除稳态误差,在这个图可以看出 P 项参数有点过大了,有些震荡,但是好在速度没有超调,勉强可以接受。

图5:这个 KP 等于0.25,KI 等于0.5,这时 KI 比较大,积分作用比较强,KP 和我们刚才这个完美波形的参数一样,由于积分作用太强,在实际速度到达目标速度这段时间累积的力太大了,这导致了超调,实际速度冲出了目标速度界限之后,反向积分,积分驱动力减小,才使得实际速度等于目标速度。这个波形可以看出积分作用过强会导致超调

图6:KP 和 KI 参数都非常大,简单看一下,速度超调,而且抖动也很厉害,尽管表面上实际速度的反应非常快——实际速度响应曲线几乎就是一条直线直冲目标,但是导致了超调加震荡,这个现象也是不好的,参数过大。

好,看完这些图,这样我们对 PID 中的 PI 控制器就理解更加深刻了。

有关实验和参数调节技巧,我们后续写代码的时候还会讲,所以这里简单看一下波形,增加一些理解就行了,那之后 PID 中的 PI 我们都学了,最后我们再看一下 PID 中的 D 微分项。

三、微分项

3.1 微分项(Kd项、D项)

在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳(震荡幅度越来越大)。其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入 “比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调所以对有较大惯性或滞后的被控对象,比例+微分(PD)控制器能改善系统在调节过程中的动态特性

微分调节作用:微分作用反映系统偏差信号的变化率,具有预见性,能预见偏差变化的趋势,因此能产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除。因此,可以改善系统的动态性能。在微分时间选择合适情况下,可以减少超调,减少调节时间。而同时微分作用对噪声干扰有放大作用,因此过强的加微分调节,对系统抗干扰不利。此外,微分反应的是变化率,而当误差没有变化时,微分作用输出为零。微分作用不能单独使用,需要与另外两种调节规律相结合,组成PD或PID控制器。

3.2 微分项的特点

(1)微分项的输出值取决于当前时刻误差变化的斜率,与当前时刻附近误差变化的趋势有关。当误差急剧变化时,微分项会负反馈输出相反的作用力,阻碍误差急剧变化。

(2)斜率一定程度上反映了误差未来的变化趋势,这使得微分项具有“预测未来,提前调控"的特性。

(3)微分项给系统增加阻尼,可以有效防止系统超调,尤其是惯性比较大的系统,Kd越大,微分项权重越大,系统阻尼越大,但系统卡顿现象也会随之增加。微分项阻碍误差变化 所以正常 P 或 I 调控时,D 项也会阻碍他们的调控,比如D项作用过强,那么实际值的变化就会卡卡的——P 项和 I 项说,你给我动起来——D 项说:别动别动,再动我打你——那被控对象的运动就会卡卡的,这是系统卡顿现象,这是 KD 过大导致的。

(4)微分项一般配合 PI 使用,或者单独配合 P 来使用,组成 PID 控制器或者 PD 控制器

(5)微分实际上就是求导,求导实际上就是求当前点切线的斜率,当前点切线的斜率,实际上就是当前误差变化的速度,D 项的作用就是输出相反的驱动,阻碍误差的急剧变化。 比如说误差非常稳定,一点也不变,那么斜率为零,D项输出零;如果误差向一个方向变化,那么D项就输出一个反向作用力,阻碍这个变化,且变化的速度越快,阻碍的力就越大。如下图所示,误差减小越来越慢,微分项反向输出的力就越来越小

(6)注意, D 项输出的力是阻碍误差变化,而和误差本身的大小没关系。比如当前误差是100,误差很大,但是误差恒定在100不变化,这时 D 项就不会输出。

D项阻碍误差变化,本身并不会消除误差,那这么做的意义是什么呢?在实战项目中,尤其是平衡类的项目,比如我们的倒立摆,比如平衡车,比如四轴飞行器,要维持平衡,D 项就非常重要,像前面讲的 P 项和 I 项,它们只是基于当前误差和历史误差,做出的调控,没有预测未来的作用 对惯性比较大的系统很可能导致超调,并且来回持续不断的震荡,加上 D 项后震荡就增加了阻尼,那么震荡就会不断衰减,系统会变得稳定。

3.3 微分项的调节图象

红线是设定的目标值,蓝线是实际值,我们可以看到这里实际值往目标靠近的越来越快,最后一头猛地扎向目标值。

按理说正常的实际速度波形应该是黄线这样:离目标越近,这个变化就应该越缓慢,最后和目标贴合,这样的曲线才是完美的。然而有的系统会出现蓝线这样的实际速度变化,当实际值这样变化时,就一定要注意加上 D 项的作用,因为现在实际值已经离目标值比较近了,但是实际值变化的速度还越来越快,没有放缓,那当实际值等于目标值时,就一定会超调。

加上 D 项后,D 项的输出值取决于误差变化的斜率,所以看误差变化曲线(用红线减蓝线得到):误差越来越小,小得越来越快,在某一点做个切线,可以发现斜率为负,且斜率绝对值比较大,所以这时 D 项调控的输出为负向作用,且作用力比较大,这个负向作用力会把实际值往下拉,让误差小得慢一点,这就可以避免实际值超调

最后看上边这个图,这个图不是电机定速控制的图, 而是倒立摆位置环的变化曲线

红线是目标位置(始终为零——有时我们要求位置始终固定在零位置)

紫线是实际位置

KP 和 KI 也有给值,但这里不重要,没有写出来,我们主要观察 KD 对波形的影响——最开始实际位置贴合目标位置,在这个时刻把 KD 设置为零,由此取消微分项作用,可以看到倒立摆的位置开始摆动起来,且每次产生误差,PI 调节器都会反向调节,但是反向调节又会导致超调,产生更大的误差,然后 PI 再反向调节又导致更大的误差……误差变化的幅度越来越大。可以观察到,当实际值距离目标值很近的时候,它的变化没有放缓,而是一头扎向目标 和之前的蓝线是一样的情况,这肯定不行 这过程就像是我们玩一些赛车游戏啊,假设这跑道我们想把车行驶在路中间,刚开始我们没经验,当车左偏时,我们向右调,但是右调之后反而导致了更大的右偏,然后我们会更加急的往左调,这就导致了更更大的左偏,感觉我们每次反应都慢半拍,本来偏移不大,但是在我们的神操控下,偏移反而越来越大,然后当我们玩多了,有经验的时候,我们就知道了,比如车往左偏了,我们往右调,但是在车到达中线之前,虽然此时车还在线的左边,我们也会往左调,这个左调的目的就是及时反向调控,防止造成更大的超调。

当我们把这个经验对应到 PID 控制器中,就是其中的 D 微分项,所以在这个图中,这个位置给 KD 设置为2,加入了微分作用 可以看到这个震荡的幅度立马就减小了,D 项的作用是加阻尼,阻尼震荡的曲线就是这样——来回震荡,且震荡幅度越来越小,就是阻尼震荡——这个图和阻尼震荡一样,震荡幅度逐渐减小。但是 KD 等于2,这个阻尼还不够,最后一点震荡衰减不了,所以我们继续加大 KD ,当 KD 等于4的时候 可以看到这个震荡已经变得非常小了,实际值基本上贴合在了目标值附近,这个现象就非常完美。

好,通过这些图的讲解,我们对 D 项应该就了解了。

四、总结

一般来说,对电机的定速控制,用 PI 控制器就足够了,不需要加入 D 项,因为电机控速这个系统一般不会来回震荡。

而对于电机或者倒立摆的定位置控制,可以用 PD 控制器,因为定位置控制一般稳态误差很小,而且是比较容易超调来回震荡的,如果 PD 控制还有稳态误差,可以加入一点点 I 项,这里 I 项不能加大了,否则定位置控制很不稳定。

当然,以上这些只是个人经验而推荐使用的,并不是绝对的,实际情况可以各自组合都试试,以实际为准,所以说 PID 非常需要亲手实践,要不然内部的原理和操作技巧很难理解。

那么本节我们 PID 的理论知识到这里就结束了,现在回过头来看这个公式上面积分啊,微分啊,是不是就好理解了,我们在分析的时候,其实并没有涉及很深的微积分知识,只是借用了微积分的概念而已,最后看完这一节的内容,说PID 这个公式更像是一个经验公式,它的设计是由生活经验和工程实践经验得到的,大家应该能理解这句话的意思吧。

好,本章内容讲了 PID 的公式PID 公式每部分的意义

但是在单片机中——我们如何去写程序呢 ? 这里积分和微分在程序中如何表达呢 ?这需要我们对这个连续的 PID 公式离散化,得到离散 PID 的两个公式:位置式 PID 和增量式 PID。这些内容后面再逐一讲解。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐