1、 《 Matlab/Simulink 与控制系统仿真》结业作业 一、必做题 Matlab学习心得体会: 本学期我们新开了一门MATLAB/Simulink与控制系统仿真的课程,虽说是这个学期才开始学习,但是我们却对MATLAB这个软件的基本使用一点都不陌生。而本学期的专门学习,更让我获益匪浅。 第一部分是利用MATLAB函数来对控制系统进行分析。 ① 例如要求取一个系统的阶跃响应时,我就可以调用MATLAB中的step函数 ② MATLAB在稳定性分析应用时,通过直接求根函数roots来判定系统的稳定性 ③ 在利用MATLAB分析系统的根轨迹时,使用rlocus函数
2、来求取根轨迹图,使用pzmap函数求取系统的传递函数零极点 ④ 计算给定一组根的根轨迹增益函数 [k,poles]=rlocufind(sys);[k,poles]=rlocfind(sys,p) ⑤ MATLAB在稳定性分析应用时,也常通过使用用于计算系统稳定裕度的margin函数来完成,它可以从频率响应数据中计算出幅值裕度、相角裕度以及对应的频率 ⑥ 对于使用MATLAB来对系统进行频域响应的分析,又往往提供了绘制函数nyguist和bode来绘制系统的奈奎斯特曲线图和伯德图 ⑦ 其他:grid%添加栅格 hold on%保持,继续在原图绘画 title%添加标题 lege
3、nd(x,y)%添加文字标注 gyext('TEXT')%在任意可选位置添加文字信息 xlabel(x,y);ylabel(x,y)%添加坐标轴 分割图形窗口 subplot(1,2,1)%分割为一行两列,并即将绘制第一个 第二部分是利用MATLAB的Simulink模块来对控制系统进行建模仿真。 Simulink是一个对动态系统(包括连续系统、离散系统和混合系统)进行建模、仿真和综合分析的集成软件包,是MATLAB的一个附加组件,其特点是模块化操作、易学易用,而且能够使用MATLAB提供的丰富的仿真资源。 对于一个给定的控制系统结构图,需要通过Simulink模块来建立该系
4、统的动态模型。下面我就阐述一下,我在实验过程中常使用的一些模块。 Continuous(连续模块):Derivative对输入信号微分Integrator对输入信号积分Transfer Fcn 分子分母以多项式表示的传递函数 Discontinuous(非连续模块):Dead Zone设定死区范围Saturation 设置输入信号的正负限幅值模拟环节的饱和非线性特性 Math Operations(数学运算模块库):Sum求和 Add可加减标量,向量和矩阵Gain增益(输入信号乘以常数) Ports & Subsystems(端口和子系统模块库):In1输入端口 Out1输出端口
5、Sinks(接收器模块):To Workspace 将输出写入工作空间 Scope示波器 Sources(输入源模块库):Ramp 产生一个常数增加或减小的信号(斜坡函数信号) Step 产生幅值和起始时间可调的阶跃信号 第三部分是MATLAB中常用的工具。 根轨迹分析与设计工具rltool:rltool是图形化的交互式工具,可以打开工作空间的单输入单输出(SISO)系统模型,分析其根轨迹,并且允许用户在根轨迹图上直接放置零极点,完成对系统的校正设计。 操作:(1)在MATLAB工作空间中建立好控制系统的数学模型sys;(2)在MATLAB命令窗口中输入“rltool(sys)”
6、得到控制系统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 与控制
7、系统仿真这门课程的学习,我真正体会到应用MATLAB软件对控制系统分析的方便性、有效性;虽然我可能仅仅是简单地入了个门,但即使是这样我也感觉已经收获了不少东西。当然仅凭短时间的学习不可能掌握得很熟,所以在今后的时间里,我也会多查阅资料、多去实践,争取掌握更多更全的操作技能。 二、选做题 1、 一单位负反馈控制系统的开环传递函数为( 1)绘制k=10、100时闭环系统的阶跃响应曲线,并计算稳态误差、上升时间、超调量和调节时间;( 2)绘制k=1000时闭环系统的阶跃响应曲线,并与k=10、100所得结果相比较,分析增益系数与系统稳定性的关系;( 3)利用roots命令确定使系统稳定时k的取值
8、范围。 程序: 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
9、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-
10、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
11、) 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.153
12、7 - 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(
13、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)利
14、用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
15、 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
16、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 程序运行结果如
17、下图: 调用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时:
18、程序编写如下: 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_sta
19、ble 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、某单位负反馈控制系统的动态结
20、构图如下: 试完成如下任务:(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(
21、num,den)
rlocus(sys)
grid on
title('根轨迹图')
(3)由上图知- 2 ±i √10不在根轨迹曲线上
(4)程序编写如下:
[k,poles]=rlocfind(sys)
运行后得:
(5)由上图知k=3是系统的临界增益,所以使闭环系统稳定的k的取值范围为0 22、
根轨迹曲线;(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('根轨迹图')
系统的根轨迹图如下图所示:
经图中的判断 23、点不在系统的根轨迹上。
matlab代码如下:
[k,poles]=rlocfind(sys)
程序运行结果如下:
由图中可以得到,当0 24、绘制开环系统的 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。
25、
(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([ 26、1,0],conv([0.1,1],[0.25,1]));
sys2=tf(num,den)
rlocus(sys2)
figure(1)
grid
title('根轨迹图')
由分析可知,k的取值范围为0 27、图如下,其中饱和环节的线性区为[-1,1],斜率为 1。试分析系统的稳定性,并绘制系统的阶跃响应曲线。
建立模型:
输出曲线如图所示:
由上图可知,系统不稳定。
11.给定非线性控制系统的动态结构图如下,试:(1)在 Simulink 中建立上述系统的模型;
(2)设定开环增益为k=1,绘制系统的阶跃响应曲线;(3)设定开环增益为k =10,绘制系统的阶跃响应曲线,并与(2)得到的曲线进行比较;(4)继续修改 k 的取值,分析阶跃响应曲线的变化。
解:
(1) 在simulink库中建立以下模型:
(2) 系统的阶跃响应曲线如下图所示:
( 28、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;
nu 29、m=[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时闭环系统稳定,阶跃响应曲线收敛。
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818