控制系统仿真应用Word文件下载.docx
《控制系统仿真应用Word文件下载.docx》由会员分享,可在线阅读,更多相关《控制系统仿真应用Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
这只是一个简单的特例,很多时候,传递函数的分子、分母均为多项式相乘的形式,如:
不能直接写出,可借助多项式乘法运算函数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()函数来一次性地求出若干个(十个)多项式的连乘积:
functiona=convs(a1,a2,a3,a4,a5,a6,a7,a,8,a9,a10)
a=a1;
fori=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系统,则用传递矩阵描述,如:
则可表示为:
num={[1,1];
1}
den={[122];
[11]}
二.控制系统的零极点模型:
(zpk模型)
是传递函数的另一种表现形式,对SISO系统:
将零点、极点及K值输入即可建立零极点模型。
z=[-z,-z…,-z]
p=[-p,-p…,-p]
k=k
对于给出的传函来说,分别对分子分母作因式分解,则可以得出系统的零极点模型。
这可以通过求出分子,分母多项式的根来实现。
MATLAB中提供了多项式求根的函数,roots()
调用格式:
z=roots(a)
其中:
z—各个根所构成的向量a—多项式系数向量
系统增益k即为原传递函数分子的最高项系数与分母最高项系数的比值。
分别求出分子分母多项式的根,即可得到系统的零,极点模型。
对于多输入多输出系统,应分别对每个输入求出系统的零极点模型最后才可以获得整个系统的零极点模型(为矩阵形式)。
两种模型之间的转换函数:
[z,p,k]=tf2zp(num,den);
[num,den]=zp2tf(z,p,k)
三.控制系统状态方程模型:
(ss模型)
LTI系统的状态方程:
=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)
该调用生成连续系统的状态空间模型:
=
=
E为非奇异阵(E阵奇异,为奇异系统)。
sys=(a,b,c,d,e,Ts)生成离散系统的状态空间模型。
=
Ts为采样周期
2.filt()函数:
生成DSP(数字信号处理)形式的离散传递函数:
格式:
sys=filt(num,den)---生成离散传递函数模型
sys=filt(num,den,Ts)---定义模型的采样周期
注:
DSP(数字信号处理)形式的离散传递函数如下面的形式:
3.ss()函数:
生成状态空间模型,或者将传递函数及零极点模型转换成状态空间模型。
1)sys=ss(a,b,c,d)---生成连续系统的状态空间模型。
形式为:
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转换成状态空间模型。
4.tf()函数:
生成传递函数模型,或将零极点模型及状态空间模型转换成传递函数模型。
格式为:
sys=tf(num,den)---生成连续时间系统传函模型:
G(s)=
sys=tf(num,den,Ts)---生成离散时间系统传函。
tfsys=tf(sys)---将任意的LTI对象转换成传递函数模型。
5.zpk()函数:
生成零极点模型或者将其他模型转化成零极点模型。
sys=zpk(z,p,k)---连续系统的零极点增益模型。
sys=zpk(z,p,k,Ts)---离散时间系统的零极点增益模型。
zsys=zpk(sys)---将任意LTI对象转换成零极点增益模型。
五.控制系统的结构图描述及转换:
由于复杂的结构图建模可以用SIMUKINK。
在这里我们仅介绍简单的结构图描述,也可称为系统建模。
典型连接:
1.串联连接:
子系统1:
=Ax+Bu子系统2:
=Ax+Bu
y=cx+Duy=Cx+Du
串联后系统模型为:
=+
y=+D2D1u1
2.并联连接:
+
并联后系统模型:
=+u
y=+(+)u
3.负反馈连接:
-
为了简化,设,则反馈后:
=+=+(r-)
=+r-(+)
=+r--
=
所以,状态方程为:
在MATLAB工具箱中,提供了子系统的连接处理函数:
1)series()函数:
系统串联实现
sys=series(,)
[A,B,C,D]=series(A,B,C,D,A,B,C,D)
2)parallel()函数:
系统并联实现。
sys=parallel(,)
3)feedback()函数:
系统反馈连接
sys=feedback(,)
sys=feedback(,,sign)
sign—定义反馈形式:
正反馈,sign=+1;
负反馈,sign=-1。
4)append函数:
多个LTI系统的组合
格式:
sys=append(,,…,)
对N个子系统组合:
┇
设各个子系统的模型为:
(s),(s),…(s)则合成后子系统为
分块对角阵:
如子系统为状态空间模型,则组合后:
第二节控制系统的稳定性分析
在计算机仿真中,控制系统稳定性的分析方法有:
1求闭环特征方程的根;
2化为零极点模型,看极点是否在s右半平面;
3对状态空间形式(闭环),求A阵的特征值eig(A);
4用Lyapunov方程求解。
在自控原理中,我们均采用间接方法劳斯判据,奈氏判据等,但由于在MATLAB中很容易地求解多项式方程。
因此,我们可以直接求出特征方程的根,可用多项式求根函数roots()。
例1:
判断如下系统的稳定性:
-
可编程如下:
numg=1;
deng=[11223];
numf=1;
denf=1;
(num,den)=feedback(numg,deng,numf,denf,-1);
roots(den)
例2:
判断状态空间形式描述的系统的稳定性,两个输入。
A=[01–1;
-6–116;
-6–115];
B=[001];
C=[100];
D=0;
[,,]=ss2zp(A,B,C,D,1)
[,,]=ss2zp(A,B,C,D,2)
ii=find(real()>
0),=length(ii);
%find():
找出数组中满足实部值大于0的所有元素的下标,并将结
果返回到数组中。
ii1=find(real()>
0),=length(ii1);
if(+>
0),disp(‘systemisUnstable’)
else
disp(‘systemisStable’);
一般当系统中含有非线性环节时,即不能用上述方法,一般需求解李雅普诺夫方程:
P+PA=-Q求出P为正定对称矩阵,则系统是稳定的。
李雅普诺夫(Lyapunov)方程求解函数Lyap()(采用Schur方法编写的),其调用格式:
x=lyap(A,B,C)
该函数可求解:
AX+XB=-C方程
如要求解:
P+PA=-Q则可写成:
p=lyap(A,Q)
判断稳定性的方法还可确定是否为最小相位系统(没有右半平面零极点的系统)。
第三节控制系统的根轨迹
在控制系统工具箱中提供了系统根轨迹绘制及分析函数,还有一个GUI分析工具。
下面介绍一下这些根轨迹的绘制及分析函数:
1rlocfind():
计算给定根的根轨迹增益
①[k,poles]=rlocfind(sys)
②[k,poles]=rlocfind(sys,p)
1在LTI对象的根轨迹图中显示出十字光标,当用户选择其中一点时,其相应的增益由k记录,与增益相关的所有极点记录poles中。
若要使用该函数,必须首先在当前窗口上绘制系统的根轨迹。
2定义要得到增益的根矢量P,即事先给出极点。
除了显示出该根对应的增益以外,还显示出