一阶纯滞后系统与变速积分PID算法
1.一阶纯滞后系统
一阶纯滞后系统模型为:
G
(
s
)
=
K
T
s
+
1
e
−
τ
s
G(s)=\frac{K}{Ts+1}e^{-\tau s}
G(s)=Ts+1Ke−τs
其中,K为静态增益,T为时间常数,tau为纯滞后常数。
以下方实际模型为例分析一阶纯滞后模型:
G
(
s
)
=
1
s
+
1
e
−
5
s
G(s) = \frac{1}{s+1}e^{-5s}
G(s)=s+11e−5s
使用simulink建立开环系统,给定阶跃输入,查看输入与输出的响应,系统框图如下所示:
输入与输出的响应如下所示:
- 纯滞后时间
纯滞后时间:纯滞后时间tau是从控制器输入到输出变化开始发生变化之间经过的时间。
纯滞后环节是指由于对象的测量环节、传输环节或其他环节造成整个系统输出纯滞后与输入变化的现象。
如图所示,阶跃信号在1s处给定,控制器在6s处发生变化,所以纯滞后时间为6s-1s=5s。
- 时间常数
时间常数描述了控制器输出变化时过程变量的响应速度。
时间常数是阶跃变化时一阶过程响应中过程变量开始变化到首次达到其总变化量的63.2%。
时间常数越小,过程越快。
- 增益
增益是过程变量变化对控制器输出变化响应倍数,或过程变量的稳态变化除以控制器输出的稳态变化。
纯滞后环节(如时间延迟)不会改变系统的可控性。系统的可控性由原系统的结构决定,加入纯滞后后,系统的可控性保持不变。在离散时间系统中,通过状态增广后可控性得以保留;在连续时间系统中,若采用有限维近似或合理建模,可控性同样不受影响。因此,纯滞后仅增加系统复杂性或响应延迟,不破坏可控性。
2.一阶纯滞后系统-PI控制
对于该一阶纯滞后系统,通过Lambda 整定法对PI控制器进行参数整定:
- Lambda整定法
Lambda整定鲁棒性优先,牺牲响应速度以提高鲁棒性,适用于对超调敏感的场景.
$$
G(s)=\frac{1}{s+1}e^{-5s},其中K=1,T=1,L=5. \
设定闭环时间常数\tau_{c}=max(L,2T),即\tau_c=5。 \
K_p = \frac{T}{K(\tau_c + L)} = \frac{1}{1*(5+5)} = 0.1 \
T_i = T =1 \
K_i = \frac{K_p}{T_i} = 0.1
$$
3.变速积分PID算法
在普通的PID控制算法中,由于积分系数k是常数,所以在整个控制过程中,积分增量不变。而系统对于积分项的要求是,系统偏差大时积分作用应减弱甚至全无,而在偏差小时则应加强。积分系数取大了会产生超调,甚至积分饱和,取小了又迟迟不能消除静态误差。因此,如何根据系统偏差大小改变积分速度,对于提高系统品质是很重要的。变速积分PID可较好的解决这一问题。
变速积分PID的基本思想是设法改变积分项的累加速度,使其与偏差大小相对应;偏差越大,积分越慢,反之则越快。
为此,设置系数f[e(k)],它是e(k)的函数。当|e(k)|增大时,f减小,反之增大。变速积分的PID积分项表达式为:
u
i
(
k
)
=
k
i
{
∑
i
=
0
k
−
1
e
(
i
)
+
f
[
e
(
k
)
]
e
(
k
)
}
T
u_i(k)=k_i\{\sum_{i=0}^{k-1}e(i)+f[e(k)]e(k) \}T
ui(k)=ki{i=0∑k−1e(i)+f[e(k)]e(k)}T
系数f的表达式为
f
[
e
(
k
)
]
=
{
1
|e(k)|≤B
A
−
∣
e
(
k
)
∣
+
B
A
B<|e(k)|≤A+B
0
|e(k)|>A+B
f[e(k)] = \begin{cases} 1& \text{|e(k)|≤B} \\ \frac{A-|e(k)|+B}{A}& \text{B<|e(k)|≤A+B} \\ 0& \text{|e(k)|>A+B} \end{cases}
f[e(k)]=⎩
⎨
⎧1AA−∣e(k)∣+B0|e(k)|≤BB<|e(k)|≤A+B|e(k)|>A+B
对于A = B的情况,则变成“积分分离的PID算法”
在普通PID控制中引入积分环节的目的,主要是为了消除静态误差,提高控制精度。但在过程的启动、结束或大幅度增减设定值时,短时间内系统输出有很大误差,会造成PID运算的积分累计,致使控制量超过执行机构可能允许的最大动作范围对应的极限控制参数,引起系统较大的超调,甚至引起系统较大的振荡。
积分分离的基本思路是:当被控量与设定值偏差较大时,取消积分作用,以免由于积分作用是系统稳定性降低,超调量增大;当被控量接近给定值时,引入积分控制,以便消除静态误差,提高控制精度。
积分分离算法可表示为:
u ( k ) = k p e r r o r ( k ) + β k i ∑ j = 0 k e r r o r ( j ) T + k d ( e r r o r ( k ) − e r r o r ( k − 1 ) ) T u(k)=k_perror(k)+\beta k_i \sum_{j=0}^k error(j)T+\frac{k_d(error(k)-error(k-1))}{T} u(k)=kperror(k)+βkij=0∑kerror(j)T+Tkd(error(k)−error(k−1))
其中,T为采样时间,β为积分项的开关系数。
β = { 1 |error(k|≤ ϵ 0 |error(k|> ϵ \beta = \begin{cases} 1& \text{|error(k|≤ $\epsilon$ } \\ 0& \text{|error(k|> $\epsilon$ } \end{cases} β={10|error(k|≤ ϵ |error(k|> ϵ
以变速积分PID为例:
clear all;
close all;
ts = 20;
sys = tf([1], [60, 1], 'inputdelay', 80);
dsys = c2d(sys, ts, 'zoh');
[num, den] = tfdata(dsys, 'v');
u_1 = 0; u_2 = 0; u_3 = 0; u_4 = 0; u_5 = 0;
y_1 = 0; y_2 = 0; y_3 = 0;
error_1 = 0; error_2 = 0;
ei = 0;
for k = 1:1:50
time(k) = k*ts;
yd(k) = 1.0;
y(k) = -den(2)*y_1 + num(2)*u_5;
error(k) = yd(k) - y(k);
kp = 0.45; kd = 12; ki = 0.0048;
A = 0.4; B = 0.6;
ei = ei + (error(k) + error_1)/2*ts;
M = 1; % 1-variable speed 2-non
if M == 1
if abs(error(k)) <= B
f(k) = 1;
elseif abs(error(k)) > B & abs(error(k)) <= (A + B)
f(k) = (A + B - abs(error(k)))/A;
else
f(k) = 0;
end
elseif M == 2
f(k) = 1;
end
u(k) = kp*error(k) + kd*(error(k) - error_1)/ts + ki*f(k)*ei;
if u(k) >= 10
u(k) = 10;
elseif u(k) <= -10
u(k) = -10;
end
u_5 = u_4; u_4 = u_3; u_3 = u_2; u_2 = u_1; u_1 = u(k);
y_3 = y_2; y_2 = y_1; y_1 = y(k);
error_2 = error_1;
error_1 = error(k);
end
figure(1);
plot(time, yd, 'r', time, y, 'k:', 'LineWidth', 2);
xlabel('time(s)'); ylabel('yd, y');
legend('ideal position', 'pos tracking');
figure(2);
plot(time, f, 'r', 'LineWidth', 2);
xlabel('time(s)'); ylabel('f(k)');
其中变速积分和积分系数图像如下图所示:
普通PID如下图所示:
显然,使用变速PID的控制效果更好。