自动控制原理MATLAB常用函数总结

自动控制原理MATLAB常用函数总结

一、控制系统的数学模型

1. 传递函数数学模型

G ( s ) = n u m ( s ) d e n ( s ) G(s)=\frac{num(s)}{den(s)} Gs=den(s)num(s)

将分子分母系数写为两个矢量,用**tf()**函数给出

matlab表示传递函数:
G ( s ) = s + 2 s 2 + 2 s + 1 G(s)=\frac{s+2}{s^2+2s+1} Gs=s2+2s+1s+2

num=[1 2];
den=[1 2 1];
sys=tf(num,den)

2. 零极点的传递函数

传递函数:
G ( s ) = s + 1 ( s + 2 ) ( s + 3 ) G(s)=\frac{s+1}{(s+2)(s+3)} Gs=(s+2)(s+3)s+1

Z=[-1];     %零点
P=[-2,-3];  %极点
K=[1];      %增益
sys=ZPK(Z,P,K)

零极点形式转成一般形式:

[num,den]=zp2tf(Z,P,K);
sys=tf(num,den)

3. 串联、并联、反馈连接

串联: sys=series(G1,G2)

并联: sys=parallel(G1,G2)

反馈: sys=feedback(G,H,Sign),sign为正负一,正负反馈
G 1 ( s ) = 1 ( s + 1 ) , G 2 ( s ) = 1 ( s + 2 ) , H ( S ) = 1 ( s + 3 ) G_1(s)=\frac{1}{(s+1)},G_2(s)=\frac{1}{(s+2)},H(S)=\frac{1}{(s+3)} G1s=(s+1)1,G2s=(s+2)1H(S)=(s+3)1

%串联
G1=tf(1,[1 1]);
G2=tf(1,[1 2]);
sys=series(G1,G2)

%并联
G1=tf(1,[1 1]);
G2=tf(1,[1 2]);
sys=parallel(G1,G2)

%反馈
G1=tf(1,[1 1]);
H=tf(1,[1 3]);
sys=feedback(G1,H,-1)

二、时域分析法

1. 求特征方程的根

特征方程:
s 3 + 3 s 2 + 2 s + 24 = 0 s^3+3s^2+2s+24=0 s3+3s2+2s+24=0

den=[1 3 2 24];
roots(den)

%求得根为
ans =

  -4.0000 + 0.0000i
   0.5000 + 2.3979i
   0.5000 - 2.3979i

2. 单位阶跃响应

step(num,den)或者step(num,den,t)

闭环传递函数:
C ( s ) R ( S ) = 16 s 2 + 4 s + 16 , C ( s ) = 16 s ( s 2 + 4 s + 16 ) \frac{C(s)}{R(S)}=\frac{16}{s^2+4s+16},C(s)=\frac{16}{s(s^2+4s+16)} R(S)C(s)=s2+4s+1616,C(s)=s(s2+4s+16)16

num=[16];
den=[1 4 16];
t=0:0.1:10;
[y,x,t]=step(num,den,t);
plot(t,y);
grid on;
xlabel('t');ylabel('c(t)');

3. 单位斜坡和单位脉冲

单位斜坡和单位脉冲都是单位阶跃变换来的,均用step表示

单位斜坡:
C ( s ) = 16 s 2 + 4 s + 16 1 s 2 = 16 s ( s 2 + 4 s + 16 ) 1 s C(s)=\frac{16}{s^2+4s+16}\frac{1}{s^2}=\frac{16}{s(s^2+4s+16)}\frac{1}{s} C(s)=s2+4s+1616s21=s(s2+4s+16)16s1

num=[16];
den=[1 4 16 0];
t=0:0.1:10;
[y,x,t]=step(num,den,t);
plot(t,y);
grid on;
xlabel('t');ylabel('c(t)');

单位阶跃:
C ( s ) = 16 s 2 + 4 s + 16 = 16 s s ( s 2 + 4 s + 16 ) C(s)=\frac{16}{s^2+4s+16}=\frac{16s}{s(s^2+4s+16)} C(s)=s2+4s+1616=s(s2+4s+16)16s

num=[16 0];
den=[1 4 16];
t=0:0.1:10;
[y,x,t]=step(num,den,t);
plot(t,y);
grid on;
xlabel('t');ylabel('c(t)');

三、频域响应

1. 伯德图

bode(num,den);
[mag,phase,w]=bode(num,den,w);

如果不需要设定幅值和相角的取值范围,直接使用bode(num,den)即可,MATLAB会自动生成,如果要指定幅值和相角范围,则使用如下:

num=[15 75];
den=[1 16 100 0];
w=logspace(-2,3,100);           %取对数
[mag,phase,w]=bode(num,den,w);  %取幅值和相角,根据所取的w确定
subplot(211);
semilogx(w,20*log10(mag));      %取半对数坐标函数
grid on;
title('Bode Diagram of G(s)=75(0.2s+1)/[s(s^2+16s+100)]');
subplot(212);
semilogx(w,phase);
grid on;

2. nyquist图

nyquist(num,den);
[Re,Im]=nyquist(num,den,w);	
[Re,Im,w]=nyquist(num,den);	

需要指定的w时;

num=[1500];
den=[0.1 1 120 0];
w1=0.1:0.1:10;
w2=10:2:100;
w3=100:5:1000;
w=[w1 w2 w3];
[Re,Im]=nyquist(num,den,w);	%一定w范围的nyquist图
plot(Re(:, :),Im(:, :),Re(:, :),-Im(:, :));	%w从负无穷到正无穷
v=[-2 1 -3 3];	%图形坐标的设置范围
axis(v);
grid on;
title('Nyquist of G(s)=1500/[s*s*(1+0.1s)+120*s]');
xlabel('Re');ylabel('Im');

3. 求相位裕量和增益裕量

[Gm,Pm,Wgm,Wpm]=margin(mag,phase,w)
margin(mag,phase,w)

幅值的单位不是db,从左到右依次是幅值,相角,相位交界频率,剪切频率

num=conv([0,1.97],[5,1]);
den=conv(conv([1,0],[10,1]),conv([0.25,1],[0.25,1]));%相当于两个多项式相乘
G=tf(num,den)
w=logspace(-2,2,100);
bode(G,w);
[Gm,Pm,Wgm,Wpm]=margin(G) 
%Gm增益裕度和Pm相位裕度,Wpm测量相位裕量的频率和Wgm测量增益裕量的频率。

G =
 
             9.85 s + 1.97
  ------------------------------------
  0.625 s^4 + 5.062 s^3 + 10.5 s^2 + s
  
  Gm = 7.7102,Pm =57.4452,Wgm = 3.8986,Wpm = 0.9479

猜你喜欢

转载自blog.csdn.net/weixin_56321457/article/details/127695365