PID控制算法之学习笔记

小记:
1, 之前看过PID算法,云里雾里的,没彻底搞清楚。2025年5月6号,在淘宝上花费4.79元,买了二手书:『高等数学』同济大学 第七版上下册(第八版太贵了lol),最近2~3天才把上册囫囵吞枣的看了一半,刚看到定积分部分(网上的高数教程我实在是看不下去)。然后重新学习PID算法。
2, 之前也看过很多别人上传的视频或文章,总是云里雾里的,没彻底搞清楚,不知道是因为高等数学基础太差还是别人本身就没搞清楚,讲不明白。特做笔记如下:
!!!注意注意注意:PID中的微分,实际上是求导!!!

PID概述

PID(Proportional Integral Derivative)是比例、积分、微分三个英文单词的缩写,即比例、积分、微分控制。PID控制就是测量元件得到系统的输出后,将输出经过比例、积分、微分3种运算方式,叠加到输入中,从而控制系统的行为。PID信号框图和PID算法公式如下图所示:

PID信号框图

PID算法公式

公式中的参数解释如下:

kp:比例增益

err(t):当前时刻的偏差

TI:积分时间常数,积分时间常数决定了积分作用的「强度」和「速度」。值越小,积分作用越强,消除稳态误差的速度越快,但系统也越容易振荡;值越大,积分作用越弱,消除稳态误差的速度越慢,但系统越稳定。

TD:微分时间常数

比例控制算法

假设有一个水缸,最终的控制目的是要保证水缸里的水位维持在1米的高度。假设初始时刻,水缸里的水位是0.2米,那么当前时刻的水位和目标水位之间是存在一个误差error的,且error为0.8。

假设通过往缸里加水的方式来控制水位,如果单纯的用比例控制算法,就是指加入的水量u和误差error是成正比的。即u=kp*error,假设kp取0.5,那么t=1时(表示第1次加水,也就是第一次对系统施加控制),那么u=0.5*0.8=0.4,所以这一次加入的水量会使水位在0.2的基础上上升0.4,达到0.6。

接着,t=2时刻(第2次施加控制),当前水位是0.6,所以error是0.4。u=0.5*0.4=0.2,第2次加水会使水位上升0.2,达到0.8。如此循环下去,就是比例控制算法的运行方式。

但是,比例控制存在着一些不足,其中一点就是:稳态误差!像上述的例子,考虑另外一种情况,假设这个水缸在加水的过程中,存在漏水的情况,假设每次加水的过程,都会漏掉0.1米高度的水。仍然假设kp取0.5,那么会存在着某种情况,假设经过几次加水,水缸中的水位到0.8时,水位将不会再变化!!!因为,水位为0.8,则误差error=0.2。所以每次往水缸中加水的量为u=0.5*0.2=0.1。同时,每次加水缸里又会流出0.1米的水。加入和流出相抵消,水位将不再变化。也就是说,我的目标是1米,但是最后系统达到0.8米的水位就不再变化了,且系统已经达到稳定。由此产生的误差就是稳态误差。

在实际情况中,汽车运动中的摩擦阻力,机械臂的运动、无人机的飞行中的各类阻力、外力和消耗都可以理解为本例中的“漏水”,所以,单独的比例控制,在很多时候并不能满足要求。

积分控制算法

如果仅仅用比例,可以发现存在稳态误差,最后的水位就卡在0.8了。于是,在控制中,我们再引入一个分量,该分量和误差的积分是正比关系。所以,比例+积分控制算法为: u=kp*error + ki * ∫error(t)dt,还是用上面的例子来说明,第一次的误差error是0.8,第二次的误差是0.4,至此,误差的积分(离散情况下积分其实就是做累加),∫error(t)dt=0.8+0.4=1.2。这个时候的控制量,除了比例部分,还有系数ki乘以这个积分项。由于这个积分项会将前面若干次的误差进行累计,所以可以很好的消除稳态误差(假设在仅有比例项的情况下,系统卡在稳态误差了,即上例中的0.8;但是加入了积分项,会让输入增大,从而使得水缸的水位可以大于0.8,渐渐到达目标的1.0),这就是积分项的作用。

微分控制算法

考虑刹车情况,当发现前面有红灯时,为了使得行车平稳,会提前放松油门并踩刹车。当车辆离停车线非常近的时候,则使劲踩刹车,使车辆停下来。整个过程可以看做一个加入微分的控制策略。

微分,在离散情况下,就是error的差值,就是t时刻和t-1时刻error的差,即u=kd*(error(t) - error(t-1)),其中的kd是一个系数项。在刹车过程中,因为error是越来越小的,所以这个微分控制项是负数,在控制中加入一个负数项,就起到了减小控制量的作用,也就是“刹车”。他存在的作用就是为了防止汽车由于刹车不及时而闯过了线。从常识上可以理解,越是靠近停车线,越是应该注意踩刹车,不能让车过线,所以这个微分项的作用,就可以理解为刹车,当车离停车线很近并且车速还很快时,这个微分项的绝对值(是个负数)就会很大,从而表示应该用力踩刹车才能让车停下来。

以上例子中车速可类比为微分项,车速越快刹车越快。切换到上面给水缸加水的例子,就是当发现水缸里的水快要接近1的时候,加入微分项,可以防止给水缸里的水加到超过1米的高度,说白了就是减少控制过程中的震荡。

PID算法逐项解释

1, 比例调节P起主要控制作用,『纠正偏差』,比例分力与当前偏差Δe(t)成正比,其反应迅速,响应速度快,但可能导致超调或振荡。比例负责“当下”,根据当前误差大小做出快速反应。

2, 积分调节I的功能是『消除稳态误差‌』,积分产生的分力正比于偏差Δe(t)的积分∫e(t)dt,即偏差的累积量,当误差持续存在时,这个分力会逐渐变大,试图消除系统在稳态时存在的静差,进而改善系统的静态性能。但可能降低系统动态响应性能,引起超调或振荡。积分负责“过去”,根据误差的历史积累进行纠正。

3, 微分调节D基于偏差的变化率(导数de(t)/dt)提前进行超前控制,当偏差变化较快时,微分作用会抑制偏差的进一步变化,从而有效减少系统的超调量,微分环节产生的分力始终阻碍偏差的变化,产生阻尼/惯性和预测功能,其作用是抑制超调、振荡,并提高动态响应速度(阶跃输入目标值和扰动时,偏差快速增大,导数是个很大的正数,更敏捷)或降低响应速度(接近目标时,偏差快速减小,导数是个很大的负数,更平稳)。微分负责“未来”,根据误差的变化趋势(变化率)进行控制。

PID注意事项:

1, 比例增益kp,积分时间常数TI,微分时间常数TD都是正数,但比例/微分/积分都是有正负的。

2, 偏差是一个状态值,偏差变化率是偏差随时间变化的速度,是一个趋势值,表示『正在以多快的速度远离或接近目标』。偏差在减小,de(t)/dt就是负数,反之亦然。微分作用抑制的不是「向目标运动」这个事实,微分作用总是试图抑制偏差当前的变化趋势。如果偏差正在减小(de/dt<0),微分作用为负,抑制减小速度,防止超调(比例调节主导,防止超调)。如果偏差正在增大(de/dt>0),微分作用为正,抑制增大速度,强力纠偏(外界干扰导致偏差,此时比例调节作用很小,微分主导)。

为什么明明是求导,反而叫微分呢!!!

d/dt表示“对时间求导数”。derr(t)/dt是偏差err(t)对时间t的导数。它表示的是『偏差变化的快慢和方向』,也就是偏差的变化率。按照纯数学视角应该叫导数项,而不是微分项。但在控制理论的语境下,“微分”一词指的是“微分运算”这个整体动作和其产生的结果,而不仅仅是数学概念中的『微分dy -> 变化量,导数dy/dx -> 变化率』。叫“微分项”是工程上的习惯,但它的核心是“求导”。这是工程习惯与历史沿革造成的:PID控制理论诞生于工程实践,早于现代严格的数学符号规范化,“微分项”是控制工程领域的惯例和习惯用法。


PID控制算法之学习笔记
http://example.com/2025/09/26/PID控制算法之学习笔记/
作者
admin
发布于
2025年9月26日
许可协议