Matab控制系统仿真.docx
《Matab控制系统仿真.docx》由会员分享,可在线阅读,更多相关《Matab控制系统仿真.docx(14页珍藏版)》请在冰豆网上搜索。
Matab控制系统仿真
一.控制系统的模型与转换
目前大多数控制系统的分析设计方法都要求系统的模型已知。
所以,控制系统的数学模型是控制系统分析和设计的基础。
获得数学模型的方法有两种:
一种是从已知的物理规律出发,用数学推导的方法建立系统的数学模型,另外一种就是利用试验数据拟合。
前一种方法称为系统的物理建模方法,而后者称为系统辨识,两者各有优势和适用场合。
一般的分析研究中将控制系统分为连续系统和离散系统,描述连线性连续系统常用的方式是传递函数(传递函数矩阵)和状态空间模型,相应的离散系统可以用离散传递函数和离散状态方程表示。
各种模型之间还可以进行相互转换。
1.1连续线性系统的数学模型
连续线性系统一般可以用传递函数描述,也可以用状态方程描述。
前者是经典控制的常用模型,而后者是现代控制理论的基础。
它们是描述同一个系统的不同描述方式。
除此之外,还可以用零极点的形式表示连续线性系统模型。
本章着重介绍这些数学模型,并侧重介绍这些模型在控制系统的Matlab环境下的表示方法。
高阶线性常微分方程通常是描述线性连续系统的最传统的方法,其基本表达式为:
其中
,
分别是控制系统的输入和输出信号,他们均是时间
的函数,n是系统的阶次。
利用Laplace引入的积分变换(拉氏变换),可以在另初始条件下对该微分方程进行变换,得到控制系统的传递函数:
(
)
传递函数的引入使得控制系统的研究变得简单,它是控制理论中线性系统模型的一种主要描述方式。
从上面的传递函数的表达式可以看出,传递函数是两个多项式的比值,在Matlab环境下,多项式可以用向量表示。
依照Matlab惯例,将多项式的系数按照s的降幂次序排列,利用控制系统工具箱的tf()函数就可以用一个变量表示传递函数的模型:
;
;
;
其中:
前两个语句用于描述系统的分子和分母多项式,后一个语句直接产生变量G,在Matlab工作空间直接生成描述系统的传递函数模型。
eg1.设控制系统的传递函数为
,利用下面的语句就可以轻易的将该系统的模型输入Matlab环境:
(在命令窗口执行)
>>num=[172424];den=[110355024];%分子多项式和分母多项式
>>G=tf(num,den);%传递函数G的获得
在Matlab提示符下键入G或者省略最后命令中的分号,就可以显示出该数学模型
>>G
结果为:
Transferfunction:
s^3+7s^2+24s+24
---------------------------------
s^4+10s^3+35s^2+50s+24
也可以采用这种方法,在命令窗口键入如下命令:
>>s=tf('s');%定义一个传递函数的算子,
G=(s^3+7*s^2+24*s+24)/(s^4+10*s^3+35*s^2+50*s+24);%用数学表达形式直接输入系统的传递函数或者传递函数的矩阵模型
>>G
结果为:
Transferfunction:
s^3+7s^2+24s+24
---------------------------------
s^4+10s^3+35s^2+50s+24
如果分子或者分母多项式给出的不是完全展开的形式,而是若干个因式相乘的形式,则需要将其变换为完全展开的形式,两个多项式的乘积在Matlab环境下可以借用卷积求取函数
得到:
eg2.设控制系统的传递函数为
,利用下面的语句就可以轻易的将该系统的模型输入Matlab环境:
(在命令窗口执行)
>>num=5*[1,2.4];%分子
den=conv([1,1],conv([1,1],conv([134],[101])));%分母描述
G=tf(num,den)%显示传递函数
结果为:
Transferfunction:
5s+12
-------------------------------------------------
s^6+5s^5+12s^4+16s^3+15s^2+11s+4
也可以采用这种方法,在命令窗口键入如下命令:
>>s=tf('s');%定义一个传递函数的算子,
G=5*(s+2.4)/((s+1)^2*(s^2+3*s+4)*(s^2+1));
%用数学表达形式直接输入系统的传递函数或者传递函数的矩阵模型
>>G
结果为:
Transferfunction:
5s+12
-------------------------------------------------
s^6+5s^5+12s^4+16s^3+15s^2+11s+4
对于eg2给出的传递函数形式,可以称之为系统的零极点模型,其通式如下:
,其中,K是系统的增益,
分别是系统的零极点。
在Matlab下表示系统的零极点模型的方法可以,将系统的零极点作为列向量输入到Matlab工作空间,采用zpk()函数调用的形式实现:
;
;
;
其中,前两个语句分别输入系统的零点和极点列向量,后面的语句有这些信息和系统增益构造系统的零极点模型对象G.。
对eg2给出的传递函数
,建立其零极点模型如下:
建立模型可以采用这种方法在命令窗口键入如下命令:
>>P=[-1;-1;-1.5+1.3229i;-1.5-1.3229i;-i;i];Z=[-2.4];%零极点向量形式
>>G=zpk(Z,P,5)%零极点模型输入
结果为:
Zero/pole/gain:
5(s+2.4)
----------------------------------
(s+1)^2(s^2+1)(s^2+3s+4)
还可以用pzmap(G)在复平面上显示该系统的零极点位置,如下图所示:
在命令窗口键入:
>>pzmap(G)
得到的结果为:
其中的x表示极点位置,o表示零点位置。
状态空间模型是描述控制系统的另外一种重要的方式,和传递函数不同,状态空间模型可以描述更广的一类系统模型,包括非线性模型。
一般状态空间模型的形式为
在Matlab下表示系统的状态模型相当直观,只需要将各个系数矩阵按照常规矩阵的方式输入到工作空间就可以了,这样系统的状态空间模型可以用下面的语句直接建立
如果在构造状态模型时给出的维数不兼容,则执行ss()对象时给出明确的错误信息,中断程序运行。
Eg3.设某控制系统的A,B,C,D阵分别为
,
,
,
在命令窗口输入下列命令,可以得到该双输入双输出系统的状态空间模型:
>>A=[010;001;-6-11-6];B=[10;2-1;02];C=[1-10;21-1];D=[00;00];
>>G=ss(A,B,C,D)%输入并显示系统的状态空间模型
a=
x1x2x3
x1010
x2001
x3-6-11-6
b=
u1u2
x110
x22-1
x302
c=
x1x2x3
y11-10
y221-1
d=
u1u2
y100
y200
Continuous-timemodel.
>>
1.2离散系统模型
离散系统通常可以用差分方程和离散传递函数描述(Z传递函数),其通式如下:
(
)
在Matlab语言中,输入离散系统的传递函数模型和连续系统的传递函数模型一样,需要分别按照要求输入系统的分子和分母多项式,就可以利用tf()函数将其输入到Matlab环境中。
与连续系统的不同之处在于,离散系统的模型同时还要输入输入系统的采样周期T,具体语句如下:
;
;
;
其中T输入实际的采样周期数值,H为离散系统传递函数模型,此外,还可以仿照连续系统传递函数的算子输入方法,定义算子z=tf(‘z’,T),则可以用数学表达式的形式输入系统的离散传递函数模型。
Eg4.设离散系统的传递函数模型由下式表示
,且已知系统的采样周期T=0.1s,则将其模型输入Matlab键入如下命令即可:
>>num=[0.31240.57430.38790.0889];
den=[13.2233.9869-2.22090.4723];%分子分母多项式描述
>>H=tf(num,den,'Ts',0.1)
结果为:
Transferfunction:
0.3124z^3+0.5743z^2+0.3879z+0.0889
----------------------------------------------
z^4+3.223z^3+3.987z^2-2.221z+0.4723
Samplingtime:
0.1
离散系统的零极点位置同样可以由pzmap()函数直接绘制,该函数的调用格式和连续系统一致。
如,eg4的零极点位置如下图所示:
上机作业:
1.请将下面的传递函数模型输入到matlab环境。
,T=0.1s
2.请将下面的零极点模型输入到matlab环境。
请求出上述模型的零极点,并绘制其位置。
,T=0.05s
3.设描述系统时域行为的高阶微分方程为
,试建立其状态空间模型并将其输入到matlab环境。