资源描述
《 Matlab/Simulink 与控制系统仿真》结业作业
一、必做题
Matlab学习心得体会:
本学期我们新开了一门MATLAB/Simulink与控制系统仿真的课程,虽说是这个学期才开始学习,但是我们却对MATLAB这个软件的基本使用一点都不陌生。而本学期的专门学习,更让我获益匪浅。
第一部分是利用MATLAB函数来对控制系统进行分析。
① 例如要求取一个系统的阶跃响应时,我就可以调用MATLAB中的step函数
② MATLAB在稳定性分析应用时,通过直接求根函数roots来判定系统的稳定性
③ 在利用MATLAB分析系统的根轨迹时,使用rlocus函数来求取根轨迹图,使用pzmap函数求取系统的传递函数零极点
④ 计算给定一组根的根轨迹增益函数 [k,poles]=rlocufind(sys);[k,poles]=rlocfind(sys,p)
⑤ MATLAB在稳定性分析应用时,也常通过使用用于计算系统稳定裕度的margin函数来完成,它可以从频率响应数据中计算出幅值裕度、相角裕度以及对应的频率
⑥ 对于使用MATLAB来对系统进行频域响应的分析,又往往提供了绘制函数nyguist和bode来绘制系统的奈奎斯特曲线图和伯德图
⑦ 其他:grid%添加栅格 hold on%保持,继续在原图绘画 title%添加标题 legend(x,y)%添加文字标注 gyext('TEXT')%在任意可选位置添加文字信息 xlabel(x,y);ylabel(x,y)%添加坐标轴 分割图形窗口 subplot(1,2,1)%分割为一行两列,并即将绘制第一个
第二部分是利用MATLAB的Simulink模块来对控制系统进行建模仿真。
Simulink是一个对动态系统(包括连续系统、离散系统和混合系统)进行建模、仿真和综合分析的集成软件包,是MATLAB的一个附加组件,其特点是模块化操作、易学易用,而且能够使用MATLAB提供的丰富的仿真资源。
对于一个给定的控制系统结构图,需要通过Simulink模块来建立该系统的动态模型。下面我就阐述一下,我在实验过程中常使用的一些模块。
Continuous(连续模块):Derivative对输入信号微分Integrator对输入信号积分Transfer Fcn 分子分母以多项式表示的传递函数
Discontinuous(非连续模块):Dead Zone设定死区范围Saturation 设置输入信号的正负限幅值模拟环节的饱和非线性特性
Math Operations(数学运算模块库):Sum求和 Add可加减标量,向量和矩阵Gain增益(输入信号乘以常数)
Ports & Subsystems(端口和子系统模块库):In1输入端口 Out1输出端口
Sinks(接收器模块):To Workspace 将输出写入工作空间 Scope示波器
Sources(输入源模块库):Ramp 产生一个常数增加或减小的信号(斜坡函数信号) Step 产生幅值和起始时间可调的阶跃信号
第三部分是MATLAB中常用的工具。
根轨迹分析与设计工具rltool:rltool是图形化的交互式工具,可以打开工作空间的单输入单输出(SISO)系统模型,分析其根轨迹,并且允许用户在根轨迹图上直接放置零极点,完成对系统的校正设计。
操作:(1)在MATLAB工作空间中建立好控制系统的数学模型sys;(2)在MATLAB命令窗口中输入“rltool(sys)”,得到控制系统sys的根轨迹设计GUI窗口,对系统进行分析。
线性时不变系统分析的图形用户界面LTI Viewer:
在MATLAB的command Window中,建立LTI对象,之后使用LTI Viewer可以绘制LTI对象的单位阶跃响应曲线(Step)、单位脉冲响应曲线(Impulse)、波特图(Bode)、奈奎斯特图(Nyquist)以及零极点图(Pole/Zero)等。
操作:(1)在MATLAB工作空间中建立好控制系统的数学模型;(2)在命令窗口中输入“LTI View”,调出LTI View窗口,对系统进行分析。
总结:通过本学期Matlab/Simulink 与控制系统仿真这门课程的学习,我真正体会到应用MATLAB软件对控制系统分析的方便性、有效性;虽然我可能仅仅是简单地入了个门,但即使是这样我也感觉已经收获了不少东西。当然仅凭短时间的学习不可能掌握得很熟,所以在今后的时间里,我也会多查阅资料、多去实践,争取掌握更多更全的操作技能。
二、选做题
1、 一单位负反馈控制系统的开环传递函数为( 1)绘制k=10、100时闭环系统的阶跃响应曲线,并计算稳态误差、上升时间、超调量和调节时间;( 2)绘制k=1000时闭环系统的阶跃响应曲线,并与k=10、100所得结果相比较,分析增益系数与系统稳定性的关系;( 3)利用roots命令确定使系统稳定时k的取值范围。
程序:
K=10时:
clc;
clear all;
num=[10];
den=[1 7 17 10];
sys=tf(num,den);
roots(den)
pzmap(sys);
[y,t,x]=step(num,den);
plot(x,y);
grid on;
%计算系统的超调量
y_stable=1;
max_response=max(y);
sigma=(max_response-y_stable)/y_stable
%计算系统上升时间
for i=1:length(y)
if y(i)>y_stable
break;
end
end
tr=x(i)
%计算系统的调整时间
for i=1:length(y)
if max(y(i:length(y)))<=1.02*y_stable
if min(y(i:length(y)))>=0.98*y_stable
break;
end
end
end
ts=x(i)
ans =
-3.0755 + 1.5228i
-3.0755 - 1.5228i
-0.8491 + 0.0000i
sigma =-5.8847e-05
tr =12.0391
ts =5.1810
K=100时:
clc;
clear all;
num=[10];
den=[1 7 17 10];
sys=tf(num,den);
roots(den)
pzmap(sys);
[y,t,x]=step(num,den);
plot(x,y);
grid on;
%计算系统的超调量
y_stable=1;
max_response=max(y);
sigma=(max_response-y_stable)/y_stable
%计算系统上升时间
for i=1:length(y)
if y(i)>y_stable
break;
end
end
tr=x(i)
%计算系统的调整时间
for i=1:length(y)
if max(y(i:length(y)))<=1.02*y_stable
if min(y(i:length(y)))>=0.98*y_stable
break;
end
end
end
ts=x(i)
ans =
-6.6925 + 0.0000i
-0.1537 + 3.8624i
-0.1537 - 3.8624i
sigma =0.7608
tr =0.5642
ts =24.5930
K=1000:
clc;
clear all;
num=[1000];
den=[1 7 17 1000];
[y,t,x]=step(num,den);
plot(x,y);
grid on;
在使系统稳定的条件下,k值越大,则系统越稳定。
取k=120时:
clc;
clear all;
num=[120];
den=[1 7 17 120];
sys=tf(num,den);
roots(den)
pzmap(sys);
[y,t,x]=step(num,den);
plot(x,y);
grid on;
此时系统不稳定。
取k=119时:
clc;
clear all;
num=[119];
den=[1 7 17 119];
sys=tf(num,den);
roots(den)
pzmap(sys);
[y,t,x]=step(num,den);
plot(x,y);
grid on;
此时系统处于临界稳定,固K<119。
2、 2、一单位负反馈控制系统的开环传递函数为。(1)利用MATLAB建立上述控制系统的3类数学模型;(2)利用MATLAB绘制系统的单位阶跃响应曲线和单位冲激响应曲线;(3)利用LTIViewer工具绘制系统的单位阶跃响应曲线和单位冲激响应曲线。
解:(1)由题建立系统模型,代码如下:
clear all;
num=[1.5 3];
den=[0.25 1.25 1 0];
sys_tf=tf(num,den)
[z,p,k]=tf2zp(num,den)
sys_zpk=zpk(z,p,k)
[A,B,C,D]=zp2ss(z,p,k);
sys_ss=ss(A,B,C,D)
程序运行结果如下:
sys_tf =
1.5 s + 3
-----------------------
0.25 s^3 + 1.25 s^2 + s
Continuous-time transfer function.
%%%%%传递函数模型%%
sys_zpk =
6 (s+2)
-------------
s (s+4) (s+1)
Continuous-time zero/pole/gain model.
%%%%%系统的零极点增益模型%%
sys_ss =
a =
x1 x2 x3
x1 0 0 0
x2 2 -5 -2
x3 0 2 0
b =
u1
x1 1
x2 1
x3 0
c =
x1 x2 x3
y1 0 0 3
d =
u1
y1 0
Continuous-time state-space model.%%%%%%系统的状态空间模型%%
(2)由题阶跃函数MATLAB程序代码如下:
figure(1)
step(sys_tf);
grid on
figure(2)
impulse(sys_tf);
grid on
程序运行结果如下图:
调用LTIview函数,运行函数Plot Types选项,选择Step,impulse。运行结果如下图:
3. 一单位负反馈控制系统的开环传递函数为G(s)=k/(0.1s^2+s)。( 1)若系统的阻尼系数ζ为0.5,计算此时的系统增益k;( 2)当k=5时,绘制闭环系统的单位阶跃响应曲线,并计算上升时间、调节时间、超调量以及静态误差。
(1)已知开环传递函数G(s)=k/(0.1s^2+s),对比二阶系统的典型传递函数G(s)=C(s)/R(s)=(k/T)/( s^2+s/T+ k/T)得ζ=1/2√kT所以由ζ为0.5得到k=10;
(2)k=5时:
程序编写如下:
clc;clear;
%%求阶跃响应曲线
num=[5];
den=[0.1,1,5];
[y,t,x]=step(num,den)
plot(x,y);
grid on;
%%计算上升时间
for i=1:length(y)
if y(i)>y_stable
break;
end
end
tr=x(i)
%%计算系统的调节时间------取误差带为2
for i=1:length(y)
if max(y(i:length(y)))<=1.02*y_stable
if min(y(i:length(y)))>=0.98*y_stable
end
end
end
ts=x(i)
运行结果:
上升时间tr =0.4748
调节时间ts =1.1926
%%计算超调量
y_stable=1;
max_response=max(y);
sigma=(max_response-y_stable)/y_stable
运行结果:
sigma =0.0432
求静态误差:
利用simulink建模得
5、某单位负反馈控制系统的动态结构图如下:
试完成如下任务:(1)在 MATLAB 中建立上述控制系统的数学模型;( 2)绘制系统的根轨迹曲线;(3)判断点 - 2 ±i √10是否在根轨迹曲线上;(4)确定使闭环系统稳定的k的取值范围。
(1) 建立数学模型
程序编写如下:
clear all;
num=[-1,2];den=[1,3,0];
sys=tf(num,den)
运行结果:
Transfer function:
-s + 2
---------
s^2 + 3 s
(2)%%绘制根轨迹图
clear all;
num=[-1,2];den=[1,3,0];
sys=tf(num,den)
rlocus(sys)
grid on
title('根轨迹图')
(3)由上图知- 2 ±i √10不在根轨迹曲线上
(4)程序编写如下:
[k,poles]=rlocfind(sys)
运行后得:
(5)由上图知k=3是系统的临界增益,所以使闭环系统稳定的k的取值范围为0<k<3。
某单位负反馈控制系统的动态结构图如下:
试完成如下任务:(1)在 MATLAB 中建立上述控制系统的数学模型;(2)绘制系统的
根轨迹曲线;(3)判断点是否在根轨迹曲线上;(4)确定使闭环系统稳定的 k 的取值范围。
解:
matlab代码如下:
clear all;
num=[-1,2];den=[1,3,0];
sys=tf(num,den)
sys =
程序运行结果如下:
-s + 2
---------
s^2 + 3 s
matlab代码如下:
clear all;
num=[-1,2];den=[1,3,0];
sys=tf(num,den)
rlocus(sys)
grid on
title('根轨迹图')
系统的根轨迹图如下图所示:
经图中的判断,点不在系统的根轨迹上。
matlab代码如下:
[k,poles]=rlocfind(sys)
程序运行结果如下:
由图中可以得到,当0<k<3时,闭环系统稳定。
7、 某控制系统的动态结构图如下:
试完成如下任务:(1)在 MATLAB 中建立上述控制系统的数学模型;(2)绘制开环系
统的 Bode 曲线和 Nyquist 曲线;(3)判断系统的稳定性,若系统不稳定,绘制闭环系统的零极点图,给出极点的位置;(4)计算系统的截止角频率、相角裕度和幅值裕度;(5) 绘制系统的阶跃响应曲线。
(1) 建立数学模型:
输出曲线如图:
(2)绘制开环系统的 Bode 曲线和 Nyquist 曲线
(3)系统零极点图
(4)程序编写如下:
[A,B,C,D]=linmod('samples_7');
sys=ss(A,B,C,D);
[Gm,Pm,Wcg,Wcp]=margin(sys)
运行结果:
Gm =1.0667
Pm =0.6617
Wcg =1.8258
Wcp =1.7961
由运行结果可知:幅值稳定裕量Gm =1.0667,相角稳定裕量Pm =0.6617,相角穿越频率Wcg =1.8258,截止频率Wcp =1.7961。
(5)阶跃响应曲线
9.设单位负反馈控制系统的开环传递函数G(s)分别为、、,试绘制其 Nyquist 曲线,并确定使闭环系统稳定的 k 的取值范围。
解:
(1) G(s)=时 matlab代码如下:
clear all;
num=[0.1,1];den=conv([1,-1],[1,0]);
sys1=tf(num,den)
rlocus(sys1)
figure(1)
grid
title('根轨迹图')
由分析可知,k的取值范围为k>10。
(2)G(s)=
matlab代码如下:
clear all;
num=[1];den=conv([1,0],conv([0.1,1],[0.25,1]));
sys2=tf(num,den)
rlocus(sys2)
figure(1)
grid
title('根轨迹图')
由分析可知,k的取值范围为0<k<14。
(3)G(s)=matlab代码如下:
clear all;
num=[0.5,1.5,1];den=conv([10,1],[1,-1]);
sys3=tf(num,den)
rlocus(sys3)
figure(1)
grid
title('根轨迹图')
由分析可知,k的取值范围为k>6。
10、给定非线性控制系统的动态结构图如下,其中饱和环节的线性区为[-1,1],斜率为 1。试分析系统的稳定性,并绘制系统的阶跃响应曲线。
建立模型:
输出曲线如图所示:
由上图可知,系统不稳定。
11.给定非线性控制系统的动态结构图如下,试:(1)在 Simulink 中建立上述系统的模型;
(2)设定开环增益为k=1,绘制系统的阶跃响应曲线;(3)设定开环增益为k =10,绘制系统的阶跃响应曲线,并与(2)得到的曲线进行比较;(4)继续修改 k 的取值,分析阶跃响应曲线的变化。
解:
(1) 在simulink库中建立以下模型:
(2) 系统的阶跃响应曲线如下图所示:
(3) 系统的阶跃响应曲线如下图所示:
k=1时与k=10时的曲线相比,k=10时的曲线出现了超调量,上升时间减少,稳态误差增大。
(4) k=100时,系统的阶跃响应曲线如下:
k=1000时,系统的阶跃响应曲线如下:
从图中可以看出当k继续增大时,稳态误差最终稳定在0.5。
13、 某离散控制系统的结构图如下,试:( 1)在 MATLAB 中建立此控制系统的模型;( 2)
采样周期值为 1s,判断系统的稳定性,并绘制系统的阶跃响应曲线。
(1) 数学模型如下:
程序编写:
clc;
clear;
%建立控制系统的数学模型
Ts=1;
num=[4];
den=[1,3,2];
sys_continue = tf(num,den);
sys_discrete = c2d(sys_continue,Ts,'zoh');
sys_k=1;
sys_open=sys_k*sys_discrete
运行结果:
Transfer function:
0.7992 z + 0.294
------------------------
z^2 - 0.5032 z + 0.04979
Sampling time: 1
(2)求取系统的阶跃响应曲线
%k=1时
sys_k=1;
figure(4);
sys_close = feedback(sys_k*sys_discrete,1);
[dnumc,ddenc]=tfdata(sys_close,'v');
dstep(dnumc,ddenc,25);
由图可知:k=1时闭环系统稳定,阶跃响应曲线收敛。
展开阅读全文