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

PID算法的8种改进方法详解

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

PID算法的8种改进方法详解

引用
CSDN
1.
https://blog.csdn.net/weixin_44690490/article/details/121916761

PID(比例-积分-微分)控制算法是工业自动化领域中最常用的控制算法之一,广泛应用于各种闭环控制系统中。为了提高控制性能和适应不同应用场景的需求,研究者们提出了多种PID算法的改进方法。本文将详细介绍几种常见的改进PID算法,包括位置式PID、增量式PID、积分分离PID、梯形积分PID、带死区的PID、变速积分PID、带滤波器的PID以及基于前馈补偿的PID。

位置式PID算法

位置式PID算法是一种比较直观的PID控制算法。如系统框图中所示,in表示设定值,error表示偏差,u表示控制器输出值,out表示被控量。算法表达式如下:

增量式PID算法

增量式PID算法不比位置式更直观,当执行机构需要控制量的增量时,适合采用增量式PID算法,比如步进电机控制。算法表达式如下:

也可以用后向差分法进行离散化,PID的连续传递函数为

s表达式代入到Gc(s)中,得

积分分离PID算法

PID算法中,积分项可以消除稳态误差,提高控制精度。但在系统启动或设定值大幅改变时,被控量与设定值之间会产生较大的偏差,造成过大的积分积累,甚至使控制量超过执行机构允许最大动作范围对应的极限控制量,引起系统过大的超调量,从而振荡。为避免这些不利的情况出现,可在被控量与设定值之间有较大偏差时,取消积分作用,避免超调量增大;当被控量接近设定值时,引入积分控制,消除稳态误差,提高控制进度。

设被控量与设定值之间的偏差阈值为X > 0,该值人为设定,即

算法表达式如下:

梯形积分PID算法

在PID算法中,积分项的作用就是为了消除稳态误差,故而提高积分项的运算精度能更好的提高控制精度。在单片机中,对于积分运算通常使用累加的形式,也就是矩形积分,即

上述式子在程序中经常这样使用,但在PID算法中,并不是这样,这不得不从原始的PID算法说起,其表达式如下所示。

将其离散化,我们将时间t当做一个时刻,即第一时刻,第二时刻,第三时刻,用k表示,相邻两个时刻之间的时长为T,比如说T = 1s,那么第一时刻即k = 1时表示第一秒,第二时刻即k = 2时表示第二秒,于是

也就是说,从严格意义来讲,积分项应该为

为方便编程计算把系数项全部整合在一块,称之为积分系数,所以就把T省略了。积分从图像上来看,就是求面积。因此在单片机中计算积分的思路就是把图形划分为宽度为T高度为error(n)n个等份,然后将所有矩形面积相加便可近似为求积分的过程。T越小矩形面积和越接近于积分运算,但在实际工程中,T不可能太小,因为T实际上就是采样时间,也是PID的计算周期,T过小会加大单片机的负担。这样的计算方式很直观,但计算的精度较低,误差大。假设偏差error在某段时间服从函数error = -a*t + b,如下所示

那么积分运算就是指

很明显,这使得每个矩形上面填充红色的三角形都参与了计算,使得积分运算精度大大降低,为避免出现过大的误差或者进一步提高运算精度,引入梯形积分的概念,只计算error曲线以下的部分,即梯形的面积

故梯形积分的PID的表达式为

当偏差error不服从线性关系,或者是其他一些曲线,则不会向示例中那般毫无误差,仍会有些许误差无法计算到,但同矩形积分相比,运算精度已经得到了很大的改善。

带死区的PID算法

带死区的PID算法主要用于存在闭环死区的系统,当系统达到稳态时,系统的输出值仍在设定值上下有微小的震荡,其算式为

e(k)表示偏差,e0表示人为设定的一个阈值,当e(k) = 0时,控制器的输出也会逐渐降为0,这是由于积分的原因,而对于PD或P控制,当e(k) = 0时控制器的输出会迅速衰减到0。例如直流电机的位置控制,当电机转动到预定位置时,如果存在一些干扰,电机会在预定位置上下震荡,此时引入一个死区,位置环控制器输出就会为0,系统也就稳定下来了。

变速积分PID算法

变速积分PID算法与积分分离PID算法本质上相同,都是为了减小系统超调,提高系统响应速度,但是积分分离PID算法较为粗暴,变速积分PID算法则是根据偏差error的大小来改变积分的速度,偏差越大,积分越慢,反之越快。即积分项的表达式为

β是关于偏差error的函数,即

其中AB表示人为设定的阈值,则变速积分PID算法的表达式为

带滤波器的PID算法

当系统中存在高频干扰时,会使得系统变得不稳定,另外,在PID算法中,微分项会将高频干扰放大,所以需要将高频干扰过滤掉,从而使系统稳定,故引入低通滤波器。假设该滤波器传递函数为

该滤波器的转折频率为20Hz,对如下系统

当干扰信号频率低于20Hz,设为10Hz,输出曲线如下

左图为带滤波器的输出响应,右图不带滤波器,可以看出此时两个系统输出很不稳定,波动都很大,再看看干扰信号频率大于20Hz时的情况,设为100Hz,输出曲线如下

很明显,此时带有滤波器的系统输出相比于之前10Hz干扰信号时的输出波动幅度要小很多,此时不带滤波器的系统输出已经受到剧烈干扰,带有滤波器的系统输出波动幅度更小。在加大干扰信号的频率,设为10kHz,输出曲线如下

此时带有滤波器的系统输出几乎已经没有了波动。

在编程中使用带滤波器的PID算法时,需要对滤波器的传递函数进行Z变换并离散化,其公式为

——a表示滤波系数,取值(0,1)之间
——Y(n)表示滤波后的输出值
——X(n)表示滤波前的输入值
——Y(n-1)表示上一次滤波的输出值

一阶低通滤波器的系统框图如下

由此可得

接着开始Z变换并离散化,令

故而

基于前馈补偿的PID算法

对于设定值变化的系统中,为提高系统的跟踪性能,需要加入前馈补偿。既然是提高系统的跟踪性能,那自然就是系统的输出越接近于甚至等于系统的输入,也就是闭环系统的传递函数为1。如下图所示

假设有一个被控对象为

不加前馈补偿,如下

系统输入为w = 2, A = 3的正弦信号,我们将pid调节到一个没有超调量的合适参数,输出图像如下

黄线表示系统输入的信号曲线,蓝线表示系统输出曲线,可以看出,输出曲线不仅幅值较系统输入小,且滞后于系统输入,我们在将pid适当调节,增大超调减小调节时间,系统相应如下

此时的输出幅值已经很接近系统的输入了,但仍存在误差和滞后,再来看看在现在的pid参数下加入前馈补偿的效果,系统框图如下

输出曲线如下

在响应0.1s内已基本重合,在放大看看

可以看出误差已经非常小,可以忽略不计了,所以加入前馈补偿可以很好地改善系统的跟踪性能。在编程中,使用前馈补偿的PID算法,在计算uf时,可对1/G(s)进行Z变换并离散化。

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