【PID】PID控制器基本概念、应用和实现过程的深入讲解

1.位置式PID(Position PID)和增量式PID(Incremental PID)
位置式PID(Position PID)和增量式PID(Incremental PID)是两种常见的PID控制算法,它们在控制策略的实现上有所不同,尤其是在计算控制量时的方式。下面是它们的区别:
1. 控制量的计算方式
位置式PID: 在位置式PID中,控制量是基于当前误差、误差的积分和误差的微分来直接计算的。控制量的公式如下:
u
(
t
)
=
K
p
e
(
t
)
+
K
i
∫
0
t
e
(
τ
)
d
τ
+
K
d
d
e
(
t
)
d
t
u(t) = K_p e(t) + K_i \int_0^t e(\tau) d\tau + K_d \frac{de(t)}{dt}
u(t)=Kpe(t)+Ki∫0te(τ)dτ+Kddtde(t)
其中:
e
(
t
)
e(t)
e(t) 是当前的误差(目标值与实际值之间的差值)。
K
p
K_p
Kp、
K
i
K_i
Ki、
K
d
K_d
Kd 分别是比例、积分、微分增益。
u
(
t
)
u(t)
u(t) 是控制量。 位置式PID的控制量是基于当前位置误差的函数,直接调整系统的输出到目标值。
增量式PID: 增量式PID控制器的计算方式略有不同,它计算的是控制量的增量(变化量)。具体公式如下:
Δ
u
(
t
)
=
K
p
(
e
(
t
)
−
e
(
t
−
1
)
)
+
K
i
e
(
t
)
+
K
d
(
e
(
t
)
−
2
e
(
t
−
1
)
+
e
(
t
−
2
)
)
\Delta u(t) = K_p \left( e(t) - e(t-1) \right) + K_i e(t) + K_d \left( e(t) - 2e(t-1) + e(t-2) \right)
Δu(t)=Kp(e(t)−e(t−1))+Kie(t)+Kd(e(t)−2e(t−1)+e(t−2))
其中:
Δ
u
(
t
)
\Delta u(t)
Δu(t) 是控制量的增量(即当前控制量与前一次控制量的差值)。
e
(
t
)
e(t)
e(t)、
e
(
t
−
1
)
e(t-1)
e(t−1)、
e
(
t
−
2
)
e(t-2)
e(t−2) 分别是当前、前一次和前两次的误差。 增量式PID控制器关注的是误差变化的增量,而不是控制量的绝对值。它将上次计算出的控制量作为基础,通过调整增量来修正控制量。
2. 输出响应方式
位置式PID: 位置式PID是基于当前的误差值来调整输出,它通常会使控制器的输出稳定在某个位置。控制量的变化是连续的,并且直接影响输出信号,适合用于那些需要控制到某一精确位置的应用。
增量式PID: 增量式PID控制器更注重输出量的变化,它将每次输出的增量叠加到上一次的输出上,因此,系统的响应是基于历史输出的增量来逐步调整的。增量式PID适合于那些输出变化较小且能够容忍逐步调整的应用。
3. 适用场景
位置式PID: 适合那些需要精准控制并且系统状态变化较为平稳的情况,例如温度控制、液位控制等。这些场景下,控制量直接影响到系统的状态,位置式PID能更快地将系统驱动到目标状态。
增量式PID: 增量式PID适用于那些要求系统输出具有渐进性和较小波动的场景,特别是在某些系统中,控制量的快速变化可能会导致不稳定或不期望的效果。增量式PID可以通过逐步调整来避免过大波动,常见于电机控制、伺服控制等领域。
4. 计算复杂度
位置式PID: 位置式PID的计算相对简单,因为它直接基于当前误差和历史误差进行计算,通常不需要保存历史误差。
增量式PID: 增量式PID由于需要考虑到前两次误差,因此在计算时需要更多的历史数据和额外的存储,这会使得它的计算复杂度相对较高。
5. 抗干扰能力
位置式PID: 如果系统出现扰动或突然的误差变化,位置式PID控制器可能会因为立即调整控制量而出现较大的波动,尤其在系统响应速度较快时,可能会导致震荡或过度反应。
增量式PID: 增量式PID相较之下,通常对扰动的反应较为平稳,因为它是基于误差增量进行调整的,这使得系统在扰动后的调整通常较为平滑,并能避免过度反应。
总结:
位置式PID 是通过直接计算误差、积分和微分来调整输出,它适合于需要精确控制输出的位置。增量式PID 通过计算控制量的变化量来调整输出,适合于那些需要平稳调整且响应渐进的场景。
根据不同的应用需求,选择合适的控制方式非常重要。
通过一个实际例子来详细讲解位置式PID控制。假设我们要控制一个直流电机的转速,并且要求精确控制电机的转速,使其达到一个设定的目标值。我们使用位置式PID控制器来调节电机的速度。
2. 位置式PID控制的基本原理
位置式PID控制器基于误差(当前目标值与实际值之间的差)来调整控制量。其控制公式如下:
u
(
t
)
=
K
p
⋅
e
(
t
)
+
K
i
⋅
∫
0
t
e
(
τ
)
d
τ
+
K
d
⋅
d
e
(
t
)
d
t
u(t) = K_p \cdot e(t) + K_i \cdot \int_0^t e(\tau) d\tau + K_d \cdot \frac{de(t)}{dt}
u(t)=Kp⋅e(t)+Ki⋅∫0te(τ)dτ+Kd⋅dtde(t) 其中:
u
(
t
)
u(t)
u(t) 是控制输出(电机的控制信号,通常是PWM信号)。
e
(
t
)
e(t)
e(t) 是误差,即目标速度与当前速度之间的差异:
e
(
t
)
=
Target
−
Current Speed
e(t) = \text{Target} - \text{Current Speed}
e(t)=Target−Current Speed。
K
p
K_p
Kp、
K
i
K_i
Ki、
K
d
K_d
Kd 分别是比例、积分、微分增益。
∫
0
t
e
(
τ
)
d
τ
\int_0^t e(\tau) d\tau
∫0te(τ)dτ 是误差的积分,表示累计的偏差。
d
e
(
t
)
d
t
\frac{de(t)}{dt}
dtde(t) 是误差的微分,表示误差变化的速率。
通过不断计算误差、误差的积分和微分,PID控制器可以根据目标速度来调整电机的输入,直到电机的实际速度与目标速度一致。
实际例子:直流电机速度控制
假设我们要控制一个直流电机的转速,让电机从静止状态(0 RPM)加速到设定的目标转速(例如,1000 RPM)。
1. 系统模型
目标:让电机的转速从0 RPM加速到1000 RPM。当前速度:电机实际速度通过编码器测量得到。控制量:PWM信号,用于控制电机的电流,进而控制电机的转速。
2. PID控制器的工作流程
在每次周期(例如每秒钟或每10ms),控制器会计算当前的误差(目标速度与实际速度之间的差异),然后通过PID公式计算输出的控制信号。
假设:
目标速度(Target Speed)= 1000 RPM。当前速度(Current Speed)是通过编码器实时测量的,比如在当前时刻,实际速度是800 RPM。使用的PID参数:
比例增益
K
p
=
2
K_p = 2
Kp=2积分增益
K
i
=
0.5
K_i = 0.5
Ki=0.5微分增益
K
d
=
0.1
K_d = 0.1
Kd=0.1
3. PID计算过程
在当前时刻,目标速度是1000 RPM,当前速度是800 RPM,因此误差
e
(
t
)
e(t)
e(t) 为:
e
(
t
)
=
Target Speed
−
Current Speed
=
1000
−
800
=
200
e(t) = \text{Target Speed} - \text{Current Speed} = 1000 - 800 = 200
e(t)=Target Speed−Current Speed=1000−800=200
根据位置式PID公式,控制量
u
(
t
)
u(t)
u(t) 计算如下:
比例项:
K
p
⋅
e
(
t
)
=
2
⋅
200
=
400
K_p \cdot e(t) = 2 \cdot 200 = 400
Kp⋅e(t)=2⋅200=400积分项:假设上一个误差是150 RPM,积分项是误差的累计,积分部分可以通过近似计算(假设误差随时间稳定):
∫
0
t
e
(
τ
)
d
τ
≈
Previous Integral
+
e
(
t
)
=
150
+
200
=
350
\int_0^t e(\tau) d\tau \approx \text{Previous Integral} + e(t) = 150 + 200 = 350
∫0te(τ)dτ≈Previous Integral+e(t)=150+200=350 积分项为:
K
i
⋅
∫
0
t
e
(
τ
)
d
τ
=
0.5
⋅
350
=
175
K_i \cdot \int_0^t e(\tau) d\tau = 0.5 \cdot 350 = 175
Ki⋅∫0te(τ)dτ=0.5⋅350=175微分项:假设上一个误差变化率为50 RPM/s(误差从150 RPM变化到200 RPM),微分项为:
K
d
⋅
d
e
(
t
)
d
t
=
0.1
⋅
50
=
5
K_d \cdot \frac{de(t)}{dt} = 0.1 \cdot 50 = 5
Kd⋅dtde(t)=0.1⋅50=5
因此,总的控制量
u
(
t
)
u(t)
u(t) 为:
u
(
t
)
=
400
+
175
+
5
=
580
u(t) = 400 + 175 + 5 = 580
u(t)=400+175+5=580
4. 输出控制信号
控制量
u
(
t
)
=
580
u(t) = 580
u(t)=580 被作为PWM信号输出给电机驱动器,用于控制电机的电流。电机驱动器根据这个控制信号调整电机的功率,从而增加电机的转速。
5. 下一周期
在下一个周期,PID控制器会再次根据新的误差计算新的控制量。例如,假设在下一时刻,电机的速度已经提升到900 RPM,则新的误差为:
e
(
t
)
=
1000
−
900
=
100
e(t) = 1000 - 900 = 100
e(t)=1000−900=100 然后,PID控制器会重复上述步骤,根据新的误差计算新的控制信号。
PID调节过程的特点
比例项:比例项根据当前误差直接调整控制信号,它的作用是快速响应误差,减小偏差。例如,如果目标速度与当前速度相差较大,比例项会给予较大的控制信号,从而快速减少误差。积分项:积分项通过累积历史误差来消除长期存在的小误差(如稳态误差)。它在系统稳定后,能继续调节控制量,确保电机速度能精确达到目标速度。微分项:微分项用于预测误差的变化率,并抑制误差的过冲。它在系统快速变化时能够有效减少过度反应,提供平稳的控制。
总结
在这个实际例子中,位置式PID控制器通过计算目标速度与实际速度之间的误差,逐步调整控制信号(PWM)来改变电机的转速。PID控制器的三个部分:比例项、积分项和微分项分别负责:
快速响应(比例项);消除稳态误差(积分项);抑制过冲和提高系统稳定性(微分项)。
通过不断迭代更新误差并调整控制信号,位置式PID控制器能够让电机精确达到目标速度并维持稳定。
3. 模糊PID算法和传统的PID算法
模糊PID算法和传统的PID算法在控制策略和实现方式上有显著的区别。以下是它们的主要差异:
1. 控制策略
传统PID控制: 传统PID控制器是基于经典的比例(P)、积分(I)和微分(D)控制策略,主要通过计算误差的当前值、累计值和变化率来调整控制量。控制量的计算是基于线性的误差关系,适用于误差变化较为规律且可预测的系统。
模糊PID控制: 模糊PID算法结合了模糊逻辑控制和传统PID控制的特点。模糊PID控制器通过使用模糊逻辑推理来调整比例、积分和微分的增益,而不是使用固定的数值。模糊逻辑控制的核心是将控制过程中的输入(如误差和误差变化率)转化为模糊集合,然后通过模糊推理规则得出相应的控制量。这使得模糊PID能够灵活应对非线性、不确定性和复杂系统的控制问题。
2. 参数调节
传统PID控制: 在传统PID中,控制器的参数(
K
p
K_p
Kp、
K
i
K_i
Ki、
K
d
K_d
Kd)是预先设置的,需要通过实验或经验来调节,并且这些参数一般在系统运行过程中保持固定。如果系统的工作条件发生变化(如负载变化、外部干扰等),传统PID控制器可能无法很好地适应,导致性能下降或产生较大的超调和振荡。
模糊PID控制: 在模糊PID中,PID控制器的参数通常是由模糊规则动态调整的。模糊PID控制器通过对误差和误差变化率的模糊化处理,自动调整PID增益,使得控制器能够适应系统动态变化,自动优化控制性能,尤其在复杂或非线性系统中表现得更加灵活。
3. 处理误差的方法
传统PID控制: 传统PID直接利用系统的误差(
e
(
t
)
e(t)
e(t))、误差积分(
∫
e
(
t
)
d
t
\int e(t) dt
∫e(t)dt)和误差的微分(
d
e
(
t
)
d
t
\frac{de(t)}{dt}
dtde(t))来调整输出。该方法依赖于误差的线性变化,若系统误差非线性或者变化复杂时,传统PID可能不够有效。
模糊PID控制: 模糊PID则通过将误差和误差的变化率(通常作为输入)转化为模糊语言变量(如“大”、“小”、“正”、“负”等),再通过模糊规则进行推理来得到控制增益,从而产生更为平滑和灵活的控制输出。模糊PID能够处理较为复杂和非线性的误差情况,具有更好的适应性。
4. 控制器的鲁棒性
传统PID控制: 传统PID控制器的鲁棒性通常较差,因为其性能高度依赖于正确的参数设置。如果系统参数发生变化,传统PID可能需要重新调节,并且在面对非线性和时变系统时,常常出现不稳定或过度响应。
模糊PID控制: 模糊PID控制器具有较强的鲁棒性,特别是在面对系统的不确定性和非线性时。模糊PID不依赖于精确的数学模型,可以通过模糊规则自动调整其控制行为,因此在处理复杂、动态变化的系统时更加灵活,能够更好地适应不同的工作条件。
5. 适用范围
传统PID控制: 传统PID适用于误差变化比较规则、线性或近似线性、且系统动态比较简单的控制场景。对于一些参数变化不大的系统,PID控制非常有效。
模糊PID控制: 模糊PID控制更适合处理那些具有较大非线性、时变特性、系统不确定性或复杂控制要求的系统。例如,模糊PID在温度控制、伺服系统、机器人控制、风力发电机控制等领域中具有较大的优势。
6. 实现复杂度
传统PID控制: 传统PID的实现较为简单,所需的计算量少,硬件和软件实现成本较低。它只需要实时计算误差、积分和微分,并用固定的增益来控制。
模糊PID控制: 模糊PID的实现相对复杂,因为它需要将误差和误差变化率转换成模糊集合,并设计模糊规则和推理过程。虽然现代计算平台的计算能力已经可以胜任这一任务,但其实现和调试通常较为复杂。
7. 对外部干扰的反应
传统PID控制: 传统PID对外部扰动的反应较为直接,有时可能出现过度反应或震荡,尤其是在扰动较大时。尽管通过合理的参数调节可以改善这种情况,但在面对快速变化的扰动时,PID可能会出现滞后或不稳定的现象。
模糊PID控制: 模糊PID由于能够根据模糊规则动态调整控制器的增益,它能更好地应对外部扰动,尤其在扰动或负载变化较大的环境中,能够提供较为平稳的控制响应。
总结:
传统PID控制 适用于系统模型较简单且误差变化相对规律的情况,易于实现,但对于复杂、非线性和时变系统的适应能力较差。模糊PID控制 结合了模糊控制的灵活性和PID的基本控制原理,能够更好地应对非线性、动态变化较大的系统,具有较强的鲁棒性和适应性,但实现较为复杂,计算量较大。
在选择控制器时,如果系统的动态特性较为复杂,或者系统面对不确定性较大时,模糊PID通常会表现得比传统PID更为出色。
增量式PID控制的实例讲解
假设我们要控制一个直流电机的转速,我们使用增量式PID控制算法来精确调节电机的转速。与位置式PID不同,增量式PID计算的是控制信号的增量,而不是控制信号的绝对值。
1. 增量式PID控制的基本原理
增量式PID控制器的基本公式如下:
Δ
u
(
t
)
=
K
p
⋅
(
e
(
t
)
−
e
(
t
−
1
)
)
+
K
i
⋅
e
(
t
)
+
K
d
⋅
(
e
(
t
)
−
2
e
(
t
−
1
)
+
e
(
t
−
2
)
)
\Delta u(t) = K_p \cdot (e(t) - e(t-1)) + K_i \cdot e(t) + K_d \cdot (e(t) - 2e(t-1) + e(t-2))
Δu(t)=Kp⋅(e(t)−e(t−1))+Ki⋅e(t)+Kd⋅(e(t)−2e(t−1)+e(t−2))
其中:
(\Delta u(t)) 是本次控制量的增量(即本次输出与上次输出的差值)。(e(t)) 是当前时刻的误差,即目标值与实际值的差。(e(t-1)) 和 (e(t-2)) 分别是前两次的误差。(K_p)、(K_i)、(K_d) 分别是比例、积分、微分增益。
增量式PID的特点是计算每次输出的增量,然后通过叠加来得到当前控制信号。
2. 实际例子:直流电机的速度控制
假设我们需要通过增量式PID控制一个直流电机的速度,目标是让电机的转速从静止加速到1000 RPM。
系统模型
目标转速(Target Speed)= 1000 RPM当前转速(Current Speed)是通过编码器实时测量的。控制信号:PWM信号,用于控制电机的电流,从而控制电机的转速。
PID参数设置
比例增益
K
p
=
2
K_p = 2
Kp=2积分增益
K
i
=
0.5
K_i = 0.5
Ki=0.5微分增益
K
d
=
0.1
K_d = 0.1
Kd=0.1
增量式PID计算过程
初始条件:
假设初始时刻电机转速为0 RPM,即实际速度为0 RPM。目标速度为1000 RPM。 第一次控制(t=0):
当前误差
e
(
0
)
=
Target Speed
−
Current Speed
=
1000
−
0
=
1000
e(0) = \text{Target Speed} - \text{Current Speed} = 1000 - 0 = 1000
e(0)=Target Speed−Current Speed=1000−0=1000前一次误差
e
(
−
1
)
=
0
e(-1) = 0
e(−1)=0 和
e
(
−
2
)
=
0
e(-2) = 0
e(−2)=0(假设初始时误差为零)。 根据增量式PID公式:
比例项:
K
p
⋅
(
e
(
0
)
−
e
(
−
1
)
)
=
2
⋅
(
1000
−
0
)
=
2000
K_p \cdot (e(0) - e(-1)) = 2 \cdot (1000 - 0) = 2000
Kp⋅(e(0)−e(−1))=2⋅(1000−0)=2000积分项:
K
i
⋅
e
(
0
)
=
0.5
⋅
1000
=
500
K_i \cdot e(0) = 0.5 \cdot 1000 = 500
Ki⋅e(0)=0.5⋅1000=500微分项:
K
d
⋅
(
e
(
0
)
−
2
e
(
−
1
)
+
e
(
−
2
)
)
=
0.1
⋅
(
1000
−
0
+
0
)
=
100
K_d \cdot (e(0) - 2e(-1) + e(-2)) = 0.1 \cdot (1000 - 0 + 0) = 100
Kd⋅(e(0)−2e(−1)+e(−2))=0.1⋅(1000−0+0)=100 因此,本次控制量增量为:
Δ
u
(
0
)
=
2000
+
500
+
100
=
2600
\Delta u(0) = 2000 + 500 + 100 = 2600
Δu(0)=2000+500+100=2600 这意味着电机驱动器会输出增量控制信号2600。
第二次控制(t=1):
假设在第一次控制后,电机转速提高到300 RPM(实际速度为300 RPM)。当前误差
e
(
1
)
=
1000
−
300
=
700
e(1) = 1000 - 300 = 700
e(1)=1000−300=700前一次误差
e
(
0
)
=
1000
e(0) = 1000
e(0)=1000 和
e
(
−
1
)
=
0
e(-1) = 0
e(−1)=0。 根据增量式PID公式:
比例项:
K
p
⋅
(
e
(
1
)
−
e
(
0
)
)
=
2
⋅
(
700
−
1000
)
=
−
600
K_p \cdot (e(1) - e(0)) = 2 \cdot (700 - 1000) = -600
Kp⋅(e(1)−e(0))=2⋅(700−1000)=−600积分项:
K
i
⋅
e
(
1
)
=
0.5
⋅
700
=
350
K_i \cdot e(1) = 0.5 \cdot 700 = 350
Ki⋅e(1)=0.5⋅700=350微分项:
K
d
⋅
(
e
(
1
)
−
2
e
(
0
)
+
e
(
−
1
)
)
=
0.1
⋅
(
700
−
2000
+
0
)
=
−
130
K_d \cdot (e(1) - 2e(0) + e(-1)) = 0.1 \cdot (700 - 2000 + 0) = -130
Kd⋅(e(1)−2e(0)+e(−1))=0.1⋅(700−2000+0)=−130 因此,本次控制量增量为:
Δ
u
(
1
)
=
−
600
+
350
−
130
=
−
380
\Delta u(1) = -600 + 350 - 130 = -380
Δu(1)=−600+350−130=−380 这意味着电机驱动器会调整PWM信号,减小控制量380。
第三次控制(t=2):
假设电机转速继续提升,达到500 RPM(实际速度为500 RPM)。当前误差
e
(
2
)
=
1000
−
500
=
500
e(2) = 1000 - 500 = 500
e(2)=1000−500=500前一次误差
e
(
1
)
=
700
e(1) = 700
e(1)=700 和
e
(
0
)
=
1000
e(0) = 1000
e(0)=1000。 根据增量式PID公式:
比例项:
K
p
⋅
(
e
(
2
)
−
e
(
1
)
)
=
2
⋅
(
500
−
700
)
=
−
400
K_p \cdot (e(2) - e(1)) = 2 \cdot (500 - 700) = -400
Kp⋅(e(2)−e(1))=2⋅(500−700)=−400积分项:
K
i
⋅
e
(
2
)
=
0.5
⋅
500
=
250
K_i \cdot e(2) = 0.5 \cdot 500 = 250
Ki⋅e(2)=0.5⋅500=250微分项:
K
d
⋅
(
e
(
2
)
−
2
e
(
1
)
+
e
(
0
)
)
=
0.1
⋅
(
500
−
1400
+
1000
)
=
10
K_d \cdot (e(2) - 2e(1) + e(0)) = 0.1 \cdot (500 - 1400 + 1000) = 10
Kd⋅(e(2)−2e(1)+e(0))=0.1⋅(500−1400+1000)=10 因此,本次控制量增量为:
Δ
u
(
2
)
=
−
400
+
250
+
10
=
−
140
\Delta u(2) = -400 + 250 + 10 = -140
Δu(2)=−400+250+10=−140 这意味着电机驱动器会再次调整PWM信号,减小控制量140。
控制信号更新过程
每次计算得到的控制量增量 (\Delta u(t)) 会叠加到上一次的控制信号中,形成新的控制信号。假设初始时刻的控制信号为零,控制信号的更新过程如下:
第一次控制后:控制信号 = 0 + 2600 = 2600第二次控制后:控制信号 = 2600 + (-380) = 2220第三次控制后:控制信号 = 2220 + (-140) = 2080
随着时间的推移,控制器会根据电机转速的变化,动态地调整PWM信号,以尽量减小误差并使电机稳定在目标转速。
增量式PID控制的特点
平滑调整:增量式PID控制通过逐步调整控制量的增量,使得系统能够平滑地调整输出,避免了过大的瞬时变化。历史误差的影响:每次控制的增量不仅依赖当前误差,还考虑了历史误差(前两次误差)。这使得控制器能够更好地应对误差变化的趋势。避免积分风暴:由于控制量是增量更新的,增量式PID能够避免传统PID中的积分项累积过多(即积分风暴)导致系统震荡的情况。
总结
在这个实例中,增量式PID控制器通过计算每次误差的增量来逐步调整电机的转速控制信号。它的优点是每次输出控制信号的增量可以平稳地调节系统,避免了过度的波动和震荡,同时能够有效地响应误差变化。增量式PID控制非常适合处理需要逐步调节、响应平稳的控制系统。