北京科技大学控制实验报告2.docx
- 文档编号:24295160
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:19
- 大小:230KB
北京科技大学控制实验报告2.docx
《北京科技大学控制实验报告2.docx》由会员分享,可在线阅读,更多相关《北京科技大学控制实验报告2.docx(19页珍藏版)》请在冰豆网上搜索。
北京科技大学控制实验报告2
实验二用MATLAB建立传递函数模型
一、实验目的
(1)熟悉MATLAB实验环境,掌握MATLAB命令窗口的基本操作;
(2)掌握MATLAB建立控制系统数学模型的命令及模型相互转换的方法;
(3)掌握使用MATLAB命令化简模型基本连接的方法;
(4)学会使用Simulink模型结构图化简复杂控制系统模型的方法。
二、实验原理及容
控制系统常用的数学模型有四种:
传递函数模型(tf对象)、零极点增益模型(zpk对象)、结构框图模型和状态空间模型(ss对象)。
经典控制理论中数学模型一般使用前三种模型,状态空间模型属于现代控制理论畴。
1、有理函数模型
线性连续系统的传递函数模型可一般地表示为:
(1)
将系统的分子和分母多项式的系数按降幂的方式以向量的形式输入给两个变量
和
,就可以轻易地将传递函数模型输入到MATLAB环境中。
命令格式为:
;
(2)
; (3)
用函数tf()来建立控制系统的传递函数模型,该函数的调用格式为:
G=tf(num,den); (4)
例1 一个简单的传递函数模型:
可以由下面的命令输入到MATLAB工作空间中去。
>> num=[1,2];
den=[1,2,3,4,5];
G=tf(num,den)
运行结果:
Transferfunction:
s+2
-----------------------------
s^4+2s^3+3s^2+4s+5
我的实验:
>>num=[1,2];
den=[1,2.3,4,5];
G=tf(num,den)
Transferfunction:
s+2
-----------------------
s^3+2.3s^2+4s+5
这时对象G可以用来描述给定的传递函数模型,作为其它函数调用的变量。
例2 一个稍微复杂一些的传递函数模型:
>>num=6*[1,5];
den=conv(conv([1,3,1],[1,3,1]),[1,6]);
tf(num,den)
运行结果
Transferfunction:
6s+30
-----------------------------------------
s^5+12s^4+47s^3+72s^2+37s+6
我的实验:
>>num=6*[1,5];
>>den=conv(conv([1,3,1],[1,3,1]),[1,6]);
>>tf(num,den)
Transferfunction:
6s+30
-----------------------------------------
s^5+12s^4+47s^3+72s^2+37s+6
其中conv()函数(标准的MATLAB函数)用来计算两个向量的卷积,多项式乘法也可以用这个函数来计算。
该函数允许任意地多层嵌套,从而表示复杂的计算。
【自我实践1】建立控制系统的传递函数模型:
>>num=[5];
den=conv(conv([1,0],[1,1]),[1,4,4]);
>>tf(num,den)
Transferfunction:
5
-------------------------
s^4+5s^3+8s^2+4s
2、零极点模型
线性系统的传递函数还可以写成极点的形式:
将系统增益K、零点-zi和极点-pj以向量的形式输入给三个变量
、Z和P,命令格式为:
(6)
(7)
(8)
用函数命令zpk()来建立系统的零极点增益模型,其函数调用格式为:
G=zpk(Z,P,KGain) (9)
例3 某系统的零极点模型为:
>>KGain=6;
z=[-1.9294;-0.0353+0.9287j;-0.0353-0.9287j];
p=[-0.9567+1.2272j;-0.9567-1.2272j;0.0433+0.6412j;0.0433-0.6412j];
G=zpk(z,p,KGain)
运行结果:
Zero/pole/gain:
6(s+1.929)(s^2+0.0706s+0.8637)
---------------------------------------------------------
(s^2-0.0866s+0.413)(s^2+1.913s+2.421)
我的实验:
>>KGain=6;
>>z=[-1.9294;-0.0353+0.9287j;-0.0353-0.9287j];
>>p=[-0.9567+1.2272j;-0.9567-1.2272j;0.0433+0.6412j;0.0433-0.6412j];
>>G=zpk(z,p,KGain)
Zero/pole/gain:
6(s+1.929)(s^2+0.0706s+0.8637)
----------------------------------------------
(s^2-0.0866s+0.413)(s^2+1.913s+2.421)
注意:
对于单变量系统,其零极点均是用列向量来表示的,故z、p向量中各项均用分号(;)隔开。
【自我实践2】建立控制系统的零极点模型:
>>KGain=8;
>>z=[-1+j;-1-j];
>>p=[0;0;-5;-6;-j;j];
>>G=zpk(z,p,KGain)
Zero/pole/gain:
8(s^2+2s+2)
-------------------------
s^2(s+5)(s+6)(s^2+1)
3、控制系统模型间的相互转换
●零极点模型转换为传递函数模型:
[num,den]=zp2tf(z,p,k)
●传递函数模型转化为零极点模型:
[z,p,k]=tf2zp(num,den)
●直接使用函数:
G1=tf(G),G
(2)=zpk(G)
例4给定系统传递函数为:
对应的零极点模型可由下面的命令得出
>> num=[6.8,61.2,95.2];
den=[1,7.5,22,19.5,0];
G=tf(num,den);
G1=zpk(G)
显示结果:
Zero/pole/gain:
6.8(s+7)(s+2)
------------------------------
s(s+1.5)(s^2+6s+13)
我的实验:
>>
num=[6.8,61.2,95.2];
den=[1,7.5,22,19.5,0];
G=tf(num,den);
>>G1=zpk(G)
Zero/pole/gain:
6.8(s+7)(s+2)
-------------------------
s(s+1.5)(s^2+6s+13)
可见,在系统的零极点模型中若出现复数值,则在显示时将以二阶因子的形式表示相应的共轭复数对。
例5 给定零极点模型:
可以用下面的MATLAB命令立即得出其等效的传递函数模型。
输入程序时要注意大小写。
>> Z=[-2,-7];
P=[0,-3-2j,-3+2j,-1.5];
K=6.8;
G=zpk(Z,P,K);
G1=tf(G)
结果显示:
Transferfunction:
6.8s^2+61.2s+95.2
---------------------------------------
s^4+7.5s^3+22s^2+19.5s
我的实验:
>>Z=[-2,-7];
>>P=[0,-3-2j,-3+2j,-1.5];
>>K=6.8;
>>G=zpk(Z,P,K);
>>G1=tf(G)
Transferfunction:
6.8s^2+61.2s+95.2
-------------------------------
s^4+7.5s^3+22s^2+19.5s
【自我实践3】已知系统传递函数
,求其等效的零极点模型。
>>num=[1,5,6];
>>den=[1,2,1,0];
>>G=tf(num,den);
>>G1=zpk(G)
Zero/pole/gain:
(s+3)(s+2)
-----------
s(s+1)^2
【自我实践4】建立控制系统的多项式模型:
。
>>Z=[-1,-2];
>>P=[0;-5;-6;-3];
>>K=8;
>>G=zpk(Z,P,K);
>>G1=tf(G)
Transferfunction:
8s^2+24s+16
----------------------------
s^4+14s^3+63s^2+90s
4、反馈系统结构图模型
设反馈系统结构图如图2-1所示。
图2-1反馈系统结构图
两个环节反馈连接后,其等效传递函数可用feedback()函数求得,其调用格式为:
sys=feedback(G1,G2,sign)
其中sign是反馈极性,sign缺省时,默认为负反馈,sign=-1;正反馈时,sign=1;单位反馈时,G2=1,且不能省略。
series()函数:
实现两个模型的串联;多于两个必须嵌套使用。
parallel()函数:
实现两个模型的并联;多于两个必须嵌套使用。
例6 若反馈系统如图2-1中的两个传递函数分别为:
,
则反馈系统的传递函数:
>>G1=tf(1,[1,2,1]);
G2=tf(1,[1,1]);
G=feedback(G1,G2)
运行结果:
Transferfunction:
s+1
-------------------------
s^3+3s^2+3s+2
若采用正反馈连接结构输入命令
>>G=feedback(G1,G2,1)
则得出如下结果:
Transferfunction:
s+1
---------------------
s^3+3s^2+3s
我的实验:
>>G1=tf(1,[1,2,1]);
G2=tf(1,[1,1]);
G=feedback(G1,G2)
Transferfunction:
s+1
---------------------
s^3+3s^2+3s+2
正反馈
>>G=feedback(G1,G2,1)
Transferfunction:
s+1
-----------------
s^3+3s^2+3s
例7 若反馈系统为更复杂的结构如图2-2所示。
其中
,
,
图2-2复杂反馈系统
则闭环系统的传递函数:
>> G1=tf([1,7,24,24],[1,10,35,50,24]);
G2=tf([10,5],[1,0]);
H=tf([1],[0.01,1]);
G_a=feedback(G1*G2,H)
结果为:
Transferfunction:
0.1s^5+10.75s^4+77.75s^3+278.6s^2+361.2s+120
--------------------------------------------------------------------
0.01s^6+1.1s^5+20.35s^4+110.5s^3+325.2s^2+384s+120
我的实验:
>>G1=tf([1,7,24,24],[1,10,35,50,24]);
G2=tf([10,5],[1,0]);
H=tf([1],[0.01,1]);
G_a=feedback(G1*G2,H)
Transferfunction:
0.1s^5+10.75s^4+77.75s^3+278.6s^2+361.2s+120
--------------------------------------------------------------------
0.01s^6+1.1s^5+20.35s^4+110.5s^3+325.2s^2+384s+120
【自我实践5】已知系统前向通道的传递函数
,求其单位负反馈闭环传递函数。
>>G1=tf([2,1],[1,2,3]);
H=1;
>>G=feedback(G1,H)
Transferfunction:
2s+1
-------------
s^2+4s+4
5、Simulink建模方法
在一些实际应用中,如果系统的结构过于复杂,不适合用前面介绍的方法建模。
在这种情况下,功能完善的Simulink程序可以用来建立新的数学模型。
Simulink是由MathWorks软件公司1990年为MATLAB提供的新的控制系统模型图形输入仿真工具。
它具有两个显著的功能:
Simul(仿真)与Link(连接),即可以利用鼠标在模型窗口上“画”出所需的控制系统模型。
然后利用Simulink提供的功能来对系统进行仿真或线性化分析。
与MATLAB中逐行输入命令相比,输入更容易,分析更直观。
下面简单介绍Simulink建立系统模型的基本步骤:
(1)Simulink的启动:
在MATLAB命令窗口的工具栏中单击按钮
或者在命令提示符>>下键入Simulink命令,回车后即可启动Simulink程序。
启动后软件自动打开Simullink模型库窗口,如图2-3所示。
这一模型库中含有许多子模型库,如Sources(输入源模块库)、Sinks(输出显示模块库)、Nonlinear(非线性环节)等。
若想建立一个控制系统结构框图,则应该选择File|New菜单中的Model选项,或选择工具栏上newModel
按钮,打开一个空白的模型编辑窗口如图2-4所示。
图2-3Simulink模型库图2-4模型编辑窗口
(2)画出系统的各个模块:
打开相应的子模块库,选择所需要的元素,用鼠标左键点中后拖到模型编辑窗口的合适位置。
(3)给出各个模块参数:
由于选中的各个模块只包含默认的模型参数,如默认的传递函数模型为1/(s+1)的简单格式,必须通过修改得到实际的模块参数。
要修改模块的参数,可以用鼠标双击该模块图标,则会出现一个相应对话框,提示用户修改模块参数。
(4)画出连接线:
当所有的模块都画出来之后,可以再画出模块间所需要的连线,构成完整的系统。
模块间连线的画法很简单,只需要用鼠标点按起始模块的输出端(三角符号),再拖动鼠标,到终止模块的输入端释放鼠标键,系统会自动地在两个模块间画出带箭头的连线。
若需要从连线中引出节点,可在鼠标点击起始节点时按住Ctrl键,再将鼠标拖动到目的模块。
(5)指定输入和输出端子:
在Simulink下允许有两类输入输出信号,第一类是仿真信号,可从source(输入源模块库)图标中取出相应的输入信号端子,从Sink(输出显示模块库)图标中取出相应输出端子即可。
第二类是要提取系统线性模型,则需打开Connection(连接模块库)图标,从中选取相应的输入输出端子。
例8典型二阶系统的结构图如图2-5所示。
用Simulink对系统进行仿真分析。
图2-5典型二阶系统结构图
按前面步骤,启动Simulink并打开一个空白的模型编辑窗口。
(1)画出所需模块,并给出正确的参数:
●在sources子模块库中选中阶跃输入(step)图标,将其拖入编辑窗口,并用鼠标左键双击该图标,打开参数设定的对话框,将参数steptime(阶跃时刻)设为0。
●在Math(数学)子模块库中选中加法器(sum)图标,拖到编辑窗口中,并双击该图标将参数Listofsigns(符号列表)设为|+-(表示输入为正,反馈为负)。
●在continuous(连续)子模块库中、选积分器(Integrator)和传递函数(TransferFcn)图标拖到编辑窗口中,并将传递函数分子(Numerator)改为〔900〕,分母(Denominator)改为〔1,9〕。
●在sinks(输出)子模块库中选择scope(示波器)和Out1(输出端口模块)图标并将之拖到编辑窗口中。
(3)将画出的所有模块按图25用鼠标连接起来,构成一个原系统的框图描述如图2-6所示。
(4)选择仿真算法和仿真控制参数,启动仿真过程。
●在编辑窗口中点击Simulation|Simulationparameters菜单,出现参数对话框,在solver模板中设置响应的仿真围StartTime(开始时间)和StopTime(终止时间),仿真步长围Maxinumstepsize(最大步长)和Mininumstepsize(最小步长)。
对于本例,StopTime可设置为2。
最后点击Simulation|Start菜单或点击相应的热键启动仿真。
双击示波器,在弹出的图形上会“实时地”显示出仿真结果。
输出结果如图2-7所示。
图2-6二阶系统的Simulink实现
图2-7仿真结果示波器显示图2-8MATLAB命令得出的系统响应曲线
命令窗口中键入whos命令,会发现工作空间中增加了两个变量――tout和yout,这是因为Simulink中的Out1模块自动将结果写到了MATLAB的工作空间中。
利用MATLAB命令plot(tout,yout),可将结果绘制出来,如图2-8所示。
比较图2-7和图2-8,可以发现这两种输出结果是完全一致的。
我的实验:
例八
>>whos
NameSizeBytesClassAttributes
G1x11742tf
G11x11742tf
G21x11742tf
G_a1x11742tf
H1x18double
K1x18double
KGain1x18double
P4x132double
Z1x216double
ans1x11742tf
den1x432double
num1x324double
p6x196doublecomplex
tout58x1464double
yout58x1464double
z2x132doublecomplex
>>plot(tout,yout)
三、实验能力要求
(1)熟练使用各种函数命令建立控制系统数学模型。
(2)完成实验的例题和自我实践,并记录结果。
实验总结:
通过本次实验,我熟悉了MATLAB的实验环境,掌握了建立控制系统数学模型(如有理函数模型,零极点模型等)的命令及模型相互转换的基本方法,还学会了使用Simulink模型结构图花间复杂控制系统模型的方法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京科技大学 控制 实验 报告