一、实验目的
1. 了解离散相似法的基本原理
2. 掌握离散相似法仿真的基本过程
3. 应用离散相似法仿真非线性系统
4. MATLAB实现离散相似法的非线性系统仿真
5. 掌握SIMULINK仿真方法,应用于非线性系统的仿真,并对实验结果进行分析比较
二、实验原理
在ASR的输出增加限幅装置(饱和非线性,饱和界为c=8 )。 Ce=0.031,其它参数不变。输入为单位阶跃,用离散相似法求系统各环节的输出。
要求:采用零阶保持器和一阶保持器离散化系统,分别完成本实验。
1、各环节的参数:
由5个典型环节组成:
A=[0 0 1 1 0];
B=[tn ti Ts Tl Tm*Ce];
C=[Kn Ki Ks 1/R R];
D=[Kn*tn Ki*ti 0 0 0];
还有一饱和非线性环节:c=8;
2、各环节的离散化系数矩阵
3、各环节的输入作用
(1)、u(n)可通过联接矩阵直接求得:
u(n)=[u1(n), u2(n),…,un(n)]为各环节的输入量, n为环节数。 Y(n)=[Y1(n), Y2(n),…,Yn(n)]为各环节的输出量, r为外中参考输入量。
(2)、U(n)由近似表达式求得:
(3)、u(n+1)用折线法近似求得:
4、状态和输出计算
(1)、一阶保持器
X=FI'.*X+FIM'.*Uk+FIJ'.*Udot;
Y=FIC'.*X+FID'.*Uf;
(2)、零阶保持器
X=FI'.*X+FIM'.*Uk;
Y=FIC'.*X+FID'.*Uf;
5、饱和非线性环节
看作环节1(ASR)的一部分。建立satur.m文件:
function [uo]=satur(ui,c) if (abs(ui)<=c) uo=ui; elseif ( ui > c ) uo = c; else uo=-c; end end
三、实验过程
1、新建脚本文件,命名为satur.m
function [uo]=satur(ui,c) if (abs(ui)<=c) uo=ui; elseif ( ui > c ) uo = c; else uo=-c; end end
2、新建脚本文件,命名为test3.m
完整代码:
clc; clear; % ****** 各环节参数 ****** % Kn=26.7; tn=0.03; Ki=0.269; ti=0.067; Ks=76; Ts=0.00167; R=6.58; T1=0.018; Tm=0.25; Ce=0.031; Alpha=0.00337; Beta=0.4; A=[0 0 1 1 0]; B=[tn ti Ts T1 Tm*Ce]; C=[Kn Ki Ks 1/R R]; D=[Kn*tn Ki*ti 0 0 0]; c=8; r=1; W=[0 0 0 0 -Alpha; 1 0 0 -Beta 0; 0 1 0 0 0; 0 0 1 0 -Ce; 0 0 0 1 0]; W0=[1 0 0 0 0]'; h=0.001; t_end=0.5; t=0:h:t_end; n=length(t); % ****** 各环节离散化系数 ****** % block_num=5; for k=1:block_num if(A(k)==0) FI(k)=1; FIM(k)=h*C(k)/B(k); FIJ(k)=h*h*C(k)/B(k)/2; FIC(k)=1; FID(k)=0; if(D(k)~=0) FID(k)=D(k)/B(k); end else FI(k)=exp(-h*A(k)/B(k)); FIM(k)=(1-FI(k))*C(k)/A(k); FIJ(k)=h*C(k)/A(k)-FIM(k)*B(k)/A(k); FIC(k)=1; FID(k)=0; if(D(k)~=0) FIC(k)=C(k)/D(k)-A(k)/B(k); FID(k)=D(k)/B(k); end end end Y0=[0 0 0 0 0]'; Y=Y0; X=zeros(block_num,1); result1=Y; Uk=zeros(block_num,1); Ub=Uk; for m=1:(n-1) Ub=Uk; Uk=W*Y+W0*r; Uf=2*Uk-Ub; Udot=(Uk-Ub)/h; %****** 零阶保持器 ******% X=FI'.*X+FIM'.*Uk; Y=FIC'.*X+FID'.*Uf; Y(1)=satur(Y(1),c); result1=[result1,Y]; end Y0=[0 0 0 0 0]'; Y=Y0; X=zeros(block_num,1); result2=Y; Uk=zeros(block_num,1); Ub=Uk; for m=1:(n-1) Ub=Uk; Uk=W*Y+W0*r; Uf=2*Uk-Ub; Udot=(Uk-Ub)/h; %****** 一阶保持器 ******% X=FI'.*X+FIM'.*Uk + FIJ'.*Udot; Y=FIC'.*X + FID'.*Uf; Y(1)=satur(Y(1),c); result2=[result2,Y]; end
plot(t,result1(5,:),'-.',t,result2(5,:),'--',t,ScopeData.signals.values,'k');
legend('零阶保持器','一阶保持器','Simulink');
3、在Simulink中绘制仿真图
注意:Simulink中的变量名和工作区变量关联方法请点击:https://www.cnblogs.com/KaifengGuan/p/11942615.html
四、实验结果