问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

一文理解PID控制原理

创作时间:
作者:
@小白创作中心

一文理解PID控制原理

引用
CSDN
1.
https://blog.csdn.net/yingzhefengyuzou/article/details/141788783

PID控制是工程领域使用最广泛的控制算法之一,从温度、气压、流量控制到电机控制等各个领域都有其身影。本文将从PID的基本概念出发,详细讲解其原理,并推导出完整的PID公式及其离散化形式,帮助读者深入理解这一重要的控制理论。

PID概念

PID算法是将偏差的比例(Proportion)、积分(Integral)和微分(Differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称PID控制器。

2.1 偏差的概念

假设我们目前有一个需求,要把水烧到50±1℃。在这个系统中,我们的控制对象就是水温,我们的PID执行机构就是加热器,我们可以通过加热器的电流大小来控制加热快慢,即PID的输出量(output)即为电流大小。那我们要把水加热到指定的温度,我们必须还得有一个温度传感器,来获取实时水温。我们想要的水温的期望值是50±1℃,这个期望值我们叫做设定值(setpoint),温度传感器返回的实时温度值我们叫做反馈值(feedbackVal),那么所谓的偏差(error)就是反馈值偏离设定值的大小,即为error = setpoint - feedbackVal。

2.2 PID比例项

什么是偏差的比例?

通常情况下,我们加热,都会采用恒定的电流加热,等水温达到设定值后,立即断电,水温低于设定值后,又立即启动加热,以此循环往复,这样进行控制(这种控制方式在工程上叫做乒乓控制)。对控制精度要求不高的场合,这样的控制方式完全够用,但如果控制精度比较高的情况下,水温要么就过了,要么达不到。这是因为大多数控制对象都有惯性,在惯性作用下,无法通过这种方式进行完美的控制。比如,我们的加热器,断电之后,它还有余热可以继续对水进行加热。比如电机,停止之后,由于惯性,它还会继续旋转。比如,关闭阀门,下达关闭指令后,它需要一定的时间才能完全关闭。

另外很多场合,我们的控制对象还受其他的因素的影响。比如,加热水,水在加热的同时,也在散热,而这个散热在夏天和冬天完全不一样,所以在冬天和夏天,将同样的水加热升温一定的温度所需要的功耗完全不一样。散热的这个因素也在影响着我们的水温。又比如,往水缸里注水,我们需要控制水缸的水位,但是同时这个水缸也在放水,那这个放水量就会影响水缸的水位。

那有没有一种方法可以在惯性以及其他因素的影响下,能够精确的控制呢?有的,方法肯定有很多,PID就是其中一种。PID的比例项是这样的。我们先求出偏差(error),根据偏差(error)的概念我们知道,如果反馈值偏离实际值很大,则偏差(error)也很大,如果反馈值距离实际值很小,则偏差(error)也很小。而我们控制一个对象,最理想的控制方式也是这样的,如果反馈值与设定值相差很大(即偏差(error)很大),我们可以输出(output)全功率,随着偏差(error)减小,我们也可以减少输出(output)功率,直到偏差(error)为0,我们的输出功率也为0。我们发现偏差的变化趋势和理想的控制方式是一样的。那我们使用偏差的概念来进行PID控制是非常完美的。

我们可以直接把偏差作为output来控制执行机构,是很理想的情况,但是一般情况下,偏差的单位和输出值的单位不一致。比如我们控制水温时,偏差的单位是摄氏度,而我们的输出值的单位是电流的单位A,这两个数往往不在一个数量级。所以我们直接将偏差作为输出值,进行控制不合适。为了能够通过偏差值对电流进行控制,我们在偏差值上乘以一个系数,这样我们就可以得到一个合理的值。我们把偏差乘以系数的这个项叫做比例项(proportion),即:

$$
proportion = Kp * error
$$

其中:

$$
error = output - setpoint
$$

用一个式子表示就是:

$$
proportion = Kp * (output - setpoint)
$$

上式中,Kp就是我们引入的偏差所乘的比例,我们一般称之为比例常数。那一般怎么选择Kp呢,这个就需要我们在实际中不断的去试,而这个找合适的Kp的过程,我们就叫做手动PID整定。PID整定是PID控制中最难的部分,需要不断的积累经验,才能快速的找到合适的Kp值。


2.3 积分项

怎么解决稳态误差?

所谓稳态误差,就是反馈值和设定值之间总是存在一定的偏差。解决稳态误差的办法就是对偏差进行积分(intergration)。

如上图所示,图中的曲线是偏差值(error = feedbackVal - setpoint),则偏差的积分(intergration)就是图中阴影部分的面积。我们从图中看到,面积的大小和两个变量有关:偏差大小和时间长久,只要偏差不为0,则积分(intergration)随着时间的增加也会一直增加下去。所以偏差更多的是影响积分(intergration)的速率,偏差大,则积分(intergration)增加的快,偏差小则积分(intergration)增加的慢。所以只要偏差存在,则在时间的加持下,最终我们的输出值就会越来越大,最终会消除存在的稳态误差。

PID积分项(intergration)我们表示如下:

$$
intergration = \int_0^t{d(error(t))dt}
$$

PID控制程序是周期性执行的,执行的周期称为采样周期(Ts)。上图中曲线为连续的实际的偏差值,但是我们通过计算机采集到的反馈值是离散的。我们一般都是每隔一个固定的时间去采集一个反馈值,并进行偏差计算,这个固定的时间间隔就是采样周期。就是上图中长方形的宽Ts了。每次PID运算时,偏差的积分就是在上一次积分的基础上,增加一个偏差(error)与采样周期(Ts)的乘积,即会增加一个图中的长方形的面积。偏差为正时,积分的增量为正,偏差为负时,积分的增量为负。

我们知道,偏差的积分的单位是时间单位和偏差单位的乘积,它的单位和比例项的单位不一样,为了单位换算一致,那我们一般需要给积分项除以一个时间系数,这个时间系数叫做积分时间常数,一般用Ti表示。引入积分时间常数后,积分项公式变为:

$$
intergration = {1\over{Ti}}\int_0^t{d(error)dt}
$$

那怎么求这个Ti的值呢,方法也是一样,需要通过整定求得,本篇文章我们不涉及整定,后面会专门讲解自整定。

引入积分项后,PID公式就变成了比例项和积分项的和。PID公式变为如下:

$$
output(t) = Kp * (error(t) + {1\over{Ti}}\int_0^t{d(error)dt})
$$

其中:

$$
error = output - setpoint
$$

上式中,我们看到,比例常数不仅作用到比例项上,还作用到积分项上,为什么要这么做呢?它和作用在比例系数上的作用一样,在Kp和Ti共同的作用下,将输出值(output)转化为合理的执行单元(执行输出值的器件或设备)可执行的的范围内的值。

上图为纯比例作用下的PID控制展示。

2.4 微分项

我们已经得到比例项和积分项组成的PID公式了,那这样PID公式是不是完美了呢?我们还没有讲解PID中的D,所以这个公式并不完美,它还是有缺陷的。但是在一般情况下,其实有了P和I也就够了,在P和I的作用下,一般都能达到我们想要的平衡值。

虽然只有PI作用,也可以使系统稳定,但是往往有一些副作用。比如系统响应变化过快,系统不稳定,比如在快要达到目标值阶段,往往会出现超调现象(反馈值达到目标值,并超过目标值,然后再慢慢返回来,在目标值周围振荡若干次,才逐渐平稳)。而我们加入微分项后,就可以来改善这种情况。

微分公式如下:

$$
differential = {derror(t)\over{dt}}
$$

error(t)表示t时刻的偏差,即setpoint – feedbackVal。所以上述公式我们就可以看成是单位时间内偏差的变化,即偏差变化率。

如上图,绿色线为设定值,红色线为实时反馈值,则图中的蓝色线可表示偏差值,从图中可以看出来,随着反馈值不断的接近设定值,蓝色线越来越短,即偏差越来越小。偏差的微分对图中来说,就是右边的蓝色线减去左边的蓝色线,所以其值是负的。

那我们总结一下上述现象,就是偏差减小的过程中,微分值永远是负的,偏差增大的过程中,微分值永远是正的。偏差变化越快,此时红色的线越陡,则偏差的微分的绝对值越大。

从上述描述中,我们不难看到,微分在起一个阻力作用。上图中,偏差在减小的过程中,比例项和积分项是正的,但是微分是负的,它在阻碍偏差的减小,偏差变化越快的时候,微分的值越大,阻碍作用越大。

上图是,偏差增大的过程中,上图中比例项和微分是负的,但微分项刚好是正的。所以由此可以看出,微分项的符号和比例项与积分项的符号是反的,它始终起一个阻力的作用。

就像这个弹簧一样,不管你把它拉的多长,它最终会在阻尼作用下,停止运动,即达到平衡。

微分的单位是偏差值的单位/时间单位,所以为了能够将微分项的单位与比例项和积分项单位统一,微分项还包含一个微分时间常数Td。我们在微分项上乘以这个微分时间常数后,单位统一,则乘以微分时间常数Td以后微分项公式如下:

$$
differential = Td{derror(t)\over{dt}}
$$

微分项对噪声特别敏感,如传感器反馈信号中有噪声或控制循环速率太低,微分项会使控制变的不稳定。噪声信号意味着反馈值突变,突变值的为微分值非常大,理论上可达到无穷大,所有其对噪声特别敏感。

上图表示微分作用。

2.5 最终的PID公式

经过上述讲解,我们已经清楚了PID公式,下面我们把最终的PID公式表示出来:

$$
output(t) = Kp[error(t) + {1\over{Ti}}\int_0^t{d(error(t))dt} + Td{derror(t)\over{dt}}]
$$

上式中,output(t) 表示t时刻的PID输出值,error(t)表示t时刻的偏差,即:t时刻的设定值setpoint与反馈值feedbackVal的差值。

$$
error(t) = setpoint(t) - feedbackVal(t)
$$

3、PID公式简化

我们观察以上公式,发现Kp作用在比例、积分、微分每一项上,如果我们需要手动整定PID的话,对于积分项和微分项来说,各有两个未知量需要求解。所以为了手动整定方便,一般需要对上式进行化简。 令:

$$
K_i = K_p*{{1}\over{T_i}} ,K_d= K_p*T_d
$$

则可得到如下公式:

$$
output(t) = Kp*error(t) + K_i\int_0^t{d(error(t))dt} + K_d{derror(t)\over{dt}}
$$

上式中,比例、积分和微分项相互独立,过上式手动整定PID就比较方便。

4、PID公式离散化

我们得到的PID公式是连续的,但在计算机的处理中,无法处理连续的函数,我们对其进行离散化。

4.1、采集时间

假设,我们有一个控制系统,以固定的时间间隔通过传感器获取实时反馈值。这个时间间隔我们称之为采集时间,一般设为Ts。我们获取一次实时反馈值,计算一次偏差,然后通过偏差进行一次PID控制,所以PID的控制时间也等于采集时间。 假设k为采样序号,K = 0,1,2,3,4,5...

第一次采样,则k=1,

第二次采样,则k=2,

第三次采样,则k=3,

第四次采样,则k=4,

第五次采样,则k=3,

.

.

.

第n-1才采样,k = n-1

第n次采样,则k= n,

第n+1次采样,则k= n+1,

.

.

.

4.2、求偏差

假设,第k次采样,实时反馈值为feedbackVal(k),设置值为setpoint(k),则偏差就可以表示为:

$$
error(k) = setpoint(k) - feedbackVal(k)
$$

4.3、积分离散化

如上图中,长方形的宽为采样时间Ts,假设每个采集时刻计算处的偏差值为error(k),即为长方形的长。那么积分就是各个长方形面积的和。 用公式表示就是:

$$
error(0)*T_t + error(1)*T_t + error(2)*T_t + error(3)*T_t +
... +error(k-1)*T_t + error(k)*T_t + +error(k+1)*T_t + ...
$$

我们对上式进行化简,则可表示为:

$$
T_t [error(0) + error(1) + error(2) + error(3) +
... +error(k-1) + error(k) + error(k+1)+...]
$$

我们继续使用求和公式来表述上述公式,则可以写为:

$$
T_t\sum_{i=0}^kerror(i)
$$

4.4、微分离散化

假设第k次求得的偏差为error(k),第k-1次求得的偏差为error(k-1),如上图中的曲线和长方形长交叉点的Y轴的值,即为各个采集点的偏差值。那么微分就相当于两个交叉点处Y轴的值的差除以采集时间Ts,就是偏差曲线的斜率。 用公式表示就是:

$$
[error(k) - error(k-1)]/T_t
$$

4.5、PID公式离散化

综上所述,我们把比例、积分和微分组合起来就可以得到离散化后的PID公式如下:

$$
output(k) = k_p [error(k) + {T_t\sum_{i=0}^kerror(i)\over{T_i}} + {Td{[error(k) - error(k-1)]}\over{T_t}}]
$$

上式为公式(11)的离散化表示。

$$
output(k) = K_perror(k) + Ki{T_t\sum_{i=0}^kerror(i)} + K_d*{{[error(k) - error(k-1)]}\over{T_t}}
$$

上式为公式14的离散化表示。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号