计算机仿真试验报告
自动化1201 ** 3120502007
[实验目的]
(1).掌握采样控制系统数字仿真的特点。
(2).了解数字控制器对系统动态性能的影响。
(3).学会编制双重循环法的仿真程序。
(1). 复习采样控制系统的仿真原理及特点。
(2).根据理论分析,初步估计系统在给定条件下可能出现的动态过程。
(1).按实验目的、要求和已知条件,建立系统的Simulink模型,并且编制双重循环法的仿真程序。
1) Simulink模型建立:
根据题目给出的条件,数字控制系统的结构图如下图所示:
其中的其中数字控制器为:
根据上面结构图,所建立
2) 编制双重循环法的仿真程序
根据数字控制系统的结构图与条件(1)式,我们可以得到得到被控对象的状态空间模型:
[]112212()()0010()()
()110()()01()x t x t u t x t x t x t y t x t ⎧⎡⎤⎡⎤⎡⎤⎡⎤=+⎪⎢⎥⎢⎥⎢⎥⎢⎥-⎣
⎦⎣⎦⎪⎣⎦⎣⎦⎨
⎡⎤
⎪=⎢⎥⎪
⎣⎦⎩
(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)
运行后的结果为:
即:
1
0(())0.010.99T ⎡⎤==⎢⎥⎣⎦
G Φ (3) 0.1(())0.0005T ⎡⎤
==⎢
⎥
⎣⎦
H Γ (4) 故连续系统被控对象(2)的等价离散化状态方程为:
[]112212(1)()100.1()(1)()0.010.990.0005()()01()x k x k u k x k x k x k y k x k ⎧+⎡⎤⎡⎤⎡⎤⎡⎤
=+⎪⎢⎥⎢⎥⎢⎥⎢⎥
+⎣⎦⎣⎦
⎪⎣⎦⎣⎦⎨
⎡⎤
⎪=⎢⎥⎪
⎣⎦⎩
(5)
根据上述条件,采样控制系统数字控制器的差分方程为u k u k u k e k e k e k
=-+-+--+- (6)
()0.282(1)0.718(2)0.543()0
2)
式中:()()()
e k r k y k
=-(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模型结果如下图所示:
进行对比发现,两种方法结果基本相同。
双重循环法通用性较强,不仅可得到控制系统的输出值,还可得到被控对象内部状态变量的响应;也可用于被控对象中含有典型非线性环节的非线性系统的仿真。
克服了差分方程递推求解法
不能计算被控对象的内部状态变量的响应特性,对被控对象含有非线性环节的情况也不适用的局限性。
1) 更改只需改Discrete Transfer Fcn 参数即可,Simulink模型为:输出结果如下:
2)双重循环法:
改变数字控制器后,连续系统离散化模型是不变的,只需将控制系统差分方程改写即可:=-+-+--+-(7)u k u k u k e k e k e k
()0.407(1)0.593(2)0.383()0.365(1)0.825(2)
重新编写双重循环仿真程序如下(程序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('“无波纹”双重循环法仿真结果');
程序运行结果输出如下所示:。