自动控制理论课程设计
《自动控制理论》
课程设计报告
学院自动控制与机械工程院
专业电气工程及自动化
班级
学号
姓名
时间2011年1月12日
目录
一课程设计目的 (2)
二简述MATLAB语言的主要功能及其特点 (2)
三设计原理 (3)
四设计内容及其仿真实验过程 (4)
五心得体会及建议 (15)
六参考文献 (16)
《自动控制理论》课程设计报告
一课程设计目的
1.了解matlab软件的基本特点和功能,熟悉其界面、菜单和工具条;掌握线性系统模型的计算机表示方法、变换以及模型间的相互转换。了解控制系统工具箱的组成、特点及应用;掌握求线性定常连续系统输出响应的方法,运用连续系统时域响应函数(impulse,step,lsim),得到系统的时域响应曲线。
2.掌握使用MATLAB软件作出系统根轨迹;利用根轨迹图对控制系统进行分析;掌握使用MATLAB软件作出开环系统的波特图,奈奎斯特图;观察控制系统的观察开环频率特性,对控制系统的开环频率特性进行分析;
3.掌握MATLAB软件中simulink工具箱的使用;熟悉simulink中的功能模块,学会使用simulink对系统进行建模;掌握simulink的仿真方法。
4.掌握在SIMULINK环境下系统结构图的形成方法及整体传递函数的求取方法;5.了解在MATLAB环境下求取系统的输出时域表达式的方法。
二简述MATLAB语言的主要功能及其特点
简述MATLABLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink
两大部分。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连 matlab开发工作界面接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。具有用法简单、灵活、程式结构性强、延展性好等优点,已经逐渐成为科技计算、视图交互系统和程序中的首选语言工具。特别是它在线性代数、数理统计、自动控制、数字信号处理、动态系统仿真等方面表现突出,已经成为科研工作人员和工程技术人员进行科学研究和生产实践的有利武器。MATLAB具有以下几个特点:功能强大的数值运算功能,强大的图形处理能力高级但简单的程序环丰富的工具箱
三设计原理
1. tf对象(传递函数)
num[]传递函数分子系数;den[]传递函数分母系数。
由行数组组成的单元阵列,高次到低次表示。
传递函数表示G(s)=tf(num[],den[]);
两传递函数并联表示:G(s)=parallel(G1(s) ,G2(s));
两传递函数串联表示:G(s)=series(G1(s) ,G2(s));
负反馈连接表示:G(s)=feedback(G1(s) ,G2(s))。
2. 时域响应
主要函数:roots,setp,impulse,initial。
函数roots,计算方程的根;
函数setp,绘制系统单位阶跃响应曲线;
函数impulse,绘制系统单位脉冲响应曲线;
3. 根轨迹
主要函数有:pzmap,rlocus,rlocfind,sgrid,zgrid.
函数pzmap为在复平面内标出传递函数的零、极点;
函数rlocus为在复平面内绘制根轨迹;
函数rlocfind求分离点的坐标和分离处所对应的K值。
4. 频率法
主要函数有:bode,nyquist,margin。
函数bode为绘制伯德图命令;
函数nyquist为绘制奈奎斯特曲线图命令;
函数margin为计算幅值欲度和相角欲度及对应点的频率值。
[gm,pm ,wcg,wcp ]=margin(mun,den),gm表示幅值欲度;pm表示相角欲度;wcg 表示nyquist曲线与负实轴交点频率;wcp表示截止频率。
5. 在SIMULINK中建立系统
(1) SIMULINK的启动:在MATLAB命令窗口的工具栏中单击按钮或者在命令提示符>>下键入simulink命令,回车后即可启动Simulink程序。启动后软件自动打开Simullink模型库窗口,如图 7所示。这一模型库中含有许多子模型库,如Sources(输入源模块库)、Sinks(输出显示模块库)、Nonlinear(非线性环节)等。若想建立一个控制系统结构框图,则应该选择File| New菜单中的
Model选项,或选择工具栏上new Model按钮,打开一个空白的模型编辑窗口如图 8所示。
(2) 画出系统的各个模块:打开相应的子模块库,选择所需要的元素,用鼠标左
图 7 simulink 模型库
图8 模型编辑窗口
键点中后拖到模型编辑窗口的合适位置。
(3) 给出各个模块参数:由于选中的各个模块只包含默认的模型参数,如默认的
传递函数模型为1/(s+1)的简单格式,必须通过修改得到实际的模块参数。要修改模块的参数,可以用鼠标双击该模块图标,则会出现一个相应对话框,提示用户修改模块参数。 (4) 画出连接线:当所有的模块都画出来之后,可以再画出模块间所需要的连线,
构成完整的系统。模块间连线的画法很简单,只需要用鼠标点按起始模块的输出端(三角符号),再拖动鼠标,到终止模块的输入端释放鼠标键,系统会自动地在两个模块间画出带箭头的连线。若需要从连线中引出节点,可在鼠标点击起始节点时按住Ctrl 键,再将鼠标拖动到目的模块。
(5)指定输入和输出端子:在Simulink 下允许有两类输入输出信号,第一类是仿真信号,可从source(输入源模块库)图标中取出相应的输入信号端子,从Sink(输出显示模块库)图标中取出相应输出端子即可。第二类是要提取系统线性模型,则需打开Connection(连接模块库)图标,从中选取相应的输入输出端子。 四 设计内容及其仿真实验过程
1.用matlab 语言编制程序,实现以下系统: 1)2
26418245)(2
3
4
2
3
++++++=
s s s s s s s G 2))
523()1()
66)(2(4)(2
3
3
2
2+++++++=
s s s s s s s s s G
(1 )在MATLAB 命令窗口(Command Window )键入以下程序 >> num=[5 24 0 18]; >> den=[1 4 6 2 2]; >> G=tf(num,den) 运行结果:
Transfer function:
5 s^3 + 24 s^2 + 18
----------------------------- s^4 + 4 s^3 + 6 s^2 + 2 s + 2
(2) 多项式相乘项,可借助多项式乘法函数conv 来处理。 在MATLAB 命令窗口(Command Window )键入以下程序:
num=4*conv([1,2],conv([1,6,6],[1,6,6]));
den=conv([1,0],conv([1,1],conv([1,1],conv([1,1],[1,3,2,5])))); sys=tf(num,den) G=zpk(sys) 运行结果:
Transfer function:
4 s^
5 + 5
6 s^4 + 288 s^3 + 672 s^2 + 720 s + 288 ----------------------------------------------------- s^
7 + 6 s^6 + 14 s^5 + 21 s^4 + 24 s^3 + 17 s^2 + 5 s Zero/pole/gain:
4 (s+4.732)^2 (s+2) (s+1.268)^2
---------------------------------------------
s (s+2.904) (s+1)^3 (s^2 + 0.09584s + 1.722) >>
2.两环节G1、G2串联,求等效的整体传递函数G(s)
3
2)(1+=
s s G 1
27)(2
2++=
s s s G
在MATLAB 命令窗口(Command Window )键入以下程序
>> G1=tf(2,[1 3]); G2=tf(7,[1 2 1]); G=series(G1,G2) 运行结果:
Transfer function: 14
--------------------- s^3 + 5 s^2 + 7 s + 3 >>
3.两环节G1、G2并联,求等效的整体传递函数G(s)
3
2)(1+=
s s G 1
27)(2
2++=
s s s G
在MATLAB 命令窗口(Command Window )键入以下程序 >> G1=tf(2,[1 3]); G2=tf(7,[1 2 1]); >> G=parallel(G1,G2) 运行结果:
Transfer function: 2 s^2 + 11 s + 23 --------------------- s^3 + 5 s^2 + 7 s + 3 >>
4.已知系统结构如图,求闭环传递函数。其中的两环节G1、G2分别为
G1=tf([3,100],[1,2,81]); G2=tf(2,[2,5]);
G=feedback(G1,G2,-1)
5
22
)(2+=s s G 8121003)(21+++=s s s s G
Transfer function:
6 s^2 + 215 s + 500
--------------------------- 2 s^3 + 9 s^2 + 178 s + 605
>> G1=tf([3,100],[1,2,81]); G2=tf(2,[2,5]);
G=feedback(G1,G2,1)
Transfer function:
6 s^2 + 215 s + 500
--------------------------- 2 s^3 + 9 s^2 + 166 s + 205 >>
5.已知某闭环系统的传递函数为25
1096.116.025
10)(2
3
++++=
s s s s s G ,求其单位阶
跃响应曲线,单位脉冲响应曲线。
G=tf([10 25],[0.16 1.96 10 25]);impulse(G);title('脉冲响应')
>> G=tf([10 25],[0.16 1.96 10 25]);step(G);title('单位阶跃响应')
6.典型二阶系统的传递函数为 , 为自然频率, 为阻尼比,试绘出当ξ=0.5,n ω分别取-2、0、2、4、6、8、10时该系统的单位阶跃响应曲线;分析阻尼比分别为–0.5、–1时系统的稳定性。
%ζ=0.5
sys1=tf([0],[1 0 0]); sys2=tf([4],[1 2 4]); sys3=tf([16],[1 4 16]); sys4=tf([36],[1 6 36]); sys5=tf([64],[1 8 64]); sys6=tf([100],[1 10 100]);
step(sys1,sys2,sys3,sys4,sys5,sys6); >> title('单位阶跃响应曲线')
n ωξ2
22
2)(n
n n
s s s G ωξωω++=
单位阶跃响应曲线
Time (sec)
A m p l i t u d e
>> %ζ=-0.5
sys1=tf([0],[1 0 0]); sys2=tf([4],[1 -2 4]); sys3=tf([16],[1 -4 16]); sys4=tf([36],[1 -6 36]); sys5=tf([64],[1 -8 64]); sys6=tf([100],[1 -10 100]);
step(sys1,sys2,sys3,sys4,sys5,sys6); title('单位阶跃响应曲线') >>
5
单位阶跃响应曲线
Time (sec)
A m p l i t u d e
%ζ=-1
sys1=tf([0],[1 0 0]); sys2=tf([4],[1 -4 4]); sys3=tf([16],[1 -8 16]); sys4=tf([36],[1 -12 36]); sys5=tf([64],[1 -16 64]); sys6=tf([100],[1 -20 100]);
step(sys1,sys2,sys3,sys4,sys5,sys6); title('单位阶跃响应曲线')
5
单位阶跃响应曲线
Time (sec)
A m p l i t u d e
7. 设有一高阶系统开环传递函数为271
.6635.0268.006.0359.9436.1218.0016.0)(2
3
2
3++++++=
s s s s s s s G ,试
绘制该系统的零极点图和闭环根轨迹图。
G=tf([0.016 0.218 1.436 9.359],[0.06 0.268 0.635 6.271]); figure(1);pzmap(G);title('零极点图')
figure(2);rlocus(G);sgrid;title('根轨迹图')
8.单位反馈系统前向通道的传递函数为:s
s s s s s s s s s s G +++++++++=
2
3
4
5
6
2
34510105281282)( ,
试绘制该系统的Bode 图和Nyquist 曲线,说明软件绘制曲线与手动绘制曲线的异同。
>> G=tf([2 8 12 8 2],[1 5 10 10 5 1 0]); figure(1);bode(G);title('Bode 图')
figure(2);nyquist(G);title('Nyquist 曲线')
>> 9.已知某控制系统的开环传递函数1512(),.()()
K G s K s s s =
=++,试绘制系统
的开环频率特性曲线,并求出系统的幅值与相位裕量。 >> G1=tf([1.5],[ 1 0]); G2=tf(1,[1 1]); G3=tf(1,[1 2]); G=G1*G2*G3;
[num,den]=tfdata(G);
[mag,phase,w]=bode(num,den);subplot(211); semilogx(w,20*log10(mag)); subplot(212); semilogx(w,phase);
[gm,pm,wcg,wcp]=margin(mag,phase,w) gm = 4.0000 pm =
41.5257
wcg =
1.4142
wcp =
0.6114
>>
10.在SIMULINK中建立系统,该系统阶跃输入时的连接示意图如下。k为学生学号后三位。绘制其单位阶跃响应曲线,分析其峰值时间t p、延迟时间t d、上升时间t r、调节时间t s及超调量。
(1)峰值时间
num =217
timeopeak =
0.2209
(2)超调量
>> c=dcgain(G);
[Y,K]=max(y);
percentovershoot=100*(Y-c)/c
percentovershoot =
36.4608
(3)上升时间
>> c=dcgain(G);
n=1;
while y(n) n=n+1; end; risetime=t(n) risetime = 0.1350 (4)调节时间 >> c=dcgain(G); i=length(t); while(y(i)>0.98*c)&(y(i)<1.02*c) i=i-1; end setllingtime=t(i) setllingtime = 0.7607 *11. 给定系统如下图所示,试设计一个串联校正装置,使幅值裕度大于h>10分贝、相位裕度γ≥45o 五心得体会及建议 虽然以前在自动控制理论以及信号与系统等课本上都见到过MATLAB的一些 简单介绍,但对 MATLAB这一软件的深入学习还是在这次实训中。这次实训虽然只有短短的三四天时间,我们真正上机操作的时间也不多。由于之前对MATLAB 不是太熟悉,再加上自动控制原理的知识在课堂上掌握的也不是很好,所以这次课程设计对于我来说是不太轻松的。星期一老师布置任务后的第一件事就是去图书馆借相关的书籍进行借鉴和参考。由于这些书上讲的比较精简易懂,看完之后便对MATLAB 有了更深地了解和懂得了一些简单编程,当要用什么功能时,就在书上翻看相应部分的内容,在这样的情况下开始MATLAB软件的学习及其运用。 当然在这几天的课程设计中更多的得益于老师在上课期间的讲解及其老师给我们的资料。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师和同学帮助下,终于得到了解决。这次课程设计让我对计MATLAB算机仿真有了新的认识,也让我认识到了自己对MATLAB软件学习的不足,自动控制在社会应用中很广泛,熟练的运用MATLAB可以方便快捷的解决生产实际问题,我在这次课程设计中学会对一些简单系统的分析及其仿真,会了一些简单指令及相应的编程。但是还存在许多不足还不能利用MATLAB很好的设计一个控制系统。因此,在今后的学习中还要不断地练习MATLAB软件。增取更深入的了解学习MATLAB软件,以便熟练的运用于今后的学习和工作中。 课程设计顺利完成,感谢三位老师的辛苦付出,感谢学校提供这次动手实践的机会。让我们多掌握了一门功能强大的软件工具,并将理论与实践紧密结合到了一起。但是由于我们已经快五个周没有学习自动控制理论的知识了,遗忘了很多。建议如果有条件,将这样的实训加入平时的课程中,我们边学理论课程边做课程设计,就好比平时的实验一样。更有利于我们对课本知识的理解。 六参考文献 [1]张磊 .MATLAB实用教程.民邮电出版社 2008.9 [2] 程鹏.自动控制原理.高等教育出版社.2009.9 [3]王琦. MATLAB基础与应用实例集粹.2007.5