控制工程基础 (第十一章)

73
控控控控控控 控控控 控控 (一) 控控控控

description

控制工程基础 (第十一章). 清华大学. 第十一章 Matlab 软件工具 在控制系统分析和综合中的应用. Matlab 基本特点 控制系统在 Matlab 中的描述 进行部分分式展开 控制系统的时间响应分析 控制系统的频域响应分析 控制系统的根轨迹图 系统稳定性分析 Simulink 仿真工具. 1、 matlab 基本特点. Matlab 简介: 1980年前后,美国 moler 博士构思并开发; 最初的 matlab 版本是用 fortran 语言编写,现在的版本用 c 语言改写; - PowerPoint PPT Presentation

Transcript of 控制工程基础 (第十一章)

Page 1: 控制工程基础 (第十一章)

控制工程基础 (第十一章)

清华大学

Page 2: 控制工程基础 (第十一章)

第十一章 Matlab软件工具在控制系统分析和综合中的应用

• Matlab 基本特点• 控制系统在 Matlab 中的描述• 进行部分分式展开• 控制系统的时间响应分析• 控制系统的频域响应分析• 控制系统的根轨迹图• 系统稳定性分析• Simulink 仿真工具

Page 3: 控制工程基础 (第十一章)

1 、 matlab 基本特点

Matlab 简介:• 1980 年前后,美国 moler 博士构思并开发;• 最初的 matlab 版本是用 fortran 语言编写,现在的版本用 c 语言改写;

• 1992 年推出了具有划时代意义的 matlab 4.0 版本;并于 1993 年推出了其windows 平台下的微机版,现在比较新的版本是 6.5 版

Page 4: 控制工程基础 (第十一章)

Matlab 语言特点:Matlab 以复数矩阵为最基本的运算单元,既可以对它整体地进行处理,也可以对它的某个或某些元素进行单独地处理。在matlab 中,数据的存储 / 输入 / 输出都是以矩阵为基础的,矩阵和其它变量不需要预先定义。 matlab 语言最基本的赋值语句结构为 变量名列表 = 表达式

Page 5: 控制工程基础 (第十一章)

等号右边的表达式可以由分号结束,也可以由逗号或换行结束,但它们的含义是不同的。如果用分号结束,则左边的变量结果将不在屏幕上显示出来,否则将把左边返回矩阵的内容全部显示出来。如 » A=[1,0,1;1,0,0;2,1,0]; » B=[1,0,2;2,1,1;1,0,1]

B = 1 0 2 2 1 1 1 0 1

Page 6: 控制工程基础 (第十一章)

在 matlab 下,矩阵 A 和矩阵 B 的乘积(假定

其中 A , B 矩阵是可乘的)可以简单地由运

算 C=A*B 求出» C=A*B

C = 2 0 3 1 0 2 4 1 5

Page 7: 控制工程基础 (第十一章)

而 D=A.*B 称点乘积运算,即表示 A 和 B矩阵

的相应元素之间直接进行乘法运算,然后将结果赋给 D 矩阵,点乘积运算要求 A 和

B 矩阵的维数相同。

» D=A.*BD= 1 0 2 2 0 0 2 0 0

Page 8: 控制工程基础 (第十一章)

Matlab 下提供了两种文件格式: m 文件, matlab 函数

• M 文件是普通的 ascii 码构成的文件,在这样的文件中只有由 matlab 语言所支持的语句,类似于 dos 下的批处理文件,它的执行方式很简单,用户只需在matlab 的提示符 >> 下键入该 m 文件的文件名,这样 matlab 就会自动执行该 m 文件中的各条语句。它采用文本方式,编程效率高,可读性很强。

Page 9: 控制工程基础 (第十一章)

•Matlab 函数是最常用的特殊 m 文件,该函数是由function 语句引导,其基本格式如下 Function 返回变量列表 = 函数名(输入量列表) 注释说明语句段 函数体语句调用时在 matlab 的提示符下键入函数名,并包括输入变量。类似于 c 语言的子程序调用。如

Function plot_sin(xmin,xmax)X=xmin:min(0.01,(xmax-xmin)/100):xmax;

Plot(x,sin(x));% This is a demo

Page 10: 控制工程基础 (第十一章)

2 、控制系统在 matlab 中的描述

要分析系统,首先需要能够描述这个系统。例如用传递函数的形式描述系统

11

21

11

21)(

nn

nnmm

mm

asasasa

bsbsbsbsG

Page 11: 控制工程基础 (第十一章)

在 matlab 中,用 num=[b1,b2,…,bm,bm1] 和 den=[a1,a2,…,an,an1]分别表示分子和分母多项式系数,然后利用下面的语句就可以表示这个系统 sys=tf(num,den)其中 tf() 代表传递函数的形式描述系统,还可以用零极点形式来描述,语句为 sys1=zpk(sys)

Page 12: 控制工程基础 (第十一章)

而且传递函数形式和零极点形式之间可以相互转化,语句为

[z,p,k] = tf2zp(num,den) [num,den] = zp2tf(z,p,k)当传递函数复杂时,应用多项式乘法函数conv() 等实现。例如 den1=[1,2,2] den2=[2,3,3,2] den=conv(den1,den2)

Page 13: 控制工程基础 (第十一章)

3 、进行部分分式展开

对于下列传递函数

nn

nnnn

nn

i

o

asasas

bsbsbsb

sX

sX

11

1

11

10

Page 14: 控制工程基础 (第十一章)

num 和 den 分别表示传递函数的分子和分母的系数,即 num =[ bo,bl,…,bn]

den =[ 1,al.…,an]

命令 [ r , p , k ] =residue ( num , den )将求出传递函数的部分分式展开式中的留数、极点和余项,即得到

skps

r

ps

r

ps

r

sX

sX

n

n

i

o

2

2

1

1

Page 15: 控制工程基础 (第十一章)

例: 对于下列系统传递函数

23

32

ss

s

sX

sX

i

o

Page 16: 控制工程基础 (第十一章)

分子分母表示为 num=[0,1,3]

den=[1,3,2]

采用命令[r,p,k]=residue(num,den)

得到 [ r , p , k ] =

residue ( num , den )

Page 17: 控制工程基础 (第十一章)

r = 2 . 0000

- 1 . 0000

p =- 1. 0000

- 2.0000

k =[]即

2

1

1

2

23

32

ssss

s

sX

sX

i

o

Page 18: 控制工程基础 (第十一章)

反之,利用下列命令 [num,den]=residue(r,p,k)

可以将部分分式展开式返回到传递函数多项式之比的形式,即得到 [ num , den ] =residue ( r , p , k )num =0.0000 1.0000 3.0000

den=

1.0000 3.0000 2.0000

Page 19: 控制工程基础 (第十一章)

当包含 m 重极点时,部分分式展开式将包括下列 m 项:

mjmj

j

j

j

j

ps

r

ps

r

ps

r

1

2

1

Page 20: 控制工程基础 (第十一章)

例 对于下列系统传递函数

分子分母表示为 num=[0,1,2,3]

den=[1,3,3,1]

采用命令[r,p,k]=residue(num,den)

133

32

1

3223

2

3

2

sss

ss

s

ss

sX

sX

i

o

Page 21: 控制工程基础 (第十一章)

得到num =[ 0 1 2 3 ];den =[ 1 3 3 1 ];[ r , p , k ] =

residue ( num , den )

Page 22: 控制工程基础 (第十一章)

r =1.0000

0.0000

2.0000

p =- 1.0000

- 1.0000

- l.0000

k =[]即

32 1

2

1

0

1

1

ssssX

sX

i

o

Page 23: 控制工程基础 (第十一章)

4 、线性系统的时间响应分析Matlab 的 Control 工具箱提供了很多线性系统在特定输入下仿真的函数,例如连续时间系统在阶跃输入激励下的仿真函数 step() ,脉冲激励下的仿真函数impulse()及任意输入激励下的仿真函数lsim() 等,其中阶跃响应函数 step() 的调用格式[y,x]=step(sys,t)或 [y,x]=step(sys)

Page 24: 控制工程基础 (第十一章)

其中 sys 可以由 tf() 或 zpk() 函数得到,t 为选定的仿真时间向量,如果不加 t ,仿真时间范围自动选择。此函数只返回仿真数据而不在屏幕上画仿真图形,返回值y 为系统在各个仿真时刻的输出所组成的矩阵,而 x 为自动选择的状态变量的时间响应数据。如果用户对具体的响应数值不感兴趣,而只想绘制出系统的阶跃响应曲线 , 则 可 以 由 如 下 的 格 式 调 用step(sys,t) 或 step(sys)

Page 25: 控制工程基础 (第十一章)

求 取 脉 冲 响 应 的 函 数 impulse() 和step() 函数的调用格式完全一致,而任意输入下的仿真函数 lsim() 的调用格式稍有不同,因为在此函数的调用时还应该给出一个输入表向量,该函数的调用格式为 [y,x]=lsim(sys,u,t)

Page 26: 控制工程基础 (第十一章)

式中, u 为给定输入构成的列向量,它的元素个数应该和 t 的个数是一致的。当然该函数若调用时不返回参数,也可以直接绘制出响应曲线图形。例如 sys=tf(num,den) t = 0:0.01:5; u = sin(t); lsim(sys,u,t) 为单输入模型 sys 对 u(t)=sin(t) 在 5秒之内的输入响应仿真。

Page 27: 控制工程基础 (第十一章)

MATLAB还提供了离散时间系统的仿真函数,包括阶跃响应函数 dstep() ,脉冲响应函数 dimpulse() 和任意输入响应函数dlsim() 等,它们的调用方式和连续系统的不完全一致,读者可以参阅 MATLAB的帮助,如在 MATLAB 的提示符 >> 下键入 help dstep 来了解它们的调用方式

Page 28: 控制工程基础 (第十一章)

时域分析常用函数如下: step - 阶跃响应impulse - 脉冲响应lsim - 对指定输入的连续输出gensig - 对 LSIM产生输入信号stepfun - 产生单位阶跃输入

Page 29: 控制工程基础 (第十一章)

例 对于下列系统传递函数

下列 MATLAB Programl1.1 将给出该系统的单位阶跃响应曲线。该单位阶跃响应曲线如图 1 所示。

1225

502

sssX

sX

i

o

Page 30: 控制工程基础 (第十一章)

----MATLAB Programl1.1----num=[0,0,50];

den=[25,2,1];

step(num,den)

grid

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

Page 31: 控制工程基础 (第十一章)

图1 G(s)=50/(252s +2s+1)的单位阶跃响应曲线

Page 32: 控制工程基础 (第十一章)

例 考虑下列系统

试求该系统的单位阶跃响应曲线。 虽然用 MATLAB求该系统的单位阶跃响应曲线时,不需要求它的传递函数表达式,这里导出这种表达式,以便作为参考。 对于给定的系统,传递矩阵 G( s)为

2

1

2

1

2

1

2

1

2

1

10

01

01

11

05.6

11

x

x

y

y

u

u

x

x

x

x

Page 33: 控制工程基础 (第十一章)

sU

sU

ssss

sss

s

ss

s

sY

sY

s

ss

ss

s

s

ss

s

s

BAsICsG

2

1

22

22

2

1

2

2

1

1

5.6

5.6

5.6

5.75.65.6

1

5.65.7

1

5.6

1

01

11

15.6

1

5.6

1

01

11

5.6

11

10

01

Page 34: 控制工程基础 (第十一章)

该系统包含两个输入量和两个输出量,根据考虑不同的输入信号和输出信号,可以定义 4个传递函数。当考虑信号 u1 为输入量时,我们假设 u2 为零,反之亦然。这 4个传递函数为

5.6

5.6

5.6

5.6

5.7

5.6

1

22

2

22

1

21

2

21

1

sssU

sY

ss

s

sU

sY

ss

s

sU

sY

ss

s

sU

sY

Page 35: 控制工程基础 (第十一章)

利用下列命令:step ( A,B,C,D )可以画出 4个单独的阶跃响应曲线,程序如下:

A=[-1 -1;6.5 0]; B=[1 1;1 0]; C=[1 0;0 1]; D=[0 0;0 0];step(A,B,C,D)

Page 36: 控制工程基础 (第十一章)
Page 37: 控制工程基础 (第十一章)

例 对于下列系统传递函数

下列 MATLAB Programl1.2 将给出该系统的单位脉冲响应曲线。该单位脉冲响应曲线如图 2 所示。

1225

502

sssX

sX

i

o

Page 38: 控制工程基础 (第十一章)

----MATLAB Programl1.2----

num=[0,0,50];

den=[25,2,1];

impulse(num,den)

grid

title('Unit-Impulse Response of G(s)=50/(25s^2+2s+1)')

Page 39: 控制工程基础 (第十一章)

图2 G(s)=50/(252s +2s+1)的单位脉冲响应曲线

Page 40: 控制工程基础 (第十一章)

在 MATLAB 中没有斜坡响应命令,可利用阶跃响应命令求斜坡响应,先用 s 除 G ( s ),再利用阶跃响应命令。例如,考虑下列闭环系统:

对于单位斜坡输人量

下列 MATLAB Programl1.3 给出该系统单位斜坡响应曲线。该单位斜坡响应曲线如图 3 所示。

1225

502

sssX

sX

i

o

2

1

ssX i

ssssssssssssX o

1

225

501

1225

501

1225

5023222

Page 41: 控制工程基础 (第十一章)

----MATLAB Programl1.3----

num=[0,0,0,50];

den=[25,2,1,0];

t = 0:0.01:100;

step(num,den,t)

grid

title('Unit-Step ramp Response of G(s)=50/(25s^2+2s+1)')

Page 42: 控制工程基础 (第十一章)

图3 G(s)=50/(252s +2s+1)的单位斜坡响应曲线

Page 43: 控制工程基础 (第十一章)

5 、控制系统的频域响应分析已知系统的传递函数模型如第 2节所示,则该系统的频率响应为

可以由下面的语句来实现,如果有一个频率向量w,则 Gw=polyval(num, sqrt(-1)*w)./polyval(den,sqrt(-1)*w);其中num 和 den分别为系统的分子分母多项式系数向量。

11

21

11

21

)()()(

)()()()(

nn

nnmm

mm

ajajaja

bjbjbjbjG

Page 44: 控制工程基础 (第十一章)

频率响应曲线绘制

MATLAB 提供了多种求取并绘制系统频率响应曲线的函数,如 Bode 图绘制函数bode() , Nyquist 曲 线 绘 制 函 数nyquist() 等,其中 bode() 函数的调用格式为

[m,p]=bode(num,den,w)这里, num,den 和前面的叙述一样, w为频率点构成的向量,该向量最好由logspace() 函数构成。 m,p 分别代表Bode 响应的幅值向量和相位向量。

Page 45: 控制工程基础 (第十一章)

如果用户只想绘制出系统的 Bode 图,而对获得幅值和相位的具体数值并不感兴趣,则可以由以下更简洁的格式调用 bode()函数

bode(num,den,w)或更简洁地 bode(num,den)这时该函数会自动地根据模型的变化情况选择一个比较合适的频率范围。

Page 46: 控制工程基础 (第十一章)

Nyquist曲线绘制函数 nyquist() 类似于bode() 函数,可以利用 help nyquist来了解它的调用方法。在分析系统性能的时候经常涉及到系统的幅值裕量与相位裕量的问题,使用 Control工具箱提供的 margin() 函数,可以直接求出系统的幅值裕量与相位裕量,该函数的调 用 格 式 为[Gm,Pm,wcg,wcp]=margin(num,den)

Page 47: 控制工程基础 (第十一章)

可以看出,该函数能直接由系统的传递函数来求取系统的幅值裕量 Gm 和相位裕度裕量 Pm ,并求出幅值裕量和相位裕量处相应的频率值 wcg 和 wcp 。

Page 48: 控制工程基础 (第十一章)

常用频域分析函数如下: bode - 频率响应伯德图 nyquist - 频率响应乃奎斯特图 nichols - 频率响应尼柯尔斯图 freqresp - 求取频率响应数据 margin - 幅值裕量与相位裕量 pzmap - 零极点图使用时可以利用他们的帮助,如 help bode 。另外,命令 ltiview 可以画时域响应和频域响应图,利用 help ltiview查看使用说明。

Page 49: 控制工程基础 (第十一章)

例 对于下列系统传递函数

下列 MATLAB Programl1.4 将给出该系统对应的伯德图。其伯德图如图 4 所示。

1225

50)(

2

sssG

Page 50: 控制工程基础 (第十一章)

----MATLAB Programl1.4----

num=[0,0,50];

den=[25,2,1];

bode(num,den)

grid

title('Bode Diagram of G(s)=50/(25s^2+2s+1)')

Page 51: 控制工程基础 (第十一章)

图4 G(s)=50/(252s+2s+1)’)的伯德图

Page 52: 控制工程基础 (第十一章)

如果希望从 0.01弧度/秒到 1000弧度 /秒画伯德图,可输入下列命令: w=logspace(-2,3,100)

bode(num,den,w)

该命令在 0.01弧度/秒和 100弧度/秒之间产生 100 个在对数刻度上等距离的点

Page 53: 控制工程基础 (第十一章)

例 对于下列系统传递函数

下列 MATLAB Programl1.5 将给出该系统对应的伯德图。其伯德图如图 5 所示。

22

310)(

2

ssss

ssG

Page 54: 控制工程基础 (第十一章)

----MATLAB Programl1.5----

num=[10,30];

den1=[1,2,0];

den2=[1,1,2];

den=conv(den1,den2);

w=logspace(-2,3,100);

bode(num,den,w)

grid

title('Bode Diagram of G(s)=10(s+3)/s(s+2)(s^2+s+2)')

Page 55: 控制工程基础 (第十一章)

图 5 G(s)=10(s+3)/s(s+2)(s^2+s+2)')的伯德图

Page 56: 控制工程基础 (第十一章)

例 对于下列系统传递函数

下列 MATLAB Programl1.6 将给出该系统对应的乃奎斯图。其乃奎斯特图如图 6 所示。----MATLAB Programl1.6---- num=[0,0,50]; den=[25,2,1,]; nyquist(num,den) title('Nyquist Plot of G(s)=50/(25s^2+2s+1)')

1225

50)(

2

sssG

Page 57: 控制工程基础 (第十一章)

图6 G(s)=50/(252s +2s+1)的乃奎斯特图

Page 58: 控制工程基础 (第十一章)

例 考虑由下列方程定义的系统:

该系统包含两个输入量和两个输出量。这里存在 4种正弦输出 -输入关系: Y1 ( jω)/ Ul ( jω)、 Y2 ( jω)/Ul ( jω)、 Y1 ( jω)/ U2 ( jω)和Y2 ( jω)/ U2( jω)。试画出该系统的奈魁斯特图。

Page 59: 控制工程基础 (第十一章)

MATLAB Program 10A=[-1 -1;6.5 0];B=[1 1;1 0];C=[1 0;0 1];D=[0 0;0 0]; nyquist(A,B,C,D)

Page 60: 控制工程基础 (第十一章)
Page 61: 控制工程基础 (第十一章)

6 、控制系统的根轨迹图 通常采用下列 MATLAB命令画根轨迹 rlocus ( num , den )利用该命令,可以在屏幕上得到画出的根轨迹图。增益向量 K 自动被确定。命令rlocus 既适用于连续系统,也适用于离散时间系统。对于定义在状态空间内的系统,其命令为 rlocus ( A , B , C , D )MATLAB 在绘图命令中还包含自动轴定标功能。

Page 62: 控制工程基础 (第十一章)

例 对于一单位反馈控制系统,其开环传递函数为

下列 MATLAB Programl1.7 将给出该系统对应的根轨迹图。其根轨迹图如图 7 所示。

22

3)(

2

ssss

sKsG

Page 63: 控制工程基础 (第十一章)

--------- MATLAB Programl1.7-----------

num=[1,3];

den1=[1,2,0];

den2=[1,1,2];

den=conv(den1,den2);

rlocus(num,den)

v=[-10 10 -10 10];axis(v)

grid

title('Root-Locus Plot of G(s)=K(s+3)/s(s+2)(s^2+s+2)')

Page 64: 控制工程基础 (第十一章)

图 7 G(s)=k(s+3)/s(s+2)(s^2+s+2)')的根轨迹图

Page 65: 控制工程基础 (第十一章)

7 、系统稳定性分析

给定一个控制系统,可利用 MATLAB 在它的

时域、频域图形分析中看出系统的稳定性,并可直接求出系统的相角裕量和幅值裕量。此外,我们还可通过求出特征根的分布更直接地判断出系统稳定性。如果闭环系统所有的特征根都为负实部则系统稳定。

Page 66: 控制工程基础 (第十一章)

例如,给出控制系统闭环传递函数为

» num=[3,2,1,4,2]num = 3 2 1 4 2» den=[3,5,1,2,2,1]den = 3 5 1 2 2 1» [z,p]=tf2zp(num,den)

12253

24232345

234

sssss

ssss

Page 67: 控制工程基础 (第十一章)

z = 0.4500 + 0.9870i 0.4500 - 0.9870i -1.0000 -0.5666 p = -1.6067 0.4103 + 0.6801i 0.4103 - 0.6801i -0.4403 + 0.3673i -0.4403 - 0.3673I»pzmap(num,den)

Page 68: 控制工程基础 (第十一章)

-2 -1.5 -1 -0.5 0 0.5-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Real Axis

Imag

Axis

Pole zero map

Page 69: 控制工程基础 (第十一章)

» ii=find(real(p)>0)ii = 2 3» n1=length(ii)n1 = 2» if(n1>0), disp(['System is

unstable, with ' int2str(n1) ' unstable poles']);

else disp('Syatem is stable');end

Page 70: 控制工程基础 (第十一章)

System is unstable,with 2 unstable poles» disp('The unstable poles are: '), disp(p(ii))The unstable poles are: 0.4103 + 0.6801i 0.4103 - 0.6801i以上求出具体的零极点、画出零极点分布、明确指出系统不稳定,并指出引起系统不稳定的具体右根。

Page 71: 控制工程基础 (第十一章)

8 、 Simulink 仿真工具如果控制系统的结构很复杂,则若不借助专用的系统建模软件,在过去很难准确地把一个控制系统的复杂模型输入给计算机,对之进行分析和仿真。 1990 年 MathWorks软件公司为 MATLAB 提供了新的控制系统模型 图 形图 形 输 入与仿 真 工 具 ,命名 为SIMULINK ,这一名字的含义相当直观, SIMU (仿真)与 LINK (连接),亦即可以利用鼠标器在模型窗口上“画”出所 需 的 控 制 系 统 模 型 , 然 后 利 用SIMULINK 提供的功能来对系统进行仿真或线性化。这种法的一个优点是,可以使得一个很复杂系统的输入变得相当容易且直观。

Page 72: 控制工程基础 (第十一章)

首先根据一个例子来说明控制系统框图模型的建立,这是一个简化的调速系统。我们看如何利用 Simulink 工具输入这个框图,然后再进行分析。具体利用 Simulink建立框图的方法见网络辅助教学中“控制工程基础”第 11 章有关内容。

s

s 15 niV

1 图 伺服电机控制系统方框图(速度环)

10.00195s

213.0

)A/V(5.0 )A)(s/rad(550 2

s

fV

n

Page 73: 控制工程基础 (第十一章)

下图是 Matlab 中 Simulink 工具建立的例题框图。可以点击图中 Simulation 下的 start 图标开始仿真,然后双击框图中的 scope ,查看仿真图形。其他仿真命令大家可以自行学习。