matlab dcgain,MATLAB实现控制系统的时域分析

目的

用 MATLAB 对控制系统进行时域分析,包括典型响应、判断系统稳 定性和分析系统的动态特性。

理论

6feedc58c99f1b56f11748e6f1ea3b97.png

二、典型响应及其性能分析

1、单位阶跃响应

单位阶跃响应调用格式为:

(1) step(num,den)

(2) step(num,den,t)

(3) step(G)

(4) step(G,t)

该函数将绘制出系统在单位阶跃输入条件下的动态响应图,同时给出稳态值。其中 t 为图像显示的时间长度,是用户指定的时间向量。

如果需要将输出结果返回到 MATLAB 工作空间中,则采用以下调用格式:

c=step(G)

2、求阶跃响应的性能指标

MATLAB 提供了强大的绘图计算功能,可以用多种方法求取系统的动态响应指标。

(1) 最简单的方法――游动鼠标法

在程序运行完毕后,用鼠标左键点击时域响应图线任意一点,

系统会自动跳出一个小方框, 小方框显示了这一点的横坐标 (时间)和纵坐标 (幅值)。按住鼠标左键在曲线上移动,可以找到曲线幅值最大的一点, 即曲线最大峰值,此时小方框中显示的时间就是此二阶系统的峰值时间,根据观察到的稳态值和峰值可以计算出系统的超调量。

这种方法简单易用,但同时应注意它不适用于用 plot()命令画出的图形。

(2) 用编程方式求取时域响应的各项性能指标

由上面内容可知, 用阶跃响应函数 step( )可以获得系统输出量,若将输出量

返回到变量 y 中,可以调用如下格式命令:

[y,t]=step(G)

该函数还同时返回了自动生成的时间变量 t,对返回的这一对变量 y 和 t 的

值进行计算,可以得到时域性能指标。

① 峰值时间

[Y,k]=max(y);timetopeak=t(k)

应用取最大值函数 max()求出 y 的峰值及相应的时间,并存于变量 Y 和 k 中。

然后在变量 t 中取出峰值时间,并将它赋给变量 timetopeak。

② 超调量

C=dcgain(G);[Y,k]=max(y);overshoot=100*(Y-C)/C

dcgain( )函数用于求取系统的终值,将终值赋给变量 C,然后依据超调量的

定义,由 Y 和 C 计算出超调量。

③ 上升时间

可以用 while 语句编写以下程序得到:

C=dcgain(G); n=1;

while y(n)

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(m)<0.9*C

m=m+1;

end

risetime=t(m)-t(n)

④ 调节时间(取误差带为 0.02)

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 的上限值。

3、脉冲响应

脉冲响应调用格式为:

(1) impulse (num,den)

(2) impulse (num,den,t) 时间向量 t 的范围可以由人工给定(例如 t=0:0.1:10)

(3) [y,x]=impulse(num,den) 返回变量 y 为输出向量, x 为状态向量

(4) [y,x,t]=impulse(num,den,t) 向量 t 表示脉冲响应进行计算的时间

4、高阶系统的降阶处理

利用闭环主导极点的概念, 可将高阶系统进行降阶处理。

5、分析零点对系统单位阶跃响应的影响

三、系统稳定性分析

MATLAB 中有以下三种方法对系统进行稳定性分析:

1、利用 pzmap 绘制连续系统的零极点图;

2、利用 tf2zp 求出系统零极点;

3、利用 roots 求分母多项式的根来确定系统的极点

实操

6e0251e98ea01d9a3fd606e189dc389d.png

eadb404a01fc9524efbae71cd34914ab.png

2-1

clc,clear

num=[1,7,24,24];

den=[1,10,35,50,24,0];

[r,p,k]=residue(num,den)

504ad898c0c664fd5df02c066df548f9.png

2-2

clc,clear

num=[1];

den=[0.2,1];

G=tf(num,den);

t=0:0.1:4;

subplot(2,2,1)

step(G,t),

grid on

xlabel('t/s'),ylabel('c(t)'),title('单位阶跃响应曲线')

u1=t;

subplot(2,2,2)

lsim(G,u1,t),

grid on

xlabel('t/s'),ylabel('c(t)'),title('单位斜坡响应曲线')

u2=(1/2)*(t.^2);

subplot(2,2,3)

lsim(G,u2,t),

grid on

xlabel('t/s'),ylabel('c(t)'),title('单位加速度响应曲线')

a3795adfc8894dd77b238ffaa327768b.png

2-3

(1) 最简单的方法――游动鼠标法

num=[10];den=[1 2 10];G=tf(num,den),grid

title('Unit-Step Response of G(s)=10/(s^2+2s+10)')

cc8b957bba5e270bf0cca6ec1e656a07.png

(2) 用编程方式求取时域响应的各项性能指标

clc,clear

num=[10];den=[1 2 10];G=tf(num,den)

Wn=sqrt(10) % 求取无阻尼振荡频率

E=1/Wn % 求取阻尼比

[r,p,k]=residue(num,den);% 求取闭环极点

p

C=dcgain(G) % 求取稳态值

[y,t]=step(G);

plot(t,y),grid

title('Unit-Step Response of G(s)=10/(s^2+2s+10)')

[Y,k]=max(y) % 计算峰值、峰值时间

timetopeak=t(k)

overshoot=100*(Y-C)/C % 计算超调量

n=1;

while y(n)

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)% 计算调节时间

2-4

1.

clc,clear

syms Wn;

num1=[1];

den1 =[1 2*0 1];

den2 =[1 2*0.1 1];

den3 =[1 2*0.2 1];

den4 =[1 2*0.3 1];

den5 =[1 2*0.4 1];

den6 =[1 2*0.5 1];

den7 =[1 2*0.6 1];

den8 =[1 2*0.7 1];

den9 =[1 2*0.8 1];

den10=[1 2*1.0 1];

den11=[1 2*2.0 1];

t=[0:0.1:10];

[y1,x,t]=step(num1,den1,t);

[y2,x,t]=step(num1,den2,t);

[y3,x,t]=step(num1,den3,t);

[y4,x,t]=step(num1,den4,t);

[y5,x,t]=step(num1,den5,t);

[y6,x,t]=step(num1,den6,t);

[y7,x,t]=step(num1,den7,t);

[y8,x,t]=step(num1,den8,t);

[y9,x,t]=step(num1,den9,t);

[y10,x,t]=step(num1,den10,t);

[y11,x,t]=step(num1,den11,t);

plot(t,y1,'-',t,y2,'--',t,y3,'--',t,y4,'--',...

t,y5,'--',t,y6,':',t,y7,'--',t,y8,'+',...

t,y9,'--',t,y10,'--',t,y11,'-.'),grid

xlabel('time[sec]'),ylabel('step response')

5e10c9effb1ade200649664feca333b9.png

由图可知,当 =1rad/s,  分别为 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 1.0, 2.0 时的单位阶跃响应曲线中,=0.4到0.8时(‘+’线附近)性能最好。

=0时是无阻尼二阶系统,单位阶跃响应是一条平均值为1的余弦形式的等幅振荡曲线,

0

=1时为临界阻尼二阶系统,单位阶跃响应没有了振荡,是一条稳态值为1的无超调单调上升的曲线;

>1时为过阻尼二阶系统,随着的增大,单位阶跃响应为上升的非振荡曲线,斜率随着的增大,逐渐减小。

在过阻尼和临界阻尼的响应曲线中,临界阻尼响应具有最短的上升时间,响应速度最快。在欠阻尼响应曲线中,阻尼比越小,超调量越大,上升时间越短,在=0.4-0.8时超调量适度,调节时间较短,故通常可在此范围内的选取。

2.

clc,clear

num1=[2.^2];

num2=[4.^2];

num3=[6.^2];

num4=[8.^2];

num5=[10.^2];

num6=[12.^2];

den1 =[1 2*0.6*2 2.^2];

den2 =[1 2*0.6*4 4.^2];

den3 =[1 2*0.6*6 6.^2];

den4 =[1 2*0.6*8 8.^2];

den5 =[1 2*0.6*10 10.^2];

den6 =[1 2*0.6*12 12.^2];

t=[0:0.1:5];

[y1,x,t]=step(num1,den1,t);

[y2,x,t]=step(num2,den2,t);

[y3,x,t]=step(num3,den3,t);

[y4,x,t]=step(num4,den4,t);

[y5,x,t]=step(num5,den5,t);

[y6,x,t]=step(num6,den6,t);

plot(t,y1,'-',t,y2,'--',t,y3,'--',...

t,y4,'--', t,y5,'--',t,y6,':'),grid

xlabel('time[sec]'),ylabel('step response')

189834e0207d067003193993bd49762f.png

由图可知,当 =0.6, n 分别为 2, 4, 6, 8, 10, 12rad/s 时的单位阶跃响应曲线中,随着n的增大,上升时间越短,峰值时间越快到达,调节时间越短,性能越好。

2-5

clc,clear

num1=[16.41 16.41*1.95];

den1=[1 12 38 52 32];

num2=[1];

den2=[0.5 1 1];

t=[0:0.1:10];

[y1,x,t]=step(num1,den1,t);

[y2,x,t]=step(num2,den2,t);

plot(t,y1,':',t,y2,'--'),grid

xlabel('time[sec]'),ylabel('step response')

eedff4c585fbfec122d74a87180da4b7.png

2-6

clc,clear

num=[1 2 3 2 1];den=[1 2 6 7 3 1];

G=tf(num,den);

pzmap(G);%利用 pzmap 绘制连续系统的零极点图;

pole=roots(den)%利用 roots 求分母多项式的根来确定系统的极点

[z,p,k]=tf2zp(num,den)%利用 tf2zp 求出系统零极点;

pole =

-0.2939 + 2.1097i

-0.2939 - 2.1097i

-1.0000 + 0.0000i

-0.2061 + 0.4218i

-0.2061 - 0.4218i

z =

-0.5000 + 0.8660i

-0.5000 - 0.8660i

-0.5000 + 0.8660i

-0.5000 - 0.8660i

p =

-0.2939 + 2.1097i

-0.2939 - 2.1097i

-1.0000 + 0.0000i

-0.2061 + 0.4218i

-0.2061 - 0.4218i

k =

1

19de55569606a4c27487a9698ef603bd.png

零极点图如上图所示,由图和计算结果可知,该系统的所有极点均不具

有正实部,故系统稳定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值