该系列博客主要讲述Matlab软件在自动控制方面的应用,如无自动控制理论基础,请先学习自动控制系列博文,该系列博客不再详细讲解自动控制理论知识。
自动控制理论基础相关链接:https://blog.csdn.net/qq_39032096/category_10287468.html?spm=1001.2014.3001.5482
博客参考书籍:《MATLAB/Simulink与控制系统仿真》。
4.控制系统校正的频率响应法
4.1 基于频率法的超前校正
- 频率法的串联超前校正是利用校正装置的超前相位在穿越频率处对系统进行相位补偿,以提高系统的相对稳定裕量,同时提高穿越频率值,从而改善系统的稳定性和快速性;
- 串联超前校正主要适用于稳定精度不需要改变,暂态性能不佳,穿越频率附近相位变化平稳的系统;
- 应用频率法进行串联超前校正的步骤:
- 根据所要求的稳态性能指标,确定系统的开环增益 K K K;
- 绘制满足已确定 K K K值的系统的 B o d e {\rm Bode} Bode图,并求系统的相角裕度;
- 确定为使相角裕度达到要求所需要增加的超前相角 φ c \varphi_c φc,其中: φ c = γ − γ 0 + ϵ \varphi_c=\gamma-\gamma_0+\epsilon φc=γ−γ0+ϵ, γ \gamma γ为要求的相角裕度,当未校正系统中频段的斜率为: − 40 d B / d e c -40{\rm dB/dec} −40dB/dec时,取 ϵ = 5 ° ~ 15 ° \epsilon=5°~15° ϵ=5°~15°,当未校正系统中频段的斜率为: − 60 d B / d e c -60{\rm dB/dec} −60dB/dec时,取 ϵ = 5 ° ~ 20 ° \epsilon=5°~20° ϵ=5°~20°;
- 令超前校正网络的最大超前相角为: φ m = φ c \varphi_m=\varphi_c φm=φc,则求校正装置参数 α \alpha α,即: α = 1 − sin φ m 1 + sin φ m \alpha=\displaystyle\frac{1-\sin\varphi_m}{1+\sin\varphi_m} α=1+sinφm1−sinφm;
- 在 B o d e {\rm Bode} Bode图上确定未校正系统幅值为 20 lg α 20\lg\sqrt{\alpha} 20lgα时的频率 ω m \omega_m ωm,该频率作为校正后系统的开环剪切频率 ω c \omega_c ωc,即 ω c = ω m \omega_c=\omega_m ωc=ωm;
- 由 ω m \omega_m ωm确定校正装置的转折频率 ω 1 \omega_1 ω1和 ω 2 \omega_2 ω2, ω 1 = 1 τ = ω m α , ω 2 = 1 α τ = ω m α \omega_1=\displaystyle\frac{1}{\tau}=\omega_m\sqrt{\alpha},\omega_2=\displaystyle\frac{1}{\alpha\tau}=\displaystyle\frac{\omega_m}{\sqrt{\alpha}} ω1=τ1=ωmα,ω2=ατ1=αωm;超前校正装置传递函数为: G c ( s ) = α τ s + 1 α τ s + 1 G_c(s)=\alpha\displaystyle\frac{\tau{s}+1}{\alpha\tau{s}+1} Gc(s)=αατs+1τs+1;
- 将系统放大倍数增大 1 / α 1/\alpha 1/α倍,以补偿超前校正装置引起的幅值衰减,即 K c = 1 / α K_c=1/\alpha Kc=1/α;
- 画出校正后系统的 B o d e {\rm Bode} Bode图,校正后系统的开环传递函数为: G ( s ) = G 0 ( s ) G c ( s ) K c G(s)=G_0(s)G_c(s)K_c G(s)=G0(s)Gc(s)Kc;
- 校验系统的性能指标,如不满足要求,可增大 ϵ \epsilon ϵ值,再重新计算;
4.2 基于频率法的滞后校正
- 频率法的串联滞后校正在于提高系统的开环增益,改善控制系统的稳态性能,并尽量不影响原系统的动态性能;
- 串联滞后校正主要适用于未校正系统或经串联超前校正的系统的动态性能不能满足给定性能指标的要求,只需要增大开环增益用以提高控制系统精度的部分系统;
- 基于频率法的串联滞后校正步骤:
- 根据稳态误差要求确定系统开环放大系数,并绘制原系统的 B o d e {\rm Bode} Bode图,计算出校正系统的相角裕度和增益裕量;
- 根据给定的相角裕度,增加 5 ° ~ 15 ° 5°~15° 5°~15°的补偿,估计需要附加的相角位移,找出符合这一要求的频率作为穿越频率 ω c \omega_c ωc;
- 确定原系统在 ω = ω c \omega=\omega_c ω=ωc处幅值下降到 0 d B 0{\rm dB} 0dB时所必需的衰减量,使这一衰减量等于 − 20 lg γ i -20\lg\gamma_i −20lgγi,从而确定 γ i \gamma_i γi的值;
- 选择 ω 2 = 1 T d \omega_2=\displaystyle\frac{1}{T_d} ω2=Td1,计算 ω 1 = ω 2 γ i \omega_1=\displaystyle\frac{\omega_2}{\gamma_i} ω1=γiω2;
- 计算校正后频率特性的相角裕度并判断是否满足设计要求,若不满足则重新计算;
- 计算校正装置参数;
4.3 MATLAB/SIMULINK在频率响应法校正中的应用
4.3.1 实战1
实验要求:已知系统开环传递函数为: G 0 ( s ) = K s ( 1 + 0.1 s ) ( 1 + 0.3 s ) G_0(s)=\displaystyle\frac{K}{s(1+0.1s)(1+0.3s)} G0(s)=s(1+0.1s)(1+0.3s)K,设计超前校正环节,使其校正后系统的静态速度误差系数: K v ≤ 6 K_v≤6 Kv≤6,相角裕度为: 45 ° 45° 45°,绘制校正前后系统的单位阶跃响应曲线,开环 B o d e {\rm Bode} Bode图和闭环 N y q u i s t {\rm Nyquist} Nyquist图。
解:
【 S T E P 1 {\rm STEP1} STEP1】:主函数。
% 实例Chapter8.4.3.1
clc;clear;
% 建立数学模型
num=6;den=conv([1,0],conv([0.1,1],[0.3,1]));
[gm,pm,wcg,wcp]=margin(num,den); %求校正前的相位裕度pm
dpm=45-pm+12; %根据性能指标求出φm
phi=dpm*pi/180;
a=(1+sin(phi))/(1-sin(phi)); %利用φm=arcsin(a-1/a+1)求得a
mm=-10*log10(a); %计算-10 lga
[mag,phase,w]=bode(num,den); %利用伯德图得到幅值向量mag
mag_db=20*log10(mag); %将幅值转换为分贝值
wc=spline(mag_db,w,mm); %计算出当幅值为mm时的频率
T=1/(wc*sqrt(a)); %利用T与a关系求出T
p=a*T;
nk=[p,1];dk=[T,1]; %求出加入的校正装置
Gc=tf(nk,dk);
G=tf(num,den);
GGc=G*Gc; % 校正后开环传递函数
G_bf_close=feedback(G,1); % 校正前闭环传递函数
G_af_close=feedback(GGc,1); % 校正后闭环传递函数
% 绘制单位阶跃响应
figure(1);
step(G_af_close,'b');hold on;
step(G_bf_close,'r');grid;
legend('校正后闭环系统阶跃响应','校正前闭环系统阶跃响应');
set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1.5);
title('校正前后系统阶跃响应','FontSize',15);
% 绘制校正前后系统Bode图
figure(2);
bode(G,'b');hold on;
bode(GGc,'r');grid;
legend('校正前开环系统Bode图','校正后开环系统Bode图');
set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1.5);
title('校正前后系统Bode图','FontSize',15);
% 绘制校正前后系统Nyquist图
figure(3);
nyquist(G_bf_close);hold on;
nyquist(G_af_close);grid;
legend('校正前闭环系统Nyquist图','校正后闭环系统Nyquist图');
set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1.5);
title('校正前后系统Nyquist','FontSize',15);
% 超前校正环节传递函数和校正后闭环传递函数
Gc,G_af_close
% 超前校正环节传递函数
Gc =
0.3611 s + 1
-------------
0.09471 s + 1
% 校正后系统闭环传递函数
G_af_close =
2.167 s + 6
-----------------------------------------------------
0.002841 s^4 + 0.06788 s^3 + 0.4947 s^2 + 3.167 s + 6
【 S T E P 2 {\rm STEP2} STEP2】:校正前后系统单位阶跃响应曲线。
【 S T E P 3 {\rm STEP3} STEP3】:校正前后系统开环 B o d e {\rm Bode} Bode图。
【 S T E P 4 {\rm STEP4} STEP4】:校正前后系统闭环 N y q u i s t {\rm Nyquist} Nyquist图。
4.3.2 实战2
实验要求:已知系统开环传递函数为: G 0 ( s ) = 2 s ( s + 2.8 ) ( s + 0.8 ) G_0(s)=\displaystyle\frac{2}{s(s+2.8)(s+0.8)} G0(s)=s(s+2.8)(s+0.8)2,设计滞后校正环节,使其校正后系统的静态速度误差系数 K v ≤ 6 K_v≤6 Kv≤6,系统阻尼比 ζ = 0.307 \zeta=0.307 ζ=0.307,绘制校正前后系统的单位阶跃响应曲线,开环 B o d e {\rm Bode} Bode图和闭环 N y q u i s t {\rm Nyquist} Nyquist图。
解:
【 S T E P 1 {\rm STEP1} STEP1】:计算串联滞后校正环节参数的子函数程序。
% hysteresis_correction_frequency.m文件
% G:校正前系统开环传递函数;Gc:校正环节传递函数;
function Gc=hysteresis_correction_frequency(G,kc,dPm)
G=tf(G);num=G.num{
1};den=G.den{
1};
[mag,phase,w]=bode(G*kc);
wcg=spline(phase(1,:),w',dPm-180);
magdb=20*log10(mag);
Gr=-spline(w',magdb(1,:),wcg);
alpha=10^(Gr/20);T=10/(alpha*wcg);
Gc=tf([alpha*T,1],[T,1]);
【 S T E P 2 {\rm STEP2} STEP2】:控制系统主函数程序。
% 实例Chapter8.4.3.2
clc;clear;
% 建立控制系统模型
num=2;den=conv([1,0],conv([1,2.8],[1,0.8]));
G=tf(num,den);
zeta=0.307;Pm=2*sin(zeta)*180/pi;
dPm=Pm+5;kc=2;
Gc=hysteresis_correction_frequency(G,kc,dPm);
G=G*kc;GGc=G*Gc;
G_bf_close=feedback(G,1); % 校正前闭环传递函数
G_af_close=feedback(GGc,1); % 校正后闭环传递函数
% 绘制单位阶跃响应
figure(1);
step(G_af_close,'b');hold on;
step(G_bf_close,'r');grid;
legend('校正后闭环系统阶跃响应','校正前闭环系统阶跃响应');
set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1.5);
title('校正前后系统阶跃响应','FontSize',15);
% 绘制校正前后系统Bode图
figure(2);
bode(G,'b');hold on;
bode(GGc,'r');grid;
legend('校正前开环系统Bode图','校正后开环系统Bode图');
set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1.5);
title('校正前后系统Bode图','FontSize',15);
% 绘制校正前后系统Nyquist图
figure(3);
nyquist(G_bf_close);hold on;
nyquist(G_af_close);grid;
legend('校正前闭环系统Nyquist图','校正后闭环系统Nyquist图');
set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1.5);
title('校正前后系统Nyquist','FontSize',15);
% 滞后校正环节传递函数和校正后闭环传递函数
Gc,G_af_close
% 滞后校正环节传递函数
Gc =
16.08 s + 1
-----------
35.61 s + 1
% 校正后系统闭环传递函数
G_af_close =
64.34 s + 4
-----------------------------------------------
35.61 s^4 + 129.2 s^3 + 83.37 s^2 + 66.58 s + 4
【 S T E P 3 {\rm STEP3} STEP3】:控制系统单位阶跃响应曲线。
【 S T E P 4 {\rm STEP4} STEP4】:控制系统开环 B o d e {\rm Bode} Bode图。
【 S T E P 5 {\rm STEP5} STEP5】:控制系统闭环 N y q u i s t {\rm Nyquist} Nyquist图。
4.4 综合实例及MATLAB/SIMULINK应用
实验要求:已知某单位负反馈控制系统的开环传递函数为: G ( s ) = K s ( s + 1 ) ( s + 2 ) G(s)=\displaystyle\frac{K}{s(s+1)(s+2)} G(s)=s(s+1)(s+2)K,设计一个串联的校正装置,使校正后的系统静态速度误差系数 ≥ 10 s − 1 ≥10{\rm s^{-1}} ≥10s−1,相角裕度 ≥ 45 ° ≥45° ≥45°,增益裕量 ≥ 10 d B ≥10{\rm dB} ≥10dB。
解:
【 S T E P 1 {\rm STEP1} STEP1】:确定开环传递函数的增益 K K K。
系统的静态速度误差系数计算公式为:
lim s → 0 s G ( s ) = lim s → 0 K ⋅ s s ( s + 1 ) ( s + 2 ) = lim s → 0 K ( s + 1 ) ( s + 2 ) = K 2 \lim_{s\to0}sG(s)=\lim_{s\to0}\frac{K·s}{s(s+1)(s+2)}=\lim_{s\to0}\frac{K}{(s+1)(s+2)}=\frac{K}{2} s→0limsG(s)=s→0lims(s+1)(s+2)K⋅s=s→0lim(s+1)(s+2)K=2K
设计要求为系数静态速度误差系数 ≥ 10 s − 1 ≥10{\rm s}^{-1} ≥10s−1,可得 K = 20 K=20 K=20。
可得控制系统开环传递函数为: G ( s ) = 20 s ( s + 1 ) ( s + 2 ) G(s)=\displaystyle\frac{20}{s(s+1)(s+2)} G(s)=s(s+1)(s+2)20。
【 S T E P 2 {\rm STEP2} STEP2】:建立控制系统数学模型。
% 实例Chapter8.4.3.2
clc;clear;
% 建立控制系统模型
num0=[0,20];den0=conv([1,0],conv([1,1],[1,2]));
G0=tf(num0,den0);
% 控制系统原传递函数
G0 =
20
-----------------
s^3 + 3 s^2 + 2 s
【 S T E P 3 {\rm STEP3} STEP3】:分析控制系统的动态特性。
% 分析控制系统的频率响应特性
[Gm,Pm,Wcg,Wcp]=margin(G0)
margin(G0);
Gm = -10.50
Pm = -28.0814
Wcg = 1.4142
Wcp = 2.4253
【 S T E P 4 {\rm STEP4} STEP4】:设计系统的串联校正装置。
由上图可知,原系统不稳定,系统期望相角裕度为 45 ° 45° 45°,因此,校正装置需要将相角提升大约 73 ° 73° 73°,如果单纯采用超前校正,则很难提升大相角,如果单纯采用滞后校正,则系统增益裕量会下降,综合考虑,采用超前滞后校正。
首先设计滞后环节,假定校正后系统增益穿越频率为 1 1 1,且取零极点之比为 10 10 10,则滞后环节传递函数为: G c 1 = s + 0.1 s + 0.01 G_{c1}=\displaystyle\frac{s+0.1}{s+0.01} Gc1=s+0.01s+0.1,此时系统的频率响应如下:
% 设计串联滞后校正
numc1=[1,0.1];denc1=[1,0.01];
Gc1=tf(numc1,denc1);
G1=G0*Gc1;
figure(2);
margin(G1);
根据滞后校正得出的结果,设计超前校正环节为: G c 2 = s + 0.5 s + 5 G_{c2}=\displaystyle\frac{s+0.5}{s+5} Gc2=s+5s+0.5,此时系统频率响应如下:
% 设计串联超前校正
numc2=[1,0.5];denc2=[1,5];
Gc2=tf(numc2,denc2);
G2=G1*Gc2;
figure(3);
margin(G2);
- 闭环系统增益裕量为: 13.3 d B 13.3{\rm dB} 13.3dB,相角裕度为: 52.5 ° 52.5° 52.5°,增益穿越频率为: 1.37 r a d / s 1.37{\rm rad/s} 1.37rad/s,各项参数均满足设计要求;
【 S T E P 5 {\rm STEP5} STEP5】:校正前后系统频率响应对比。
% 校正前后系统频率响应对比
figure(4);
bode(G0);hold on;
bode(G2);grid;
legend('校正前开环系统Bode图','校正后开环系统Bode图');
title('校正前后系统Bode图','FontSize',15);
-
超前滞后校正环节主要作用于 0.01 ~ 10 0.01~10 0.01~10频段,滞后校正环节将低频部分的相频曲线"压低",超前校正则将高频部分的相频曲线"抬高",从而提高系统中频段的相位;
-
同时,滞后校正"抬高"低频部分的幅频曲线,超前校正"压低"从低频开始较广频率范围的幅频曲线,使得系统的增益频率左移,使得系统的相角裕度大大增加;
-
此外,相角穿越频率右移,使系统的增益裕量进一步提高,超前滞后校正较好地满足设计要求;
-
校正后系统开环传递函数为:
% 校正后系统开环传递函数 G2 = 20 s^2 + 12 s + 1 ---------------------------------------------- s^5 + 8.01 s^4 + 17.08 s^3 + 10.17 s^2 + 0.1 s
【 S T E P 6 {\rm STEP6} STEP6】:比较校正前后系统的性能。
% 闭环传递函数
G0_close=feedback(G0,1); % 原系统闭环传递函数
G2_close=feedback(G2,1); % 校正后系统闭环传递函数
% 绘制单位阶跃响应
figure(5);
step(G0_close,'b');
set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1.5);
title('校正前系统阶跃响应','FontSize',15);
figure(6);
step(G2_close,'r');grid;
set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1.5);
title('校正后系统阶跃响应','FontSize',15);
【完整代码】
% 实例Chapter8.4.4
clc;clear;
% 建立控制系统模型
num0=[0,20];den0=conv([1,0],conv([1,1],[1,2]));
G0=tf(num0,den0);
% 分析控制系统的频率响应特性
[Gm,Pm,Wcg,Wcp]=margin(G0);
figure(1);
margin(G0);
% 设计串联滞后校正
numc1=[1,0.1];denc1=[1,0.01];
Gc1=tf(numc1,denc1);
G1=G0*Gc1;
figure(2);
margin(G1);
% 设计串联超前校正
numc2=[1,0.5];denc2=[1,5];
Gc2=tf(numc2,denc2);
G2=G1*Gc2;
figure(3);
margin(G2);
% 校正前后系统频率响应对比
figure(4);
bode(G0);hold on;
bode(G2);grid;
legend('校正前开环系统Bode图','校正后开环系统Bode图');
title('校正前后系统Bode图','FontSize',15);
% 闭环传递函数
G0_close=feedback(G0,1); % 原系统闭环传递函数
G2_close=feedback(G2,1); % 校正后系统闭环传递函数
% 绘制单位阶跃响应
figure(5);
step(G0_close,'b');
set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1.5);
title('校正前系统阶跃响应','FontSize',15);
figure(6);
step(G2_close,'r');grid;
set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1.5);
title('校正后系统阶跃响应','FontSize',15);