控制系统仿真的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB 在控制系统仿真中的应用
从本章开始,正式进入到有关MATLAB 在控制系统仿真的领域中去。我们知道,对控制系统进行仿真,首先要建立系统的数学模型,这是计算机仿真的基础。我们下面先介绍控制系统数学模型的描述方法。
第一节 控制系统数学模型的基本描述方法
在控制系统仿真中,主要用4种形式的数学模型:传递函数.、零极点模型、结构图形式和状态方程模型。这些模型之间存在着内在的等效关系。 在不同的场合下可能使用的模型形式要求不同,需要了解模型之间的转换方法。
这一节主要介绍它们的MATLAB 实现。
一.控制系统的传递函数描述:(在MATLAB 中称tf 模型)
对系统的微分方程在零初始条件下做拉氏变换,则可得系统的传递函数(SISO 系统): G(s)=1
1211121)()(+-+-++++++=n n n m m m a s a s a b s b s b s u s y 对线性时不变(线性定常)系统(LTI )来说,a 、b 均为常数a1≠0。前面讲过多项式的表示方法。这里分子分母都为多项式,可将分子分母分别表示出来。即用分子分母的系数构成两个向量,唯一的确定出来: num=[b 1,b 2,…,b 1+m ]
den=[a 1,a 2,…,a 1+m ]
注意:构成分子,分母向量按降幂排列的顺序。
这只是一个简单的特例,很多时候,传递函数的分子、分母均为多项式相乘的形式,如:
)
()())(()(5s 2s 3s 1s s 6s 6s 2s 4s G 2332
2+++++++= 不能直接写出,可借助多项式乘法运算函数conv( )来处理,以便获得分子、分母多项式向量。
conv( )函数的调用方式为:
c=conv(a,b)
a,b 各表示一个多项式,c 表示a 和b 的乘积多项式,此函数允许嵌套使用:c=conv(a,conv(b,e)),则上例的G(s)可用下面的语句来输入: 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]))));
还可以进一步地编写一个convs( )函数来一次性地求出若干个(十个)多项式的连乘积:
function a=convs(a1,a2,a3,a4,a5,a6,a7,a,8,a9,a10)
a=a1;
for i=2:nargin %在MATLAB 中它也是一个固定变量,表示在函数调用时实际
输入变量的个数。
eval([‘a=conv(a,a’ int2str(i) ‘);’]) %eval( )函数执行MATLAB 语句构成的字
符串。
end
这里定义的函数,可以一次执行十个多项式的乘积。如上例可以写成: convs([1,0],[1,1],[1,1],[1,1],[1,3,2,5])
注意:写完函数后一定要按函数名来保存该文件。
相应地,对离散时间系统的动态模型,用脉冲传递函数描述,其输入方法与此类似,不多举例。
如果是MIMO 系统,则用传递矩阵描述,如:
⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡++++=1s 12s 2s 1s s G 2)( 则可表示为:
num= {[1,1];1}
den={[1 2 2 ];[1 1]}
二.控制系统的零极点模型:(zpk 模型)
是传递函数的另一种表现形式,对SISO 系统: G(s)=)
())()(()())()((321321n m p s p s p s p s z s z s z s z s k ++++++++ 将零点、极点及K 值输入即可建立零极点模型。
z=[-z 1,-z 2 …,-z m ]
p=[-p 1,-p 2 …,-p n ]
k=k
对于给出的传函来说,分别对分子分母作因式分解,则可以得出系统的零极点模型。这可以通过求出分子,分母多项式的根来实现。MATLAB 中提供了多项式求根的函数,roots ( )
调用格式: z=roots(a)
其中:z — 各个根所构成的向量 a — 多项式系数向量
系统增益k 即为原传递函数分子的最高项系数与分母最高项系数的比值。 分别求出分子分母多项式的根,即可得到系统的零,极点模型。
对于多输入多输出系统,应分别对每个输入求出系统的零极点模型最后才可以获得整个系统的零极点模型(为矩阵形式)。
两种模型之间的转换函数:
[z ,p ,k]=tf2zp(num , den);
[num , den ]=zp2tf(z ,p ,k)
三. 控制系统状态方程模型:( ss 模型)
LTI 系统的状态方程: x
= Ax + Bu Y = Cx + Du
只要将A ,B ,C ,D 几个矩阵输入进去即可。
对于离散系统来说,也与上面类似。
MATLAB 还提供了由系统状态方程转换为系统零极点模型及传递函数模型的函数。
[num , den]=ss2tf(A ,B ,C ,D , iu ) %iu —表示输入的序号(对多输入系统)
[z, p ,k]=ss2zp(A ,B ,C ,D , iu ) %[z ,p ,k]— 表示对第iu 个输入信号的传递
函数的零极点。
[A , B ,C ,D]= tf2ss (num , den)
[A , B ,C ,D]=zp2ss(z ,p ,k)
四. 在MATLAB 控制系统工具箱中的LTI 对象:
为了避免对一个系统采用多个分离变量进行描述,新版本的控制系统工具箱,将LTI 系统的各种描述封装成一个对象,即用一个变量来描述。
在控制系统工具箱中,有以上讲述的三种对象,即ss 对象,tf 对象和zpk 对象。每种系统模型的生成和模型间的转换均可以通过一个函数来实现。下面介绍这些函数:
1.dss( )函数:生成系统的状态空间模型。
格式: sys= dss (a ,b ,c ,d ,e )
该调用生成连续系统的状态空间模型:
)(.
t x E =)()(t Bu t Ax +
)(t y =)()(t Du t Cx +
E 为非奇异阵(E 阵奇异,为奇异系统)。
sys = dss (a ,b , c, d ,e ,Ts )生成离散系统的状态空间模型。
)1(+n Ex =)()(n Bu n Ax +
)()()(n Dx n Cx n y +=
Ts 为采样周期
2.filt()函数:生成DSP (数字信号处理)形式的离散传递函数:
格式:sys=filt(num ,den) --- 生成离散传递函数模型
sys=filt(num ,den ,Ts)---定义模型的采样周期
注:DSP (数字信号处理)形式的离散传递函数如下面的形式: 211
1
z 3z 21z 1z H ----+++=)(
3.ss()函数:生成状态空间模型,或者将传递函数及零极点模型转换成状态
空间模型。
格式:1)sys=ss(a,b,c,d)---生成连续系统的状态空间模型。形式为:
Bu Ax x
+= y =Cx + Du
2)sys =ss(a,b,c,d,Ts)---生成离散状态空间模型
x(n+1)=Ax(n)+Bu(n)
y(n)=Cx(n)+Du(n)
3)sys_ss=ss(sys)---将任意的LTI 对象sys 转换成状态空间模型。