计算机仿真试验报告
自动化1201 ** 3120502007
[实验目的]
(1).掌握采样控制系统数字仿真的特点。
(2).了解数字控制器对系统动态性能的影响。
(3).学会编制双重循环法的仿真程序。
[实验内容]
某单位反馈控制系统中,被控对象的传递函数为
在单位速度信号输入下,选择零阶保持器在时设计的“最少拍”控制器为
(1). 按实验目的、要求和已知条件,建立系统的Simulink模型,并且编制双重循环法的仿真程序。
(2). 分别运行双重循环法的仿真程序和Simulink模型,观察纪录系统动态性能的变化。
(3).若数字控制器改为“无纹波”控制器
试对两种情况下的输出进行比较。
[预习要求]
(1). 复习采样控制系统的仿真原理及特点。
(2).根据理论分析,初步估计系统在给定条件下可能出现的动态过程。
(1). 按实验目的、要求和已知条件,建立系统的Simulink模型,并且编制双重循环法的仿真程序。
1) Simulink模型建立:
根据题目给出的条件,数字控制系统的结构图如下图所示:
其中的其中数字控制器为:
(1)
根据上面结构图,所建立Simulink模型如下图所示:
2) 编制双重循环法的仿真程序
根据数字控制系统的结构图与条件(1)式,我们可以得到得到被控对象的状态空间模型:
(2)
按连续系统离散相似算法将(2)式离散化。为了保证精度,其离散化时的步长h(虚拟采样周期)应比数字控制器的实际采样周期T (=1s)小得多。为简化起见,取h=T/N=T/100=0.01T=0.01s。
利用MATLAB控制系统工具箱提供的将连续系统转换成离散系统的函数c2d,把连续状态空间模型(2)变换为离散状态空间模型。
离散程序如下(程序1):
clear;
h=0.01;
A=[0 0;1 -1];
B=[10;0];
[G,H]=c2d(A,B,h)
运行后的结果为:
即:
(3)
(4)
故连续系统被控对象(2)的等价离散化状态方程为:
(5)
根据上述条件,采样控制系统数字控制器的差分方程为 (6)
式中: (7)
根据例题3.2中仿真框图分别递推求解 (5)式和 (6)式的MATLAB仿真程序:
程序2如下:
clear
G=[1 0;0.01 0.99];
H=[0.1;0.0005];c=[0 1]; % 连续被控对象的离散化状态方程的系数阵
h=0.01;T=1; % 设定内循环步长h=0.01,而外循环则以采样周期T=0.1为步长
N=round(T/h); % 在一采样周期内连续被控对象的离散化状态方程递推N次(内循环)
TF=15; % 设定总仿真时间为15s
M=round(TF/T); % 数字控制器的差分方程递推M次(外循环)
x=[0;0];
u=zeros(1,M+2);
e=zeros(1,M+2);
u(1)=0;
u(2)=0;
t=0;
xt=x;
for i=1:M % 外循环
y=c*x;
r(i)=i;
e(i+2)=r(i)-y;
u(i+2)=0.282*u(i+1)+0.718*u(i)+0.543*e(i+2)-0.471*e(i+1)+0.0999*e(i); % 外循环中递推求数字控制器在实际采样时刻的输出(步长为T)
for j=1:N % 内循环
x=G*x+h*u(i+2); % 内循环中递推求受控对象状态响应(步长为h)
xt=[xt,x]; % yt为记载各步状态响应的矩阵
t=[t,j*h+(i-1)*T]; % t为记载各采样(kT)时刻的行向量(与yt对应)
end
end
x2t=xt(2,:);
plot(t,t,':k',t+T,x2t,'k');
legend('r', 'y');
grid;
xlabel('time(s)');
title('双重循环法仿真程序的运行结果');
(2). 分别运行双重循环法的仿真程序和Simulink模型,观察纪录系统动态性能的变化。
1) 运行双重循环法的仿真程序结果如下所示:
2) 运行Simulink模型结果如下图所示:
进行对比发现,两种方法结果基本相同。双重循环法通用性较强,不仅可得到控制系统的输出值,还可得到被控对象内部状态变量的响应;也可用于被控对象中含有典型非线性环节的非线性系统的仿真。克服了差分方程递推求解法
不能计算被控对象的内部状态变量的响应特性,对被控对象含有非线性环节的情况也不适用的局限性。
(3).若数字控制器改为“无纹波”控制器
试对两种情况下的输出进行比较。
1) 更改只需改Discrete Transfer Fcn 参数即可,Simulink模型为:
输出结果如下:
2)双重循环法:
改变数字控制器后,连续系统离散化模型是不变的,只需将控制系统差分方程改写即可:
(7)
重新编写双重循环仿真程序如下(程序3):
clear
G=[1 0;0.01 0.99];
H=[0.1;0.0005];c=[0 1]; % 连续被控对象的离散化状态方程的系数阵
h=0.01;T=1; % 设定内循环步长h=0.01,而外循环则以采样周期T=0.1为步长
N=round(T/h); % 在一采样周期内连续被控对象的离散化状态方程递推N次(内循环)
TF=15; % 设定总仿真时间为15s
M=round(TF/T); % 数字控制器的差分方程递推M次(外循环)
x=[0;0];
u=zeros(1,M+2);
e=zeros(1,M+2);
u(1)=0;
u(2)=0;
t=0;
xt=x;
for i=1:M % 外循环
y=c*x;
r(i)=i;
e(i+2)=r(i)-y; u(i+2)=0.407*u(i+1)+0.593*u(i)+0.383*e(i+2)-0.365*e(i+1)+0.0825*e(i); % 外循环中递推求数字控制器在实际采样时刻的输出(步长为T)
for j=1:N % 内循环
x=G*x+h*u(i+2); % 内循环中递推求受控对象状态响应(步长为h)
xt=[xt,x]; % yt为记载各步状态响应的矩阵
t=[t,j*h+(i-1)*T]; % t为记载各采样(kT)时刻的行向量(与yt对应)
end
end
x2t=xt(2,:);
plot(t,t,':k',t+T,x2t,'k'); legend('r', 'y');
grid;
xlabel('time(s)');
title('“无波纹”双重循环法仿真结果');
程序运行结果输出如下所示:
¥29.8
¥9.9
¥59.8