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

PID控制算法详解:从基础概念到优化方法

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

PID控制算法详解:从基础概念到优化方法

引用
CSDN
1.
https://blog.csdn.net/2301_79865451/article/details/141995583

PID控制算法是工业自动化和机器人控制领域中最为常用的一种控制算法。它通过调整系统的比例、积分和微分三个参数,实现对系统的精确控制。本文将从PID的基本概念出发,详细探讨其各个组成部分及其特点,并介绍PID算法的优化方法,帮助读者深入理解这一重要的控制理论基础。

一、PID算法简介

我们先来看看百度百科是如何介绍PID算法:

PID控制方法将误差的比例(proportional)、积分(integral)、微分(derivative)通过线性组合构成控制量,对被控对象进行控制。

二、PID算法的组成部分

2.1 PID标准公式

由于计算机只能处理数字信号,则需要进行离散化,进行化简后可得:

  • Kp:比例系数
  • Ki:积分系数
  • Kd:微分系数

2.2 PI控制

特点:忽略掉微分系数,只考虑比例与积分。从时域上看,只要存在偏差,积分就会不停对偏差积累,因此稳态时误差一定为零。PI调节将比例调节的快速反应与积分调节消除静差的特点结合,实现好的调节效果。比例与积分动作都是对过去控制误差进行操作,不对未来控制误差进行预测,限制了控制性能。PI调节适用于控制通道滞后较小、负荷变化不大、工艺参数不允许有静差的系统。

2.3 PD控制

对于惯性较大的对象,常常希望能够加快控制速度,此时可以在比例调节的基础上增加微分作用,适用于舵机的快速响应。

特点:PD调节由于缺少积分作用来消除静态误差,所以是有差调节,但大大提高了系统响应速度,但抗干扰能力差,一般只适用于被调参数变化过程稳定的系统,微分系数过高时,容易造成系统震荡。

2.4 PID控制

如果将比例,积分,微分三者合理的结合在一起,权重得当,就可以得到既能快速调节,又能消除静差的有力的控制算法。

特点:PID调节中,比例的作用是基础调节,积分的作用是消除静态误差,微分的作用是加快调节速度。Kp 较小时,系统对微分和积分环节的引入较为敏感,积分会引起超调,微分可能会引起振荡,而振荡剧烈的时候超调也会增加。Kp 增大时,积分环节由于滞后产生的超调逐渐减小,此时如果想要继续减少超调可以适当引入微分环节。继续增大 Kp 系统可能会不太稳定,因此在增加 Kp 的同时引入 Kd 减小超调,可以保证在 Kp 不是很大的情况下也能取得较好的稳态特性和动态性能。Kp 较小时,积分环节不宜过大,Kp 较大时积分环节也不宜过小(否则调节时间会非常地长),当使用分段PID ,在恰当的条件下分离积分,可以取得更好的控制效果。原因在于在稳态误差即将满足要求时,消除了系统的滞后。因此系统超调会明显减少。

2.5 位置式PID

标准式:

因为有误差积分 e(k)一直在累加,也就是当前的输出u(k)与过去的所有状态都有关系,用到了误差的累加值;输出的u(k)对应的是执行机构的实际位置,,一旦系统出现不可预知的从无,u(k)的大幅变化会引起系统的大幅变化并且位置式PID在积分项达到饱和时,误差仍然会在积分作用下继续累积,一旦误差开始反向变化,系统需要一定时间从饱和区退出,所以在u(k)达到最大和最小时,要停止积分作用,并且要有积分限幅和输出限幅。

所以在使用位置式PID时,一般我们直接使用PD控制。位置式PID适用于不带积分部件(指执行元件具有记忆性,能够记录此次的运行状态,如步进电机)的执行对象,如舵机。

2.6 增量式PID

标准式:

增量式算法不需要做累加,控制量增量的确定仅与最近几次偏差采样值有关,计算误差对控制 量计算的影响较小。而位置式算法要用到过去偏差的累加值,容易产生较大的累加误差。增量式算法得出的是控制量增量,例如在阀门控制中,只输出阀门开度的变化部分,误动作影响小,必要时还可通过逻辑判断限制或禁止本次输出,不会严重影响系统的工作。 而位置式的输出直接对应对象的输出,因此对系统影响较大。增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如舵机。在进行PID控制时,位置式PID需要有积分限幅和输出限幅,而增量式PID只需输出限幅。

三、PID算法的优化

尽管PID算法有如此多的优点,但却也并不是无所不能的,在有些情况下依然控制效果与期待值偏差过大,于是就有许多对应的优化完善。

3.1 抗积分饱和

积分饱和是指PID控制器或是其他有积分器的控制器中可能会发生的一种现象。这种现象往往发生在误差有大幅变化(例如大幅增加),积分器因为误差的大幅增加有很大的累计量。所以随着时间的增加,每次累积较大的误差,很容易造成积分饱和并产生较大的过冲,而且当误差变为负时,其过冲仍维持一段时间之后才恢复正常的情形。

举个电机例子:

设定转速为,这里可以是 100 rpm,但是由于某种原因电机一开始堵转了,所以反馈的转速为 0;这时候仍然处于堵转状态,那偏差 就会一直处于很大的状态,积分器对偏差 进行累积,便迅速达到一个很大的值,导致 PID 的输出已经接近输出的上限,导致最终输出的 PWM 的占空比很大;此时,堵转忽然消失,但是前面提到 PID 的输出已经接近输出的上限,因此电机转速也急剧上升,当时, ,此时偏差都处于负数状态;虽然误差变成负数,并且积分器开始累加负数,但是由于之前积分器累积的值已经很大,于是,PID 依然会保持较大的输出一段时间,从而产生了很大的过冲;

方法:

为了解决积分饱和的问题,人们引入了抗积分饱和的PID算法。所谓抗积分饱和算法,其思路是在计算U(k)的时候,先判断上一时刻的控制量U(k-1)是否已经超出了限制范围。若U(k-1)>Umax,则只累加负偏差;若U(k-1)<Umin,则只累加正偏差。从而避免控制量长时间停留在饱和区。详细介绍:https://zhuanlan.zhihu.com/p/49572763

3.2 不完全微分

不完全的微分它使得在偏差作阶跃式变化时出现的输出瞬时跳变得到一定程度的缓和,因而在实际的PID控制算法中得到广泛采用。在PID 控制中,微分信号的引入可以改善系统的动态特性,但也易引入高频干扰,在误差扰动突变的时候尤其显出微分项的不足。要想解决这个问题,可以在控制算法中加入低通滤波器.

相较于普通的微分短时间大幅度的跳变,系统无法正常响应会更稳定。

3.3 带死区的PID

其目的是在误差值如果过小的话,就认定为没有偏差值。

在计算机控制系统中,由于系统特性和计算精度等问题,致使系统偏差总是存在,系统总是频繁动作不能稳定。为了解决这种情况,我们可以引入带死区的PID算法。

其中的死区值得选择需要根据具体对象认真考虑,因为该值太小就起不到作用,该值选取过大则可能造成大滞后。带死区的PID算法,对无论位置型还是增量型的表达式没有影响,不过它是一个非线性系统。除以上描述之外还有一个问题,在零点附近时,若偏差很小,进入死去后,偏差置0会造成积分消失,如是系统存在静差将不能消除,所以需要人为处理这一点。

3.4 串级PID

有问题,才会有需求,假设我们需要解决这样一个问题:要让小车精准的实现科目二里的坡道定点停车与起步。

如果是使用单级的PID,那么运动框图应该是这样的:

误差经过PID算法得到输出小车给定速度v,小车给定速度v经过建立的电机小车模型传递函数(实际上是一个积分器,对速度积分即可得到位移),得到小车的当前位置x0;现在如果我们还拿之前的PID参数去解决这个问题,我们可能就会发现小车的运行情况并不是那么理想了,可能会出现但不限于收敛速度变慢,无超调控制的PID参数出现超调,小车在目的地附近振荡等情况。

这是为什么呢,我们仔细看一下之前框图里的执行环节发动机,把它打开看一下:

由此可以发现真正的积分器是汽车的真实移动距离,而其的真实输入其实是v'

在现实场景当中,v'是无法恒等于v的,发动机也需要响应时间,v'与v不完全一致,这就是原有的单级PID算法出现问题的原因,我们实际供给电机的是电压,一定的电压对应一定的转速v,然而电机转速v不是关于电压的单值函数。

那么如何解决呢,我们可以对发动机做一个转速闭环。

这样就可以改善这个问题,有了这个闭环,就可以让电机的实际转速v'快速的跟踪给定速度v,至于有多快,还是要看电机模型和PID参数,但是一定比之前开环控制的效果要好。

现在,我们将这样的改装过的输出替换原来的输出,就可以得到这样一个串级PID的结构框图了

四、总结

PID算法,给出一个PID最通俗的解读:我们设计一样东西,一般都是先打个样,这个样跟我们想要的接近,但细节没到位,这就是P,样有差异,所以就要修改,拟合逼近,这就是I,到了定稿,就不允许随便修改了,就算要修改,也是有限制的修改,这就是D。

关于

本片文章是作者初学PID后的总结,可能有些地方并非涉及或详细解释,再给大家看下我学习并有所收获和引用的文章:详细PID教程(CSDN)、PID的全面总结(知乎).

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