最小拍控制系统
采样周期为T=0.1s
G=zpk([],[0 -1],5)
G =
5
-------
s (s+1)
Continuous-time zero/pole/gain model.
一、最小拍有纹波系统
针对图一所示的计算机控制系统,考虑输入为单位速度信号时,进行计算机控制算法D(Z)设计,编程实现最小拍有纹波系统;
1.1根据广义脉冲传递函数求解闭环传递函数
通过对连续传递函数进行离散化,获得对象的离散传递函数:
[zero,pole,~]=zpkdata(Gd);
zero=zero{1};pole=pole{1};
display(Gd);
Gd =
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,0)点无零极点,无纯滞后环节。可以直接应用简单对象的设计方法 由于输入为单位速度信号,z变换后为,查表5.1[2]得 z1=sym('z1'); %z^(-1)用于系数的计算
a=double(r.a);b=double(r.b);c=double(r.c);
WB=z^(-1)*(a+b*z^(-1))
WB =
2 z - 1
-------
z^2
Sample time: 0.1 seconds
Discrete-time transfer function.
1.2求解数字控制器的脉冲传递函数
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]);
lsimplot(WB/Gd,0:0.1:1,0:0.1:1);
lsimplot(WB,0:0.1:1,0:0.1:1);
二、最小拍无纹波系统
讨论纹波的生成原因,编程实现最小拍无纹波系统;
2.0 纹波产生的原因
如果系统进入稳态后,加在被控对象上的控制信号还在波动,则稳态过程中系统输出就有纹波。
2.1 计算闭环传递函数
在有纹波最小拍系统的基础上,还需要满足闭环传递函数包含对象传递函数所有零点的条件
p=pole(1);%We需要包含单位圆上和单位元外极点
WB2=(p_add+d*z^(-1))*z^(-1)*(1-beta*z^(-1));
2.2数字控制器D的计算
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分析数字控制器D(z)对系统的控制效果
通过仿真模拟,绘制相关输出响应曲线,发现系统需要四拍才能进入稳定。
figure('position',[0,0,700,300]);
三、改进最小拍系统
讨论最小拍系统的特点,采取惯性因子法对最小拍控制器加以改进,并研究惯性因子对系统性能的影响。
We=F1*(1-p_add*z1)*(1-z1)^q;
WB3(i)=(c+d*z^(-1)+e*z^(-2))*z^(-1)*(1-beta*z^(-1));
labels{i4+1} = sprintf('p=%g',C(i4));
当输入信号为单位速度信号时
figure('Position',[0,0,700,300]);
legend(labels,'Location',"northwest");
sgtitle('单位速度信号下的输出和误差响应');
当输入信号为单位阶跃信号时
figure('Position',[0,0,700,300]);
legend(labels{2:end},'Location',"northeast");
sgtitle('单位阶跃信号下的输出和误差响应');
当输入信号为单位加速度信号时
figure('Position',[0,0,700,300]);
legend(labels,'Location',"northwest");
legend(labels,'Location',"northwest");
sgtitle('单位加速度信号下的输出和误差响应');