自动控制原理MATLAB常用函数总结
一、控制系统的数学模型
1. 传递函数数学模型
G ( s ) = n u m ( s ) d e n ( s ) G(s)=\frac{num(s)}{den(s)} G(s)=den(s)num(s)
将分子分母系数写为两个矢量,用**tf()**函数给出
matlab表示传递函数:
G
(
s
)
=
s
+
2
s
2
+
2
s
+
1
G(s)=\frac{s+2}{s^2+2s+1}
G(s)=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)}
G(s)=(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)}
G1(s)=(s+1)1,G2(s)=(s+2)1,H(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