资源描述
课程设计报告
( 2023-- 2023 年度 第 1 学期)
名 称: 《自动控制理论》课程设计
题 目:基于自动控制理论的性能分析与校正
院 系: 自动化
班 级: 自动化1004
学 号:
学生姓名: 王桐
指导教师: 孙海蓉
设计周数: 1周
成 绩:
日期: 2023 年 12 月 31 日
一、课程设计的目的与规定
1. 正文为宋体,五号字 行间距为21
1.1 ------------
1.2 ------------
(请按任务书写,把任务书考过来,从第三行开始考)
二、设计正文
1. 正文为宋体,五号字 行间距为21
1.1 ------------
1.2 ------------
(涉及题目,解题过程即程序,结果即打印曲线)
三、课程设计总结或结论
1. 正文为宋体,五号字 行间距为21
1.1 ------------
1.2 ------------
四、参考文献
[1] 作者1, 作者2. 书名. 出版单位, 版本. 出版日期
《自动控制理论》课程设计
一、 设计题目
基于自动控制理论的性能分析与校正
二、 目的与规定
本课程为《自动控制理论A》的课程设计,是课堂的深化。设立《自动控制理论A》课程设计的目的是使MATLAB成为学生的基本技能,熟悉MATLAB这一解决具体工程问题的标准软件,能纯熟地应用MATLAB软件解决控制理论中的复杂和工程实际问题,并给以后的模糊控制理论、最优控制理论和多变量控制理论等奠定基础。作为自动化专业的学生很有必要学会应用这一强大的工具,并掌握运用MATLAB对控制理论内容进行分析和研究的技能,以达成加深对课堂上所讲内容理解的目的。通过使用这一软件工具把学生从繁琐枯燥的计算承担中解脱出来,而把更多的精力用到思考本质问题和研究解决实际生产问题上去。
通过本次计算机辅助设计,学生应达成以下的基本规定:
1.能用MATLAB软件分析复杂和实际的控制系统。
2.能用MATLAB软件设计控制系统以满足具体的性能指标规定。
3.能灵活应用MATLAB的CONTROL SYSTEM 工具箱和SIMULINK仿真软件,分析系统的性能。
三、 重要内容
1.前期基础知识,重要涉及MATLAB系统要素,MATLAB语言的变量与语句,MATLAB的矩阵和矩阵元素,数值输入与输出格式,MATLAB系统工作空间信息,以及MATLAB的在线帮助功能等。
2.控制系统模型,重要涉及模型建立、模型变换、模型简化,Laplace变换等等。
3.控制系统的时域分析,重要涉及系统的各种响应、性能指标的获取、零极点对系统性能的影响、高阶系统的近似研究,控制系统的稳定性分析,控制系统的稳态误差的求取。
4.控制系统的根轨迹分析,重要涉及多回路系统的根轨迹、零度根轨迹、纯迟延系统根轨迹和控制系统的根轨迹分析。
5.控制系统的频域分析,重要涉及系统Bode图、Nyquist图、稳定性判据和系统的频域响应。
6.控制系统的校正,重要涉及根轨迹法超前校正、频域法超前校正、频域法滞后校正以及校正前后的性能分析。
四、 进度计划
序号
设计内容
完毕时间
备注
1
基础知识、数学模型
2023-1-31
2
时域分析法、频域分析
2023-1-3
3
根轨迹分析、系统校正
2023-1-5
4
整理打印课程设计报告
2023-1-6
5
答辩
2023-1-6
自动控制原理课程设计论文正文
目 录
第一板块 前期基础知识 1
第二板块 控制系统模型 1
1、有理数模型的建立 1
2、零极点模型 1
3、反馈系统结构图模型 2
4、Simulink建模方法 2
5、例1-1 4 6、例1-2 4
第三板块 控制系统的时域分析 5
1、线性系统稳定性分析 5
2、系统动态特性分析 6
3、例2-1 9
4、例2-2 11
第四板块 控制系统的根轨迹 10
1、理论分析 10
2、例3-1 11
3、例3-2 12
第五板块 控制系统的频率分析 16 1、频率特性 16
2、用MATLAB作奈魁斯特图 17
3、用MATLAB作伯德图 17 4、用MATLEB求取稳定裕量 19
5、时间延迟系统的频域响应 19
7、例4-2 20
6、例4-1 22
第六板块 控制系统的校正 24 1、根轨迹串联超前校正,例5-1 24
2、根轨迹串联滞后校正,例5-2 29
3、频率串联超前校正,例5-3 33
4、频率串联滞后校正,例5-4 36
第七板块 体会和心得 37
第八板块 参考文献 38
本周,进行了自动控制原理的课程设计,在为时一周的课设中,我们重要练习了MATLAB的使用,这周时间内重要学习的内容分为:前期基础知识,控制系统模型,控制系统的时域分析,控制系统的根轨迹分析,控制系统的频域分析和控制系统的矫正六个板块:
一、前期基础知识__关于MATLAB
MATLAB是Mathworks公司开发的一种集数值计算、符号计算和图形可视化三大基本功能于一体的功能强大、操作简朴的优秀工程计算应用软件。MATLAB不仅可以解决代数问题和数值分析问题,并且还具有强大的图形解决及仿真模拟等功能。从而可以很好的帮助工程师及科学家解决实际的技术问题。
MATLAB的含义是矩阵实验室(Matrix Laboratory),最初重要用于方便矩阵的存取,其基本元素是无需定义维数的矩阵。通过十几年的扩充和完善,现已发展成为包含大量实用工具箱(Toolbox)的综合应用软件,不仅成为线性代数课程的标准工具,并且适合具有不同专业研究方向及工程应用需求的用户使用。
MATLAB最重要的特点是易于扩展。它允许用户自行建立完毕指定功能的扩展MATLAB函数(称为M文献),从而构成适合于其它领域的工具箱,大大扩展了MATLAB的应用范围。目前,MATLAB已成为国际控制界最流行的软件,控制界很多学者将自己擅长的CAD方法用MATLAB加以实现,出现了大量的MATLAB配套工具箱,如控制系统工具箱(control systems toolbox),系统辨认工具箱(system identification toolbox),鲁棒控制工具箱(robust control toolbox),信号解决工具箱(signal processing toolbox)以及仿真环境SIMULINK等。
二、控制系统模型的建立
1、有理数模型的建立
线性系统的传递函数模型可一般地表达为:
(1)
将系统的分子和分母多项式的系数按降幂的方式以向量的形式输入给两个变量和,就可以容易地将传递函数模型输入到MATLAB环境中。命令格式为:
; (2)
; (3)
在MATLAB控制系统工具箱中,定义了tf() 函数,它可由传递函数分子分母给出的变量构造出单个的传递函数对象。从而使得系统模型的输入和解决更加方便。
该函数的调用格式为:
G=tf(num,den);
2、零极点模型
线性系统的传递函数还可以写成极点的形式:
(5)将系统增益、零点和极点以向量的形式输入给三个变量、Z和P,就可以将系统的零极点模型输入到MATLAB工作空间中,命令格式为:
(6) (7) (8)
在MATLAB控制工具箱中,定义了zpk()函数,由它可通过以上三个MATLAB变量构造出零极点对象,用于简朴地表述零极点模型。该函数的调用格式为:
G=zpk(Z,P,KGain)
3、反馈系统结构图模型
设反馈系统结构图如图5所示。
图5 反馈系统结构图
控制系统工具箱中提供了feedback()函数,用来求取反馈连接下总的系统模型,该函数调用格式如下:
G=feedback(G1,G2,sign); (10)
其中变量sign用来表达正反馈或负反馈结构,若sign=-1表达负反馈系统的模型,若省略sign变量,则仍将表达负反馈结构。G1和G2分别表达前向模型和反馈模型的LTI(线性时不变)对象。
4、Simulink建模方法
在一些实际应用中,假如系统的结构过于复杂,不适合用前面介绍的方法建模。在这种情况下,功能完善的Simulink程序可以用来建立新的数学模型。Simulink是由Math Works 软件公司1990年为MATLAB提供的新的控制系统模型图形输入仿真工具。它具有两个显著的功能:Simul(仿真)与Link(连接),亦即可以运用鼠标在模型窗口上“画”出所需的控制系统模型。然后运用SIMULINK提供的功能来对系统进行仿真或线性化分析。与MATLAB中逐行输入命令相比,这样输入更容易,分析更直观。(1) SIMULINK的启动:在MATLAB命令窗口的工具栏中单击按钮或者在命令提醒符>>下键入simulink命令,回车后即可启动Simulink程序。启动后软件自动打开Simullink模型库窗口,如图 7所示。这一模型库中具有许多子模型库,如Sources(输入源模块库)、Sinks(输出显示模块库)、Nonlinear(非线性环节)等。若想建立一个控制系统结构框图,则应当选择File| New菜单中的Model选项,或选择工具栏上new Model按钮,打开一个空白的模型编辑窗口如图 8所示。
图 7 simulink 模型库
图8 模型编辑窗口
(2) 画出系统的各个模块:打开相应的子模块库,选择所需要的元素,用鼠标左键点中后拖到模型编辑窗口的合适位置。
(3) 给出各个模块参数:由于选中的各个模块只包含默认的模型参数,如默认的传递函数模型为1/(s+1)的简朴格式,必须通过修改得到实际的模块参数。要修改模块的参数,可以用鼠标双击该模块图标,则会出现一个相应对话框,提醒用户修改模块参数。
(4) 画出连接线:当所有的模块都画出来之后,可以再画出模块间所需要的连线,构成完整的系统。模块间连线的画法很简朴,只需要用鼠标点按起始模块的输出端(三角符号),再拖动鼠标,到终止模块的输入端释放鼠标键,系统会自动地在两个模块间画出带箭头的连线。若需要从连线中引出节点,可在鼠标点击起始节点时按住Ctrl键,再将鼠标拖动到目的模块。
(5) 指定输入和输出端子:在Simulink下允许有两类输入输出信号,第一类是仿真信号,可从source(输入源模块库)图标中取出相应的输入信号端子,从Sink(输出显示模块库)图标中取出相应输出端子即可。第二类是要提取系统线性模型,则需打开Connection(连接模块库)图标,从中选取相应的输入输出端子。
系统建模作业题一:
例1-1
若反馈系统的结构如图6所示。其中
,,
则写出将闭环系统的传递函数输入MATLAB的语句。
解:本题属于上述的第三种类型,可以套用feedback函数,具体程序如下:
>> 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)
得到结果:
Transfer function:
0.1 s^5 + 10.75 s^4 + 77.75 s^3 + 278.6 s^2 + 361.2 s + 120
--------------------------------------------------------------------
0.01 s^6 + 1.1 s^5 + 20.35 s^4 + 110.5 s^3 + 325.2 s^2 + 384 s + 120
系统建模作业题二:
例1-2
典型二阶系统的结构图如图9所示。用SIMULINK对系统进行仿真分析。
图9 典型二阶系统结构图
(1) 画出所需模块,并给出对的的参数:
l 在sources子模块库中选中阶跃输入(step)图标,将其拖入编辑窗口,并用鼠标左键双击该图标,打开参数设定的对话框,将参数step time(阶跃时刻)设为0。
l 在Math(数学)子模块库中选中加法器(sum)图标,拖到编辑窗口中,并双击该图标将参数List of signs(符号列表)设为|+-(表达输入为正,反馈为负)。
l 在continuous(连续)子模块库中、选积分器(Integrator)和传递函数(Transfer Fcn)图标拖到编辑窗口中,并将传递函数分子(Numerator)改为〔900〕,分母(Denominator)改为〔1,9〕。
l 在sinks(输出)子模块库中选择scope(示波器)和Out1(输出端口模块)图标并将之拖到编辑窗口中。
(3)将画出的所有模块按图9用鼠标连接起来,构成一个原系统的框图描述如图10所示。
(4)选择仿真算法和仿真控制参数,启动仿真过程。
三、控制系统的时域分析
1. 线性系统稳定性分析
线性系统稳定的充要条件是系统的特性根均位于S平面的左半部分。系统的零极点模型可以直接被用来判断系统的稳定性。此外,MATLAB语言中提供了有关多项式的操作函数,也可以用于系统的分析和计算。
(1)直接求特性多项式的根
设p为特性多项式的系数向量,则MATLAB函数roots()可以直接求出方程p=0在复数范围内的解v,该函数的调用格式为:
v=roots(p)
(2)由根创建多项式
假如已知多项式的因式分解式或特性根,可由MATLAB函数poly()直接得出特性多项式系数向量,其调用格式为:
p=poly(v)
(3)多项式求值
在MATLAB 中通过函数polyval()可以求得多项式在给定点的值,该函数的调用格式为:
polyval(p,v)
(4)部分分式展开
考虑下列传递函数:
式中,但是和中某些量也许为零。
MATLAB函数可将展开成部分分式,直接求出展开式中的留数、极点和余项。该函数的调用格式为:
(16)
则的部分分式展开由下式给出:
式中,,…, ,为极点,
,,…, 为各极点的留数,为余项。
(5)由传递函数求零点和极点。
在MATLAB控制系统工具箱中,给出了由传递函数对象G求出系统零点和极点的函数,其调用格式分别为:
Z=tzero(G) (18)
P=G.P{1} (19)
(6)零极点分布图。
在MATLAB中,可运用pzmap()函数绘制连续系统的零、极点图,从而分析系统的稳定性,该函数调用格式为:
pzmap(num,den)
2. 系统动态特性分析。
(1)时域响应解析算法――部分分式展开法。
用拉氏变换法求系统的单位阶跃响应,可直接得出输出c(t)随时间t变化的规律,对于高阶系统,输出的拉氏变换象函数为:
(21)
对函数c(s)进行部分分式展开,我们可以用num,[den,0]来表达c(s)的分子和分母。
(2)单位阶跃响应的求法:
控制系统工具箱中给出了一个函数step()来直接求取线性系统的阶跃响应,假如已知传递函数为:
则该函数可有以下几种调用格式:
step(num,den) (22)
step(num,den,t) (23)
或
step(G) (24)
step(G,t) (25)
该函数将绘制出系统在单位阶跃输入条件下的动态响应图,同时给出稳态值。对于式23和25,t为图像显示的时间长度,是用户指定的时间向量。式22和24的显示时间由系统根据输出曲线的形状自行设定。
假如需要将输出结果返回到MATLAB工作空间中,则采用以下调用格式:
c=step(G) (26)
此时,屏上不会显示响应曲线,必须运用plot()命令去查看响应曲线。
(3)求阶跃响应的性能指标
MATLAB提供了强大的绘图计算功能,可以用多种方法求取系统的动态响应指标。我们一方面介绍一种最简朴的方法――游动鼠标法。对于例16,在程序运营完毕后,用鼠标左键点击时域响应图线任意一点,系统会自动跳出一个小方框,小方框显示了这一点的横坐标(时间)和纵坐标(幅值)。按住鼠标左键在曲线上移动,可以找到曲线幅值最大的一点――即曲线最大峰值,此时小方框中显示的时间就是此二阶系统的峰值时间,根据观测到的稳态值和峰值可以计算出系统的超调量。系统的上升时间和稳态响应时间可以依此类推。这种方法简朴易用,但同时应注意它不合用于用plot()命令画出的图形。
另一种比较常用的方法就是用编程方式求取时域响应的各项性能指标。与上一段介绍的游动鼠标法相比,编程方法稍微复杂,但通过下面的学习,读者可以掌握一定的编程技巧,可以将控制原理知识和编程方法相结合,自己编写一些程序,获取一些较为复杂的性能指标。
通过前面的学习,我们已经可以用阶跃响应函数step( )获得系统输出量,若将输出量返回到变量y中,可以调用如下格式
[y,t]=step(G) (27)
该函数还同时返回了自动生成的时间变量t,对返回的这一对变量y和t的值进行计算,可以得届时域性能指标。
① 峰值时间(timetopeak)可由以下命令获得:
[Y,k]=max(y); (28)
timetopeak=t(k) (29)
应用取最大值函数max()求出y的峰值及相应的时间,并存于变量Y和k中。然后在变量t中取出峰值时间,并将它赋给变量timetopeak。
② 最大(比例)超调量(percentovershoot)可由以下命令得到:
C=dcgain(G);
[Y,k]=max(y); (30)
percentovershoot=100*(Y-C)/C (31)
dcgain( )函数用于求取系统的终值,将终值赋给变量C,然后依据超调量的定义,由Y和C计算出比例超调量。
③ 上升时间(risetime)可运用MATLAB中控制语句编制M文献来获得。一方面简朴介绍一下循环语句while的使用。
while循环语句的一般格式为:
while<循环判断语句>
循环体
end
其中,循环判断语句为某种形式的逻辑判断表达式。
当表达式的逻辑值为真时,就执行循环体内的语句;当表达式的逻辑值为假时,就退出当前的循环体。假如循环判断语句为矩阵时,当且仅当所有的矩阵元素非零时,逻辑表达式的值为真。为避免循环语句陷入死循环,在语句内必须有可以自动修改循环控制变量的命令。
规定出上升时间,可以用while语句编写以下程序得到:
C=dcgain(G);
n=1;
while y(n)<C
n=n+1;
end
risetime=t(n)
在阶跃输入条件下,y 的值由零逐渐增大,当以上循环满足y=C时,退出循环,此时相应的时刻,即为上升时间。
对于输出无超调的系统响应,上升时间定义为输出从稳态值的10%上升到90%所需时间,则计算程序如下:
C=dcgain(G);
n=1;
while y(n)<0.1*C
n=n+1;
end
m=1;
while y(n)<0.9*C
m=m+1;
end
risetime=t(m)-t(n)
④ 调节时间(setllingtime)可由while语句编程得到:
C=dcgain(G);
i=length(t);
while(y(i)>0.98*C)&(y(i)<1.02*C)
i=i-1;
end
setllingtime=t(i)
用向量长度函数length( )可求得t序列的长度,将其设定为变量i的上限值。
控制系统时域分析法作业题三:
已知二阶系统传递函数为:
例2-1
求动态性能曲线和上升时间,峰值时间,超调量,调节时间等性能指标。
>> G=zpk([ ],[-1+3*i,-1-3*i ],3);
% 计算最大峰值时间和它相应的超调量。
C=dcgain(G)
[y,t]=step(G);
plot(t,y)
grid
[Y,k]=max(y);
timetopeak=t(k)
percentovershoot=100*(Y-C)/C
% 计算上升时间。
n=1;
while y(n)<C
n=n+1;
end
risetime=t(n)
% 计算稳态响应时间。
i=length(t);
while(y(i)>0.98*C)&(y(i)<1.02*C)
i=i-1;
end
setllingtime=t(i)
运营后的响应图如图 15,命令窗口中显示的结果为
C(稳定幅值) = timetopeak(峰值时间) =
0.3000 1.0491
Percentovershoot(超调量) = risetime (上升时间)=
35.0914 0.6626
setllingtime (调节时间)=
3.5337
图 15 二阶系统阶跃响应
控制系统时域分析作业题四:
例2-2
给定系统的传递函数:
求单位阶跃响应表达式,曲线,上升时间(95%),峰值时间,调节时间,超调量
>> num=[1,7,24,24]
den=[1,10,35,50,24]
[r,p,k]=residue(num,[den,0])
输出结果为
r= p= k=
-1.0000 -4.0000 [ ]
2.0000 -3.0000
-1.0000 -2.0000
-1.0000 -1.0000
1.0000 0
则可知:
输出函数c(s)为:
拉氏变换得:
C=dcgain(G)
[y,t]=step(G);
plot(t,y)
grid
[Y,k]=max(y);
timetopeak=t(k)
percentovershoot=100*(Y-C)/C
% 计算上升时间。
n=1;
while y(n)<0.95*C
n=n+1;
end
risetime=t(n)
% 计算稳态响应时间。
i=length(t);
while(y(i)>0.98*C)&(y(i)<1.02*C)
i=i-1;
end
setllingtime=t(i)
运营结果为:
Timetopeak(峰值时间) =
5.8281
Percentovershoot(超调量) =
-0.2952
Setllingtime(调节时间) =
3.9208
Risetime(上升时间) =
3.0730
四、控制系统的根轨迹
假设闭环系统中的开环传递函数可以表达为:
则闭环特性方程为:
特性方程的根随参数K的变化而变化,即为闭环根轨迹。控制系统工具箱中提供了rlocus()函数,可以用来绘制给定系统的根轨迹,它的调用格式有以下几种:
rlocus(num,den) (32)
rlocus(num,den,K) (33)
或者 rlocus(G) (34)
rlocus(G,K) (35)
以上给定命令可以在屏幕上画出根轨迹图,其中G为开环系统G0(s)的对象模型,K为用户自己选择的增益向量。假如用户不给出K向量,则该命令函数会自动选择K向量。假如在函数调用中需要返回参数,则调用格式将引入左端变量。如
[R,K]=rlocus(G) (36)
此时屏幕上不显示图形,而生成变量R和K。
R为根轨迹各分支线上的点构成的复数矩阵,K向量的每一个元素相应于R矩阵中的一行。若需要画出根轨迹,则需要采用以下命令:
plot(R,¹¹) (37)
plot()函数里引号内的部分用于选择所绘制曲线的类型,具体内容见表1。控制系统工具箱中尚有一个rlocfind()函数,该函数允许用户求取根轨迹上指定点处的开环增益值,并将该增益下所有的闭环极点显示出来。这个函数的调用格式为:
[K,P]=rlocfind(G) (38)
这个函数运营后,图形窗口中会出现规定用户使用鼠标定位的提醒,用户可以用鼠标左键点击所关心的根轨迹上的点。这样将返回一个K变量,该变量为所选择点相应的开环增益,同时返回的P变量则为该增益下所有的闭环极点位置。此外,该函数还将自动地将该增益下所有的闭环极点直接在根轨迹曲线上显示出来。
例题5
例3-1
负反馈系统的开环传递函数为
试绘制k由0至无穷变化时,其闭环系统的根轨迹。
解:num=conv([1 4],[1 8]);
den1=conv([1 12],[1 12]);
den2=conv([1 0],[1 0]);
Den=conv(den1,den2);
Rlocus(num,den)
还可以求出分离点和回合点:
运用rlocfind函数。
rlocfind(num,den)
Select a point in the graphics window
selected_point =
-6.0190 +(-) 5.1708i
ans =
128.0506
其中,-6.0276+502632i是分离点,相应的另一个分离点是-6.i。此时,k=128.0001.
例题六
3-2
负反馈控制系统的被控对象和传感器模型分别为
和
控制器为比例控制器
(1) 求系统临界稳定是的k值;
(2) 求阻尼比为0.8的k值;
(3) 观测系统稳定期的k对系统的影响;
(4) K=1.225时观测给定输入和扰动输入的单位阶跃响应。
解:
系统的根轨迹为:
>> T1=2;
>> T2=0.5;
>> Tse=0.05;
>> Kproc=4;
>> denG=conv([T1,1],[T2,1]);
>> Gp=tf(Kproc,denG);
>> H=tf(1,[Tse 1]);
>> Ghp=Gp*H;
>> rlocus;
Here is an example of how the function rlocus works:
Consider a randomly gene
展开阅读全文