实验二 一、二阶系统时域特性分析
一、
实验目的
1. 利用MATLAB对一、二阶系统进行时域分析。
2. 掌握一阶系统的时域特性,理解时间常数T对系统性能的影响。
3. 掌握二阶系统的时域特性,理解二阶系统的两个重要参数ξ和ωn 对系统动态特
性的影响。 二、
实验原理
1. MATLAB的基本知识
MATLAB为用户提供了专门用于单位阶跃响应并绘制其时域波形的函数step 阶跃响应常用格式: step(num,den)
或step(num,den,t) 表示时间范围0~t。
或step(num,den,t1:p:t2) 绘出在t1~t2时间范围内,且以时间间隔p均匀取
样的波形。
$$$$$$举例:
2s?5二阶系统闭环传函为G?s??2绘制单位阶跃响应曲线。
s?0.6s?0.6输入:
>> num=[2,5];den=[1,0.6,0.6];step(num,den) 显示:
Step Response12108Amplitude64200246810Time (sec)1214161820
14
2. 系统的单位阶跃响应
控制系统工具箱中给出了一个函数step()来直接求取线性系统的阶跃响应,如果已知传递函数为:
G(s)?num den则该函数可有以下几种调用格式:
step(num,den) (a) step(num,den,t) (b)
或
step(G) (c)
step(G,t) (d)
该函数将绘制出系统在单位阶跃输入条件下的动态响应图,同时给出稳态值。对于式(b)和(d),t为图像显示的时间长度,是用户指定的时间向量。式(a)和(c)的显示时间由系统根据输出曲线的形状自行设定。
如果需要将输出结果返回到MATLAB工作空间中,则采用以下调用格式:
c=step(G) 此时,屏上不会显示响应曲线,必须利用plot()命令去查看响应曲线。plot 可以根据两 个或多个给定的向量绘制二维图形,详细介绍可以查阅后面的章节。
$$$$$$例 已知传递函数为: G(s)?25
s2?4s?25
利用以下MATLAB命令可得阶跃响应曲线如图3-2所示。
图3-2 MATLAB绘制的响应曲线
>> num=[0,0,25]; den=[1,4,25];
step(num,den)
grid % 绘制网格线。
title(1Unit-Step Response of G(s)=25/(s^2+4s+25) 1) % 图像标题 我们还可以用下面的语句来得出阶跃响应曲线 >> G=tf([0,0,25],[1,4,25]);
15
t=0:0.1:5; % 从0到5每隔0.1取一个值。 c=step(G,t); % 动态响应的幅值赋给变量c
plot(t,c) % 绘二维图形,横坐标取t,纵坐标取c。 Css=dcgain(G) % 求取稳态值。
系统显示的图形类似于上一个例子,在命令窗口中显示了如下结果 Css=
1
$$$$$$3求阶跃响应的性能指标
MATLAB提供了强大的绘图计算功能,可以用多种方法求取系统的动态响应指标。我们首先介绍一种最简单的方法――游动鼠标法。对于例16,在程序运行完毕后,用鼠标左键点击时域响应图线任意一点,系统会自动跳出一个小方框,小方框显示了这一点的横坐标(时间)和纵坐标(幅值)。按住鼠标左键在曲线上移动,可以找到曲线幅值最大的一点――即曲线最大峰值,此时小方框中显示的时间就是此二阶系统的峰值时间,根据观察到的稳态值和峰值可以计算出系统的超调量。系统的上升时间和稳态响应时间可以依此类推。这种方法简单易用,但同时应注意它不适用于用plot()命令画出的图形。
另一种比较常用的方法就是用编程方式求取时域响应的各项性能指标。与上一段介绍的游动鼠标法相比,编程方法稍微复杂,但通过下面的学习,读者可以掌握一定的编程技巧,能够将控制原理知识和编程方法相结合,自己编写一些程序,获取一些较为复杂的性能指标。
通过前面的学习,我们已经可以用阶跃响应函数step( )获得系统输出量,若将输出量返回到变量y中,可以调用如下格式
[y,t]=step(G) 该函数还同时返回了自动生成的时间变量t,对返回的这一对变量y和t的值进行计算,可以得到时域性能指标。
① 峰值时间(timetopeak)可由以下命令获得:
[Y,k]=max(y); timetopeak=t(k)
应用取最大值函数max()求出y的峰值及相应的时间,并存于变量Y和k中。然后在变量t中取出峰值时间,并将它赋给变量timetopeak。
② 最大(百分比)超调量(percentovershoot)可由以下命令得到:
C=dcgain(G);
[Y,k]=max(y); percentovershoot=100*(Y-C)/C
dcgain( )函数用于求取系统的终值,将终值赋给变量C,然后依据超调量的定义,由Y和C计算出百分比超调量。
③ 上升时间(risetime)可利用MATLAB中控制语句编制M文件来获得。首先简单介绍一下循环语句while的使用。
while循环语句的一般格式为: while<循环判断语句> 循环体 end
其中,循环判断语句为某种形式的逻辑判断表达式。
当表达式的逻辑值为真时,就执行循环体内的语句;当表达式的逻辑值为假时,就退出当前的循环体。如果循环判断语句为矩阵时,当且仅当所有的矩阵元素非零时,逻辑表达式
16
的值为真。为避免循环语句陷入死循环,在语句内必须有可以自动修改循环控制变量的命令。
要求出上升时间,可以用while语句编写以下程序得到: C=dcgain(G); n=1;
while y(n) 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的上限值。 例 已知二阶系统传递函数为: G(s)?3 (s?1?3i)(s?1?3i)利用下面的stepanalysis.m程序可得到阶跃响应如图 3-3及性能指标数据。 >> 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 17 % 计算上升时间。 n=1; while y(n) risetime=t(n) % 计算稳态响应时间。 i=length(t); while(y(i)>0.98*C)&(y(i)<1.02*C) i=i-1; end setllingtime=t(i) 运行后的响应图如图 3-3,命令窗口中显示的结果为 C = timetopeak = 0.3000 1.0491 percentovershoot = risetime = 35.0914 0.6626 setllingtime = 3.5337 图 3-3 二阶系统阶跃响应 三、 实验仪器和用具 主要仪器设备: 1. 电脑 2. MATLAB软件 四、 实验方法与步骤 1. 一阶系统G?s??1Ts?1 18