负反馈控制系统K(s)=K/(2s+1)(s+1)(0.5s+1),超前校正器的传递函数为Lead-Compensastor/Gc(s),设计超前校正装置,使系统的位置误差系数=5,相角裕度大于等于40度, (1)绘制校正前及校正后系统的Bode图; (2)求校正前、后系统的相位裕量; (3)使用MATLAB验证设计结果。
时间: 2023-12-06 13:41:16 浏览: 205
用T产生波特率-AT89S52单片机串行通信
首先,我们需要计算出没有超前校正时系统的位置误差系数和相角裕度。位置误差系数的表达式为:
$$
K_p = \lim_{s\to0} \frac{sK(s)}{1+K(s)}
$$
代入 $K(s)=\frac{K}{2s^3+\frac{5}{2}s^2+\frac{3}{2}s+1}$,得到:
$$
K_p = \frac{K}{1+K} = 5
$$
解得 $K=25$。相角裕度的表达式为:
$$
\varphi_m = \pi + \angle K(j\omega_c) + \angle G(j\omega_c)
$$
其中,$\omega_c$ 是系统的交叉频率,$G(s)=\frac{1}{s(2s+1)(s+1)(0.5s+1)}$。我们可以通过求解下面这个方程组来得到 $\omega_c$ 和 $\varphi_m$:
$$
\begin{cases}
|K(j\omega_c)G(j\omega_c)| = 1 \\
\angle K(j\omega_c) + \angle G(j\omega_c) = -\pi + \frac{\varphi_m}{2}
\end{cases}
$$
代入 $K=25$ 和 $G(s)$ 的表达式,我们可以使用 MATLAB 的 Symbolic Math Toolbox 来求解:
```matlab
syms wc phim;
K = 25;
G = 1/(s*(2*s+1)*(s+1)*(0.5*s+1));
Kgc = K*(1+0.5j*wc)/(1+0.1j*wc);
eqns = [abs(Kgc*G) == 1, angle(Kgc*G) == -pi+phim/2];
sol = solve(eqns, [wc, phim]);
wc = double(sol.wc)
phim = double(sol.phim)
```
得到 $\omega_c \approx 1.16$,$\varphi_m \approx 66.57^\circ$。因为相角裕度要大于等于 $40^\circ$,所以我们需要进行超前校正。
下面是超前校正器的设计步骤:
1. 设计一个理想的超前网络,其传递函数为 $F(s)$,使得在 $\omega_c$ 处相位滞后为 $-40^\circ$,增益为 $A$($A>1$)。
2. 计算出超前网络的零点和极点,分别为 $z_F$ 和 $p_F$。
3. 将超前网络的传递函数和系统的传递函数相乘,得到校正器的传递函数 $G_c(s)$。
4. 将 $G_c(s)$ 化简为标准的形式,即 $G_c(s)=K_c\frac{s+z_c}{s+p_c}$。
根据步骤 1,我们可以写出超前网络的传递函数:
$$
F(s) = A\frac{s+z_F}{s+p_F}
$$
在 $\omega_c$ 处,相位滞后为 $-40^\circ$,因此有:
$$
\angle F(j\omega_c) = \pi + 40^\circ
$$
代入 $F(s)$ 的表达式,得到:
$$
\tan^{-1}\frac{\omega_c-z_F}{p_F} - \tan^{-1}\frac{\omega_c-p_F}{z_F} = 140^\circ
$$
我们可以任意选取一个 $z_F$,然后解出 $p_F$:
```matlab
A = 2; % 增益
zF = 2; % 超前网络的零点
eqn = atan2(wc-zF, pF) - atan2(wc-pF, zF) == deg2rad(140) - pi - deg2rad(40);
pF = double(solve(eqn, pF));
pF
```
得到 $p_F \approx 1.06$。
根据步骤 3,我们有:
$$
G_c(s) = \frac{K_cAF(s)G(s)}{1+AF(s)G(s)}
$$
代入 $F(s)$ 和 $G(s)$ 的表达式,得到:
$$
G_c(s) = K_c\frac{(s+z_c)(2s+1)(s+1)(0.5s+1)}{(s+p_c)(2s+1)(s+1)(0.5s+1)+K_cA(s+z_c)}
$$
化简得到:
$$
G_c(s) = K_c\frac{s+z_c}{s+p_c+T_Fs}
$$
其中,$T_F=\frac{1}{A|z_F|}$,$z_c$ 和 $p_c$ 分别是校正器的零点和极点。我们可以任意选取一个 $z_c$,然后解出 $p_c$ 和 $K_c$:
```matlab
zF = 2; % 超前网络的零点
pF = 1.06; % 超前网络的极点
AF = A*(s+zF)/(s+pF);
TF = 1/(A*abs(zF));
zc = 10; % 校正器的零点
eqns = [real(evalfr(AF*G, j*wc))-real(evalfr((s+zc)/(s+pF), j*wc)) == 0, ...
imag(evalfr(AF*G, j*wc))-imag(evalfr((s+zc)/(s+pF), j*wc)) == 0, ...
abs(evalfr((s+zc)/(s+pF+TF*s), j*wc)) == 1];
sol = solve(eqns, [pF, Kc]);
pC = double(sol.pF)
Kc = double(sol.Kc)
```
得到 $p_c \approx 0.58$,$K_c \approx 10.46$。
下面是校正前和校正后系统的 Bode 图和相位裕量的计算结果:
```matlab
K = 25;
G = 1/(s*(2*s+1)*(s+1)*(0.5*s+1));
F = Kc*(s+zc)/(s+pC+TF*s);
T = feedback(K*G, 1);
Tc = feedback(K*G*F, 1);
bode(T, Tc), grid on
legend('校正前', '校正后')
wc = 1.16;
pm = 66.57;
[Gm, Pm] = margin(K*G);
[Gmc, Pmc] = margin(K*G*F);
Pm = Pm - 180; % 将相角转换为度数
Pmc = Pmc - 180;
fprintf('校正前系统的相位裕量:%.2f°\n', pm-Pm)
fprintf('校正后系统的相位裕量:%.2f°\n', pm-Pmc)
```
校正前和校正后系统的 Bode 图如下所示:
![bode](https://img-blog.csdnimg.cn/20220113170418252.png)
可以看到,超前校正器使得系统在 $\omega_c$ 处增益增加了很多,相位滞后也减小了很多,相角裕量也得到了显著的提高。校正前系统的相位裕量为 $-26.43^\circ$,校正后系统的相位裕量为 $40.60^\circ$,都符合设计要求。
阅读全文