我是靠谱客的博主 微笑冬日,最近开发中收集的这篇文章主要介绍Matlab在自动控制领域中的应用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.1 数学模型

1.1.1建立系统的数学模型

数学是万物的语言。在实际生活中有很多自动控制领域的问题,我们可以对其用数学语言进行描述,即对其建立数学模型。

1)已知传递函数

假设已经对一个自动控制问题的系统建立了合适的数学模型——传递函数。例如:

那么如何在Matlab中构建它的数学模型呢?

因为传递函数一般都是有理分式,故可以将其拆分为分子和分母,由于分子和分母都是多项有理式,故可以用行向量(也称系数向量)代替多项式(线性代数中的知识):

2)已知二阶系统的阻尼比和自然频率

假设我们不知道这个传递函数,只知道它是个标准的二阶系统,其阻尼比为0.6和自然频率为5,我们也可以利用二阶系统的标准形式这样构建分子和分母:

3)已知开环传递函数,求闭环传递函数

假设没有闭环的传递函数,已知单位负反馈系统下的开环传递函数:

我们知道

根据这个原理,可以使用Matlab中的feedback()函数构建闭环传递函数,具体操作如下:

4)已知开环传递函数,求单位反馈的闭环传递函数

如果是单位反馈,则可以用cloop函数构建单位反馈闭环传递函数,单位反馈又分为单位负反馈和单位正反馈:

单位负反馈:

单位正反馈:

(5)已知两个开环传递函数,求串联以后的开环传递函数

现在又有一个惯性环节:其传递函数为:

现在将其与上面的开环传递函数为G(s)的系统进行串联,根据自控所学知识可以知道串联后的整体传递函数为

可用两种方法,第一种方法是使用series()函数,用法如下:

或者直接使用conv()函数:

可得到结果如下:

总之,得到系统的传递函数的分子num,和分母den,便意味着系统数学模型的成功建立。

3)带有延迟环节的系统

如果传递函数中含有(其中为延迟时常数间),则得到系统具有延时环节,可以将系统拆分成两个子系统串联,一个子系统不带有延迟环节,另一个子系统带有延迟环节。并且可以通过数学方法用n阶有理函数(有理分式)近似代替延迟环节的传递函数,如带有延迟环节的子系统传递函数为:

建立3阶有利函数近似模型为:

1.1.2建立传递函数对象

(1)已知传递函数的分子num,和分母den

已知分子、分母多项式后可利用tf()函数可建立传递函数对象:

工作区中可以得到如下对象:

2)已知传递函数的零点、极点和根轨迹增益

除此之外,还可以用zpk()函数建立传递函数对象,例如已经知道一个传递函数无零点,极点为0和-6,根轨迹增益为25,则可用zpk()函数建立数学模型:

至此,一个系统的数学模型和传递函数对象便建立好了。

1.2时域分析

1.2.1求取单位阶跃响应或者单位脉冲响应

1、给定时间

由于是时域分析,故先给定一个时间范围;

2、求单位脉冲或阶跃响应

或者

图 单位脉冲响应 

或者

图 单位阶跃响应

注意:这里用的step()函数和impulse()函数也可以不输入时间t变量,t在sys的时间单位属性中是指定的,另外输入参数可以是分子分母形式(num、den),也可以是传递函数对象(sys)形式(后面的函数若输入参数都可使用这两种形式,则统一使用传递函数对象形式)。

3、求其他响应

对于不是单位脉冲、阶跃的响应可以利用lsim()函数求取,例如单位斜坡函数:u(t)=t

1.2.2判定稳定性

我们知道,通过一个闭环系统的极点(即系统特征方程的根),可以帮助我们判断系统的稳定性能。还是利用这一传递函数:

可知其特征方程为,用Matlab构造系统特征方程并判断稳定性如下操作:

得根的结果如下:

 均位于s平面的左半平面,故此系统是稳定的。若遇到其他情况,请根据所学知识自行判断稳定性。

1.3 根轨迹

对于二阶系统的开环传递函数:

绘制根轨迹的代码和结果如下:

 

 

对于开环传递函数为

的三阶系统绘制根轨迹的结果如下:

1.4频域分析

在频域分析中,一般有三个重要图像,分别是奈式曲线,波特图,和对数幅频渐进特性曲线。

(一)奈式曲线

针对传递函数为:

若求奈式曲线,可以用nyquist()函数,代码如下:

结果如下:

若求波特图,可以使用bode()函数或者margin()函数,使用bode()函数代码如下:

结果如下:

使用margin()函数代码如下:

结果如下:

唯一不同之处在于margin()可在图像上显示截止频率,穿越频率,相角裕度和幅值裕度,如果使用参数来传递这些数值,则不会显示图像如下图:

 

若求对数幅频渐进特性曲线,需要用到自定义函数名为bd_asymp(),数的内部代码如下(这里的代码参考胡寿松老先生的《自动控制原理》):

function[wpos,ypos]=bd_asymp(G,w)
G1=zpk(G);
wpos=[];
pos1=[];
if nargin==1,w=freqint2(G);
end
zer=G1.z{1}; pol=G1.p{1};
gain=G1.k;
for i=1:length(zer);
    if isreal(zer(i))
        wpos=[wpos,abs(zer(i))];
        pos1=[pos1,20];
    else
        if imag(zer(i))>0
            wpos=[wpos,abs(zer(i))];
            pos1=[pos1,40];
        end
    end
end
for i=1:length(pol);
    if isreal(pol(i))
    wpos=[wpos,abs(pol(i))];
    pos1=[pos1,-20];
    else
        if imag(pol(i))>0
            wpos=[wpos,abs(pol(i))];
            pos1=[pos1,-40];
        end
    end
end
wpos=[wpos w(1) w(length(w))];
pos1=[pos1,0,0];
[wpos,ii]=sort(wpos);
pos1=pos1(ii);
ii=find(abs(wpos)<eps);
kslp=0;
w_start=1000*eps;
if length(ii)>0
    kslp=sum(pos1(ii));
    ii=(ii(length(ii))+1):length(wpos);
    wpos=wpos(ii);
    pos1=pos1(ii);
end
while 1
    [ypos1,pp]=bode(G,w_start);
    if isinf(ypos1),w_start=w_start*10;
    else break;
    end
end
wpos=[w_start wpos];
ypos(1)=20*log10(ypos1);
pos1=[kslp pos1];
for i=2:length(wpos)
    kslp=sum(pos1(1:i-1));
    ypos(i)=ypos(i-1)+kslp*log10(wpos(i)/wpos(i-1));
end
ii=find(wpos>=w(1)&wpos<=w(length(w)));
wpos=wpos(ii);
ypos=ypos(ii);

Matlab中可以使用bd_asymp函数后,代码如下:

 

 

结果如下:

 

最后

以上就是微笑冬日为你收集整理的Matlab在自动控制领域中的应用的全部内容,希望文章能够帮你解决Matlab在自动控制领域中的应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部