关键字:Matalb;PID;临界比例度;参数整定
系列文章目录
前言
PID控制作为工业常用控制方法,其控制效果与三个参数比例系数、积分系数和微分系数息息相关,通过一定的方法,对其进行整定就成为PID控制中较为重要的一环。
提示:本文对一些复杂的流程与概念进行了简化与省略,如果想详细了解的小伙伴可以参考刘金琨老师的《先进PID控制MATLAB仿真 -第4版》的第2章(需要电子版请私戳)
一、应用PID控制的SISO系统
在应用PID控制的SISO(单输入单输出)系统如图1.1:
其中 K p K_p Kp、 K i K_i Ki和 K d K_d Kd分别是比例系数、积分系数和微分系数。
二、临界比例度法
1.整定公式
临界比例度法是一种经验公式,在本博文中将直接使用该公式:
其中
δ
τ
\delta_\tau
δτ、
T
τ
T_\tau
Tτ分别是比例度、等幅振荡的周期。
2.整定步骤
- 在P控制器的情况下开始
u ( k ) = 1 δ τ e ( k ) = 1 δ τ [ r ( k ) − c ( k ) ] (1) u\left( k \right)=\frac{1}{\delta_\tau}e\left( k \right)=\frac{1}{\delta_\tau}\left[r\left( k \right)-c\left( k \right)\right] \tag{1} u(k)=δτ1e(k)=δτ1[r(k)−c(k)](1)其中 u ( k ) u\left( k \right) u(k)、 e ( k ) e\left( k \right) e(k)、 r ( k ) r\left( k \right) r(k)和 c ( k ) c\left( k \right) c(k)分别表示当前采样时刻的控制器输出、误差、输入和输出; - 从 K p K_p Kp较小的情况下,即比例度值较大开始调整,逐步减小其值;
- 当系统输出达到临界震荡时,此刻的比例度即为 δ τ \delta_\tau δτ,此时的震荡周期即为 T τ T_\tau Tτ。
注意:只有自平衡对象才能使用此方法。自平衡对象如:水缸液位——经过进水与出水阀,水缸液位总能稳定在一个新的或原来的稳态。非自平衡对象如:单轴倒立摆小车——不增加控制器,从平衡状态下,一旦有电机动作倒立摆将不再平衡。
三、MATLAB实现
考虑被控对象的传递函数:
G
(
s
)
=
5
e
−
2
s
1.5
s
2
+
2.5
s
+
1
(2)
G\left( s \right)=\frac{5e^{-2s}}{1.5s^2+2.5s+1} \tag{2}
G(s)=1.5s2+2.5s+15e−2s(2)实现对上述传递函数的PID控制器参数整定,代码如下:
% Critical proportionality method for PID parameter
clc;
clear;
close all;
%%
N=500; %采样点个数
delta_tau=2.8; %δτ
T_tau=9; %Tτ
num_c=5; %传递函数分子系数
den_c=[1.5 2.5 1]; %传递函数分母系数
tol=2; %纯滞后参数
Ts=1; %采样时间
sys_c=tf(num_c,den_c,'inputdelay',tol); %连续系统
sys_d=c2d(sys_c,Ts,'zoh'); %离散系统(Z变换)
[num_d,den_d]=tfdata(sys_d,'v'); %Z变换后传递函数的分子、分母系数
time=ones(1,N);
r=ones(1,N);
c=ones(1,N);
e=ones(1,N);
de=ones(1,N);
u=ones(1,N);
u_1=0.0;u_2=0.0;u_3=0.0;u_4=0.0; %u_1=u(k-1)、u_2=u(k-2)、u_3=u(k-3)、u_4=u(k-4)
e_1=0; %e_1=e(k-1)
ei=0;
c_1=0.0;c_2=0.0; %c_1=c(k-1)、c_2=c(k-2)
%%
for k=1:1:N
time(k)=k*Ts; %时间向量
r(k)=1.0; %系统输入
c(k)=-den_d(2)*c_1-den_d(3)*c_2+num_d(2)*u_3+num_d(3)*u_4; %系统输出
e(k)=r(k)-c(k); %系统误差
de(k)=(e(k)-e_1)/Ts; %误差微分
ei=ei+Ts*e(k); %误差积分
% 通过控制参数M的改变控制器类型
M=1;
% 整定比例度参数
if M==1
delta=delta_tau;
u(k)=1/delta*e(k);
% P控制器下的系统输出
elseif M==2
delta=2*delta_tau;
u(k)=1/delta*e(k);
% PI控制器下的系统输出
elseif M==3
delta=2.2*delta_tau;
Ti=0.85*T_tau;
u(k)=1/delta*(e(k)+1/Ti*ei);
% PID控制器下的系统输出
elseif M==4
delta=1.7*delta_tau;
Ti=0.5*T_tau;
Td=0.13*T_tau;
u(k)=1/delta*(e(k)+1/Ti*ei+Td*de(k));
end
%更新系统参数
e_1=e(k);
u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
c_2=c_1;c_1=c(k);
end
%%
%画图
plot(time,r,'r-',time,c,'k:','linewidth',2);
xlabel('time(s)');ylabel('Position tracking');
legend('Ideal position signal','Position tracking','loaction','NorthEast');
在上述代码中有几个问题需要注意:
①离散输出的形式需要根据Z变换后的传递函数确定:
U
C
=
n
u
m
(
2
)
z
−
3
+
n
u
m
(
3
)
z
−
4
d
e
n
(
1
)
+
d
e
n
(
2
)
z
−
1
+
d
e
n
(
3
)
z
−
2
(3)
\frac{U}{C}=\frac{num \left( 2 \right)z^{-3}+num\left( 3 \right)z^{-4}}{den \left( 1 \right)+den \left( 2 \right)z^{-1}+den\left( 3 \right)z^{-2}} \tag{3}
CU=den(1)+den(2)z−1+den(3)z−2num(2)z−3+num(3)z−4(3)以上的公式可以根据图3.1推得:
②纯滞后环节的Z变换:如图3.1中单独的
z
−
2
z^{-2}
z−2这一项,就是由纯滞后环节
e
−
2
×
T
s
e^{-2\times T_s}
e−2×Ts变换的得来,注意如果
T
s
=
0.1
T_s=0.1
Ts=0.1,则纯滞后环节的Z变换则变为
z
−
20
z^{-20}
z−20。
③整定流程
在
M
=
1
M=1
M=1情况下调节
δ
τ
=
5
\delta_\tau=5
δτ=5:
减小到一半
δ
τ
=
2.5
\delta_\tau=2.5
δτ=2.5:
现在可以断定的是临界稳定的大概范围为
(
2.5
,
5
)
\left(2.5,5\right)
(2.5,5),在多次实验后可得
δ
τ
=
2.8
\delta_\tau=2.8
δτ=2.8时系统输出为临界稳定:
并且在此时震荡的周期
T
τ
=
9
T_\tau=9
Tτ=9:
随后分别令M=2、3、4即可得到P、PI、PID控制下的系统输出:
总结
总结什么的不想写了,就放一段文字在这里😉。
参考文献
[1]刘金琨. 先进PID控制MATLAB仿真.第4版[M]. 电子工业出版社, 2016.