最小拍控制系统

采样周期为T=0.1s
T=0.1;
G=zpk([],[0 -1],5);
display(G)
G = 5 ------- s (s+1) Continuous-time zero/pole/gain model.

一、最小拍有纹波系统

针对图一所示的计算机控制系统,考虑输入为单位速度信号时,进行计算机控制算法D(Z)设计,编程实现最小拍有纹波系统;

1.1该系统的广义脉冲传递函数为:

Wd=c2d(G,T,'zoh');
%Wd的零极点
[zero,pole,~]=zpkdata(Wd);
zero=zero{1};pole=pole{1};
Wd.variable='z^-1';
display(Wd);
Wd = 0.024187 z^-1 (1+0.9672z^-1) ---------------------------- (1-z^-1) (1-0.9048z^-1) Sample time: 0.1 seconds Discrete-time zero/pole/gain model.

1.2有纹波最小拍系统的闭环传递函数及数字控制器的脉冲传递函数

从结果可以看出,广义脉冲传递函数没有不稳定的零极点,没有纯滞后环节,系统稳定,可以使用对简单对象的最小拍控制的设计方法。
由于输入为单位速度信号r(t)=t,查表5.1[2]
z=tf('z',T);
We=(1-z^-1)^2;
WB=1-We;
WB=minreal(WB)
WB = 2 z - 1 ------- z^2 Sample time: 0.1 seconds Discrete-time transfer function.
D=WB/(Wd*(1-WB));
D=minreal(D)
D = 82.689 (1-0.5z^-1) (1-0.9048z^-1) --------------------------------- (1+0.9672z^-1) (1-z^-1) Sample time: 0.1 seconds Discrete-time zero/pole/gain model.

1.3分析数字控制器D(z)对系统的控制效果

当控制型号为单位速度信号时,需要两排达到想要的控制效果
figure('position',[0,0,700,300]);
subplot(1,2,1)
lsimplot(WB/Wd,0:0.1:1,0:0.1:1);
ylabel('u(t)');
subplot(1,2,2);
lsimplot(WB,0:0.1:1,0:0.1:1);
grid on;
ylabel('y(t)');
当控制信号为单位阶跃信号时,需要两拍达到控制效果
figure('position',[0,0,700,300]);
subplot(1,2,1)
stepplot(WB/Wd,1);
ylabel('u(t)');
subplot(1,2,2)
stepplot(WB,1);
ylabel('y(t)');
当控制信号为单位脉冲信号时,需要三拍达到目标控制效果
figure('position',[0,0,700,300]);
subplot(1,2,1)
impulseplot(WB/Wd,1);
ylabel('u(t)');
subplot(1,2,2);
impulseplot(WB,1);
ylabel('y(t)');

1.4 纹波情况

通过simulink仿真可以看到明显的纹波
%run simulink
simOut = sim('withPattern.slx','SaveOutput','on','OutputSaveName','yout','SaveFormat', 'Dataset');
%get data
outputs = simOut.get('yout');
r = (outputs.get('r').Values);
y = (outputs.get('y').Values);
figure();hold on;
plot(r);plot(y);
legend('r(t)','y(t)');
title('simulink 仿真结果')
grid on;
hold off;

二、最小拍无纹波系统

讨论纹波的生成原因,编程实现最小拍无纹波系统;

2.0 纹波形成的原因

如果系统进入稳态后,加在被控对象上的控制信号还在波动,则稳态过程中系统输出就有纹波

2.1 计算所需的闭环传递函数

最小拍无纹波控制必须满足以下条件
  1. 被控对象W(s)中必须包含足够多的积分环节(>=m-1阶),输入单位阶跃信号时为m=1
  2. 满足纹波控制的稳定性和控制器的物理可实现
  3. WB(z)包含W(z)中的所有零点
beta=-1*zero(1);
%from blue book p149
f1=(2+3*beta)/(1+beta)^2;
f2=-1*(1+2*beta)/(1+beta)^2;
WB2=(f1*z^(-1)+f2*z^(-2))*(1+beta*z^(-1))
WB2 = 1.267 z^3 + 0.4668 z^2 - 0.7334 z --------------------------------- z^4 Sample time: 0.1 seconds Discrete-time transfer function.

2.2数字控制器D的计算

D2=1/Wd*WB2/(1-WB2);
D2=minreal(D2)
D2 = 52.367 (1-0.9048z^-1) (1-0.5987z^-1) ------------------------------------ (1+0.7334z^-1) (1-z^-1) Sample time: 0.1 seconds Discrete-time zero/pole/gain model.

2.3 性能分析

当输入为单位速度信号时,需要三拍实现所需的控制效果。
figure('position',[0,0,700,300]);
subplot(1,2,1);
hold on;
stairs(t,y);
plot(t,r);
ylabel('y(t)');
subplot(1,2,2)
stairs(t,r-y)
ylabel('e(t)');

2.4 纹波情况

使用simulink模拟
%run simulink
simOut = sim('noPattern.slx','SaveOutput','on','OutputSaveName','yout','SaveFormat', 'Dataset');
%get data
outputs = simOut.get('yout');
r = (outputs.get('r').Values);
y = (outputs.get('y').Values);
figure();hold on;
plot(r);plot(y);
legend('r(t)','y(t)');
title('simulink 仿真结果')
grid on;
hold off;

三、改进最小拍系统

讨论最小拍系统的特点,采取惯性因子法对最小拍控制器加以改进,并研究惯性因子对系统性能的影响。
c=0.45;

3.1 设计闭环传递函数

脉冲闭环传递函数可以设计为:
闭环脉冲传递函数
其中f1和f2通过以下条件得出
\
%from blue book P151
f1=2-c;f2=-1;
WB3=(f1*z^(-1)+f2*z^(-2))/(1-c*z^(-1))
WB3 = 1.55 z^3 - z^2 -------------- z^4 - 0.45 z^3 Sample time: 0.1 seconds Discrete-time transfer function.
We3=1-WB3;
D3=1/Wd*WB3/We3;
D3=minreal(D3)
D3 = 64.084 (1-z^-1) (1-0.9048z^-1) (1-0.6452z^-1) (1-0.45z^-1) ---------------------------------------------------------- (1+0.9672z^-1) (1-z^-1)^2 (1-0.45z^-1) Sample time: 0.1 seconds Discrete-time zero/pole/gain model.
当控制型号为单位速度信号时
figure('position',[0,0,700,300]);
subplot(1,2,1)
lsimplot(WB3/Wd,0:0.1:1,0:0.1:1);
ylabel('u(t)');
subplot(1,2,2);
lsimplot(WB3,0:0.1:1,0:0.1:1);
grid on;
ylabel('y(t)');
当控制信号为单位阶跃信号时:
figure('position',[0,0,700,300]);
subplot(1,2,1)
stepplot(WB3/Wd,1);
ylabel('u(t)');
subplot(1,2,2)
stepplot(WB3,1);
ylabel('y(t)');
当控制信号为单位脉冲信号时
figure('position',[0,0,700,300]);
subplot(1,2,1)
impulseplot(WB3/Wd,1);
ylabel('u(t)');
subplot(1,2,2);
impulseplot(WB3,1);
ylabel('y(t)');

三、分析惯性因子对系统性能的影响

绘制不同c取值下的输出阶跃响应图和系统主要性能参数表
figure();
hold on;
C=0.1:0.2:0.9;
N=length(C);
%预分配内存
info=repmat(stepinfo(tf(1,1)),[N 1]);
for i=1:N
c=C(i);
f1=2-c;f2=-1;
WB3=tf([f1 f2],[1 -c 0],T);
We3=1-WB3;
D3=1/Wd*WB3/We3;
stepplot(WB3,1);
info(i)=stepinfo(WB3);
ylabel('y(t)');
end
n4 = length(C);
tmp4 = cell(n4,1);
for i4 = 1:n4
tmp4{i4} = sprintf('c=%g',C(i4));
end
legend(tmp4);
hold off;
info=struct2table(orderfields(info,[5,2,1,3,4,7,8,6]),'RowNames',tmp4);
display(info);
info = 5×8 table
 OvershootSettlingTimeRiseTimeSettlingMinSettlingMaxPeakPeakTimeUndershoot
1 c=0.190.00000.300001.00001.90001.90000.10000
2 c=0.370.00000.400001.00001.70001.70000.10000
3 c=0.550.00000.600001.00001.50001.50000.10000
4 c=0.730.00000.900001.00001.30001.30000.10000
5 c=0.910.00001.700001.00001.10001.10000.10000
观察以上结果可知,当输入为阶跃信号时,选取的附加极点(阻尼因子)c越大,超调量越小。

参考文献

  1. https://link.springer.com/chapter/10.1007%2F978-3-642-21697-8_21
  2. 刘建昌.计算机控制系统(第二版).2016,137
  3. P137 例5.1
  4. P148 例5.6
  5. P151 例5.7