引言:
PID这篇我也打算分三部分来说,第一部分是基础理解,第二部分实战,包含最基础的PID使用方法,第三部分进阶,包含PID的一些高级用法,双环控制等等。
一、PID简介
  • PID是比例(Proportional)、积分(Integral)、微分(Differential)的缩写

  • PID是一种闭环控制算法,它动态改变施加到被控对象的输出值(Out),使得被控对象某一物理量的实际值(Actual),能够快速、准确、稳定地跟踪到指定的目标值(Target)

  • PID是一种基于误差(Error)调控的算法,其中规定:误差=目标值-实际值PID的任务是使误差始终为0

  • PID对被控对象模型要求低,无需建模,即使被控对象内部运作规律不明确PID也能进行调控

二、基本概念
1.开环与闭环
什么是开环?什么是闭环?

开环(Open Loop)控制器单向输出值给被控对象,不获取被控对象的反馈,控制器对被控对象的执行状态不清楚

闭环(Closed Loop)控制器输出值给被控对象,同时获取被控对象的反馈控制器知道被控对象的执行状态,可以根据反馈修改输出值以优化控制

2.PID公式与系统框图
系统框图
系统框图看起来和上述说的闭环控制差不多。
定义误差:(目标值-实际值)
PID输出值:
基于这三项:Kp,Ki,Kd是每一项的权重,这三个值是我们程序给定的,也是我们需要重点调节的值。
这个PID公式不像牛顿定理等特别严谨得出来的,是靠人们生活过程中的经验,就像和面一样,水多了加面,面多了加水,至于为什么要这样做,用语言就很难解释的通,所以大家对这个公式有个深刻的印象就好,至于原理没必要太过较真。
下面我们将围绕这三个:P比例,I积分,D微分,来进行一个讲解。


比例项(P)

  • 只含有比例项的PID输出值:

  • 比例项的输出值仅取决于当前时刻的误差,与历史时刻无关。当前存在误差时,比例项输出一个与误差呈正比的值,当前不存在误差时,比例项输出0

  • Kp越大,比例项权重越大,系统响应越快,但超调也会随之增加

  • 纯比例项控制时,系统一般会存在稳态误差,Kp越大,稳态误差越小

    用一句话总结就是:有误差,我就输出值调节,没有误差就输出0,P项权重的Kp表示P项的调节力度,Kp需要我们调节一个合适的值,太小系统响应慢,太大系统超调严重,甚至自激振荡。如下图所示:

    算法篇——PID入门教程,史上最详细的PID教程,抛弃公式,从本质上真正理解
稳态误差
在上面讲比例项(P)时我们提到了一个稳态误差,那什么是稳态误差?为什么会有稳态误差呢?下面我们来解释一下:
  • PID稳态误差:系统进入稳态时,实际值和目标值存在始终一个稳定的差值,如上述图片紫色和红色线之间有一段空白,就是因为稳态误差形成的。

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

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

  • 稳态误差的方向:给被控对象输入0,自发偏移方向即为稳态误差方向。


到这里,会有一个问题比例项的输出值仅取决于当前时刻的误差,至于上一时刻的误差我们是不知道的,聪明的你肯定想到了我们可以+=上一次输出的值(i+=i),那这正是积分项I的作用,你的想法和PID想法是一样的,那下面,我们就来看看积分项I。
积分项(I)
  • 含有比例项积分项的PID输出值:

  • 积分项的输出值取决于0~t所有时刻误差的积分,与历史时刻有关。积分项将历史所有时刻的误差累积,乘上积分项系数Ki;后作为积分项输出值。

  • 积分项用于弥补纯比例项产生的稳态误差,若系统持续产生误差,则积分项会不断累积误差,直到控制器产生动作,让稳态误差消失。

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

那什么是滞后性呢?就比如你先让电机正转,过了一段时间,积分项累计到了正转这个速度的驱动力,然后你突然又让电机反转,那么积分项不能立刻输出反转的驱动力,他必须负向累计,把正向的驱动力消掉,然后才能反向累加,产生反向的驱动力,这样的话积分项就慢了,就产生了滞后性
所以我们还要加上比例项,比例项的反应是最快的,且比例项的结果只取决于当前时刻的误差,这就是比例项相比于积分项带来的优势,比例项加积分项组成PI控制器,取长补短,发挥自己的优势。
微分项(D)
  • 含有比例项积分项微分项的PID输出值:

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

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

  • 微分项给系统增加阻尼,可以有效防止系统超调,尤其是惯性比较大的系统。

  • Kd越大,微分项权重越大,系统阻尼越大,但系统卡顿现象也会随之增加。

说白了我白说了,微分项(D)就是输出相反的力,阻碍误差的急剧变化,微分实际上就是求导,求导就是求当前点切线的斜率,也就是当前误差变化的速度。
到这,我想会有人问那微分项是负的吗?符号怎么确定?那下面一幅图来让你们彻底理解微分项(D):
误差值=目标值-实际值,由图可知道当我们的实际值增长的越快时,误差的斜率也就越大,这就起到了阻碍误差急剧变化的作用。
最后,我们用一个图来总结:
到目前为止,我们基本上把所有PID的概念都了解清楚了,因为公式里面有连续形式的PID公式,这些操作我们放在单片机里是不太好写程序的,连续形式的PID需要用模拟电路来实现,对于单片机而言,我们需要离散形式的PID,下一节课,我们就来看看离散形式的PID。
结语:P是控制现在,I是纠正曾经,D是管控未来!只有不忘过往,把握当前,规划未来才能让人生的轨迹按照既定的目标前进。