波特图(Bode Plot)是一种用于描述线性控制系统频率响应的图形表示方法,通常用于分析和设计控制系统。它以控制系统的传递函数(或频域传递函数)为基础,将系统的幅频特性(振幅-频率响应)和相频特性(相位-频率响应)以图形的方式展示出来。可以根据波特图理解和评估系统的稳定性、性能和鲁棒性。

波特图可以指导控制器的设计。通过调整控制器的参数,可以改变系统的频率响应,以满足特定的性能要求。波特图提供了反馈信息,帮助选择合适的控制器类型和参数,以达到期望的控制效果。本文使用串联超前校正、串联滞后校正、滞后-超前校正及PID校正,进行控制器的设计。

三频段理论:

三段波特图

  • 低频段↔系统稳态误差,对应系统的开环增益K,系统型别v:
  • 中频段↔系统动态性能 ,对应系统的幅值穿越频率 ,相角交界频率 ,影响系统的幅值裕度h与相角裕度γ,进而也决定了系统的调节时间、峰值时间和超调量等参数:(以二阶系统为例)

希望 以-20dB/dec 斜率穿越0dB线,并保持较宽的频段

  • 高频段↔系统抗干扰能力

频率法串联校正

控制系统串联校正是一种用于改善控制系统性能的校正方法。在控制系统中,由于传感器、执行器、信号传输等因素的影响,系统可能出现响应速度慢、精度不高、稳定性差等问题。串联校正通过在控制系统中插入合适的校正环节,对系统进行调整和校正,以提高系统的响应和控制性能。

串联超前校正

利用超前网络的相角超前特性,将最大的超前角度补偿到系统的幅值穿越频率处,提高系统的相角裕度,进而提升系统稳定性

超前网络传递函数:

幅频曲线最大高度:第一个转折频率为 ,第二个转折频率为 ,转折频率的倍频比为

相角的表达式:

最大相角的频率:

带入相角表达式求出最大相角:

可得:

与a的关系图:

串联超前校正

  • 超前网络特点:相角超前,幅值增加
  • 一级超前网络最大超前角为60度
  • 最有效的 ,取太大高频段会拉高,影响抗干扰能力

超前校正步骤:

给定设定指标( )

  1. 根据稳态精度 确定校正以前的开环增益K
  2. 画出校正前系统 的幅频特性曲线 ,确定幅值穿越频率 ,计算相角裕度 ,如果 均不足
  3. 确定最大超前角:
  4. 作图设计:写出校正装置的传递函数
  5. 得到校正后的传递函数: ,并验证幅值穿越频率与相角裕度是否满足要求

例:以知某单位反馈系统的开环传递函数为

要求: 时, ,确定串联校正装置的传递函数

解:系统传递函数 ,确定增益K=K,型别v=1

  • 根据稳态误差要求确定K:
  • 的波特图:

得到幅值穿越频率:

计算得到相角裕度:

均不满足指标要求: ,使用超前校正

  • 采用超前校正:

计算参数a:

  • 确定校正装置的传递函数 ,利用原始系统与-8.8dB线的交点,确定新的幅值穿越频率 ,并根据公式 确定T的取值,进而得到超前校正的两个转折频率 ,可以确定校正系统的传递函数

    校正之后的系统相角裕度为61.2度,满足要求:

校正前后的nyquist曲线如下图,相角裕度变大,幅值裕度为infdB,满足指标要求。

串联超前校正效果:

  • 保持低频段,满足稳态精度
  • 改善中频段, ↑, ↑ 动态性能提高
  • 抬高高频段,抗高频干扰能力降低

串联滞后校正

利用滞后网络幅值衰减特性挖掘系统自身的相角储备,减小幅值穿越频率,获得自身相角储备,同时压低高频段幅值,损失快速性,改善均匀性,提高了高频抗干扰能力。

滞后网络传递函数:

幅频曲线最大高度:第一个转折频率为 ,第二个转折频率为 ,转折频率的倍频比为

相角的表达式:

为了减少校正后系统相角裕度损失,将新的截止频率定为第二个转折频率的10倍:

与b的关系图:

串联滞后校正

  • 滞后网络特点:相角滞后,幅值衰减
  • 一级滞后网络 后10dec处相角最大损失为

滞后校正步骤:

给定设定指标( )

  1. 根据稳态精度 确定校正以前的开环增益K
  2. 画出校正前系统 的幅频特性曲线 ,确定幅值穿越频率 ,计算相角裕度 ,如果 有余, 不足(或严重不足)
  3. 绘制曲线(挖掘系统储备):
  4. 作图设计:写出校正装置的传递函数
  5. 得到校正后的传递函数: ,并验证幅值穿越频率与相角裕度是否满足要求

例:以知某单位反馈系统的开环传递函数为

要求: ,确定串联校正装置的传递函数

解:系统传递函数 :

  • 确定增益 ,型别v=1,注意:这里是K要沿着边界进行设计,K太大会造成幅值曲线高,那么校正时会造成校正装置的转折频率过小,即时间常数T过大,可能在物理系统中无法实现。
  • 的波特图:

得到幅值穿越频率:

计算得到相角裕度:

指标要求: 有余而 不足, 如果使用超前校正,需要补偿的角度大于60度,不可行,使用滞后校正

  • 采用滞后校正:取 使:

曲线:分析可见:

校正之后的系统相角裕度为44.8度,满足要求:

校正前后的nyquist曲线如下图,相角裕度变大,幅值裕度为14.1dB,满足指标要求。

串联滞后校正效果:

  • 保持低频段,满足稳态精度
  • 降低中频段, ↓, ↑ 损失快速性,改善均匀性
  • 压低高频段,高频抗干扰能力提高

串联滞后-超前校正

综合利用滞后网络幅值衰减、超前网络相角超前的特性,改造开环频率特性,提高系统性能

滞后-超前网络传递函数:

可变换为:(注意前面有系数,这里忽略了,但画图不可忽略,否则会造成幅频曲线高度变化)

滞后-超前校正步骤:

给定设定指标( )

  1. 根据稳态精度 确定校正以前的开环增益K

  2. 画出校正前系统 的幅频特性曲线 ,确定幅值穿越频率 ,计算相角裕度 ,如果相角裕度需要补偿大于60度(超前拉不起来),且在 处的相角储备也不够(滞后储备不足),使用滞后-超前校正

  3. 确定校正后系统的幅值穿越频率为 ,当前频率为滞后网络储备相角裕度所能提供的最大值

    确定最大超前角:

  4. 作图设计:写出校正装置的传递函数

  5. 得到校正后的传递函数: ,并验证幅值穿越频率与相角裕度是否满足要求

例:以知某单位反馈系统的开环传递函数为

要求: 时, ,确定串联校正装置的传递函数

解:系统传递函数 :

  • 根据稳态误差要求确定K,v=1:
  • 的波特图:

lag_lead_lw

得到幅值穿越频率:

计算得到相角裕度:

指标要求: 有余而 不足:

如果使用超前校正

校正系统补偿的度数赶不上因穿越频率增大而下降的度数,超前不可行

如果使用滞后校正

时: ,滞后不行

  • 采用滞后-超前校正,取 进行设计,在储备的 基础上进行相角补偿。

曲线:

校正之后的系统相角裕度为37.9度,满足要求:

校正前后的nyquist曲线如下图,相角裕度变大,幅值裕度为11.5dB,满足指标要求。

串联滞后-超前校正效果:

  • 保持低频段,满足稳态精度
  • 降低中频段, ~, ↑ ,相角裕度增大
  • 保持高频段,高频抗干扰能力不变

串联PID校正

PID校正网络传递函数:

例:以知某单位反馈系统的开环传递函数为

设计PID控制器,要求: ,确定串联校正装置的传递函数

解:

  • 根据频域指标与时域指标的转换图:
  • 的波特图:

pid_lw

得到幅值穿越频率:

计算得到相角裕度:

指标要求: 均不足:

求在 处的相角裕度:

要补偿的度数大于60度,超前网络不行,储备相角裕度不足,滞后也不行

  • 采用PID校正,取 进行设计:

确定第二个转折频率 :

得到传递函数:

曲线:

校正之后的系统相角裕度为64.6度,满足要求:

校正前后的nyquist曲线如下图,相角裕度变大,幅值裕度为inf,满足指标要求。

频域指标与时域指标的转换

【自动控制原理(胡寿松)234页】:

image-20231014214935703

 

代码

串联超前校正

clear all;
close;
% 定义传递函数
numerator = [10];
denominator = [1, 1, 0]; 
B=bodeoptions;

% 创建传递函数模型
sys = tf(numerator, denominator);

%画波特图
bode(sys);
hold on;

psi_m=50/180*pi;
a=(1+sin(psi_m))/(1-sin(psi_m));
H=20*log10(a);
half_H=-H*0.5;


% 使用 bode 函数来获取频率和幅值数据
[mag,phase,wout]  = bode(sys);
magdB = 20*log10(mag);


% 找到幅频曲线上幅值最接近 half_H 的频率
[~, index] = min(abs(magdB - half_H));
L=length(wout);
freq_new= wout(index);

T=1/(sqrt(a)*freq_new);
% 定义传递函数
G_c_numerator = [a*T, 1];
G_c_denominator = [1*T, 1];

% 创建传递函数模型
G_csys = tf(G_c_numerator, G_c_denominator);
bode(G_csys);
new_sys=G_csys*sys;
bode(new_sys);
set(findobj(gcf,'type','line'),'linewidth',2);
ax=findobj(gcf,'type','axes');
phase_ax=ax(1);
mag_ax=ax(2);
ax_xlim=phase_ax.XLim;
mag_ylim=mag_ax.YLim;
phase_ylim=phase_ax.YLim;

% hold(mag_ax,'on')
hold on;
plot(mag_ax,[ax_xlim(1) ax_xlim(2)],[0 0],'Color', 'b','LineWidth',1, 'LineStyle', '--');
plot(mag_ax,[freq_new freq_new],[mag_ylim(1) mag_ylim(2)],'Color', 'm','LineWidth',1, 'LineStyle', '--');
plot(phase_ax,[freq_new freq_new],[phase_ylim(1) phase_ylim(2)],'Color', 'm','LineWidth',1, 'LineStyle', '--');
plot(mag_ax,[ax_xlim(1) ax_xlim(2)],[half_H half_H],'Color', 'k','LineWidth',1, 'LineStyle', '--');
% 添加图例
legend(mag_ax,'原始系统', '超前校正', '校正后系统');
figure(2);
margin(new_sys);%Gm幅值裕度 Pm相角裕度 Wcg穿越频率 Wcp剪切频率

figure(3);
% 绘制纳伊斯特图
nyquist(sys);
hold on;
nyquist(new_sys);
legend('原始系统',  '校正后系统');
% 设置图形标题
title('Nyquist Plot');

串联滞后校正

clear all;
close all;

% 定义传递函数的分子和分母
numerator = 30;
denominator = [1/50 3/10 1 0]; % 分母表示为(s)(s/5+1)(s/10+1)

G = tf(numerator, denominator);
% 绘制波特图
bode(G);


psi_c=46;
deg_m=-180+psi_c;

% 使用 bode 函数来获取频率和幅值数据
bode_w= linspace(0.1, 10, 1000);
[mag,phase,wout]  = bode(G,bode_w);
magdB = 20*log10(mag);

[~, index] = min(abs(0 - magdB));
w_c= wout(index);

% 找到最接近deg_m的index
[~, index] = min(abs(phase - deg_m));
freq_new= wout(index);


b=freq_new/30;
T=10/(b*freq_new);
% 定义传递函数
G_c_numerator = [b*T, 1];
G_c_denominator = [1*T, 1];
hold on;
% 创建传递函数模型
G_c = tf(G_c_numerator, G_c_denominator);
bode(G_c);

new_sys=G_c*G;
bode(new_sys);


set(findobj(gcf,'type','line'),'linewidth',2);
ax=findobj(gcf,'type','axes');
phase_ax=ax(1);
mag_ax=ax(2);
ax_xlim=phase_ax.XLim;
mag_ylim=mag_ax.YLim;
phase_ylim=phase_ax.YLim;

hold on;
plot(mag_ax,[ax_xlim(1) ax_xlim(2)],[0 0],'Color', 'b','LineWidth',1, 'LineStyle', '--');
plot(mag_ax,[freq_new freq_new],[mag_ylim(1) mag_ylim(2)],'Color', 'm','LineWidth',1, 'LineStyle', '--');
plot(phase_ax,[freq_new freq_new],[phase_ylim(1) phase_ylim(2)],'Color', 'm','LineWidth',1, 'LineStyle', '--');
plot(mag_ax,[w_c w_c],[mag_ylim(1) mag_ylim(2)],'Color', 'k','LineWidth',1, 'LineStyle', '--');
plot(phase_ax,[w_c w_c],[phase_ylim(1) phase_ylim(2)],'Color', 'k','LineWidth',1, 'LineStyle', '--');
% 添加图例
legend(mag_ax,'原始系统', '滞后校正', '校正后系统');
figure(2);
margin(new_sys);%Gm幅值裕度 Pm相角裕度 Wcg穿越频率 Wcp剪切频率
 
figure(3);
% 绘制纳伊斯特图
nyquist(G);
hold on;
nyquist(new_sys);
legend('原始系统',  '校正后系统');
% 设置图形标题
title('Nyquist Plot');

串联滞后-超前校正

clear all;
close all;

% 定义系统传递函数
G = tf([126], [1/600, 7/60, 1,0]);
% 绘制波特图
bode(G);


freq_new=20;
[Gm,Pm,Wcg,Wcp] = margin(G);
[mag,phase,wout]  = bode(G);
magdB = 20*log10(mag);

[~, index] = min(abs(20 - wout));
lag_deg= phase(index)+180;
% 
% % 找到最接近deg_m的index
% [~, index] = min(abs(phase - deg_m));
% freq_new= wout(index);
phi_m=(35-lag_deg+6)/180*pi;
a=(1+sin(phi_m))/(1-sin(phi_m));
% a=3.4;
sqrt_a=sqrt(a);
Tb=sqrt_a/freq_new;
Ta=1/(0.1*freq_new); 
w0=Wcp^2/freq_new;
b=w0*Tb;
% 定义传递函数
% 构建系统传递函数  


G_c = tf([1/(1/Ta),1], [1/(1/(b*Ta)),1]) * tf([1/(1/Tb),1], [1/(a/Tb),1]);
% G_c_1 = tf([2, 1], [0.343, 1]) * tf([10.18, 1], [37, 1]);
hold on;
bode(G_c);

new_sys=G_c*G;
bode(new_sys);



set(findobj(gcf,'type','line'),'linewidth',2);
ax=findobj(gcf,'type','axes');
phase_ax=ax(1);
mag_ax=ax(2);
ax_xlim=phase_ax.XLim;
mag_ylim=mag_ax.YLim;
phase_ylim=phase_ax.YLim;

hold on;
plot(mag_ax,[ax_xlim(1) ax_xlim(2)],[0 0],'Color', 'b','LineWidth',1, 'LineStyle', '--');
plot(mag_ax,[freq_new freq_new],[mag_ylim(1) mag_ylim(2)],'Color', 'm','LineWidth',1, 'LineStyle', '--');
plot(phase_ax,[freq_new freq_new],[phase_ylim(1) phase_ylim(2)],'Color', 'm','LineWidth',1, 'LineStyle', '--');
plot(mag_ax,[Wcp Wcp],[mag_ylim(1) mag_ylim(2)],'Color', 'k','LineWidth',1, 'LineStyle', '--');
plot(phase_ax,[Wcp Wcp],[phase_ylim(1) phase_ylim(2)],'Color', 'k','LineWidth',1, 'LineStyle', '--');
% 添加图例
legend(mag_ax,'原始系统', '滞后校正', '校正后系统');
figure(2);
margin(new_sys);%Gm幅值裕度 Pm相角裕度 Wcg穿越频率 Wcp剪切频率
 
figure(3);
% 绘制纳伊斯特图
nyquist(G);
hold on;
nyquist(new_sys);
legend('原始系统',  '校正后系统');
% 设置图形标题
title('Nyquist Plot');




串联PID校正

clear all;
close all;


num = 10;           % 分子多项式系数
den = conv(conv([1 1], [1/5 1]), [1/30 1]);    % 分母多项式系数

G = tf(num, den);   % 创建传递函数模型

bode(G);
% grid on;

freq_new=15;
[Gm,Pm,Wcg,Wcp] = margin(G);
[mag,phase,wout]  = bode(G);
magdB = 20*log10(mag);

[~, index] = min(abs(15 - wout));
lag_deg= phase(index)+180;

phi_m=(65-lag_deg+6)/180*pi;

w2=freq_new/tan(phi_m);
w0=Wcp^2/freq_new;
w1=w0/w2;


num = [1/(w1*w2), (w1+w2)/(w1*w2), 1];  % 分子多项式系数
den = [1, 0];       % 分母多项式系数
G_c = tf(num, den);      % 创建传递函数对象

hold on;
bode(G_c);

new_sys=G_c*G;
bode(new_sys);



set(findobj(gcf,'type','line'),'linewidth',2);
ax=findobj(gcf,'type','axes');
phase_ax=ax(1);
mag_ax=ax(2);
ax_xlim=phase_ax.XLim;
mag_ylim=mag_ax.YLim;
phase_ylim=phase_ax.YLim;

hold on;
plot(mag_ax,[ax_xlim(1) ax_xlim(2)],[0 0],'Color', 'b','LineWidth',1, 'LineStyle', '--');
plot(mag_ax,[freq_new freq_new],[mag_ylim(1) mag_ylim(2)],'Color', 'm','LineWidth',1, 'LineStyle', '--');
plot(phase_ax,[freq_new freq_new],[phase_ylim(1) phase_ylim(2)],'Color', 'm','LineWidth',1, 'LineStyle', '--');
plot(mag_ax,[Wcp Wcp],[mag_ylim(1) mag_ylim(2)],'Color', 'k','LineWidth',1, 'LineStyle', '--');
plot(phase_ax,[Wcp Wcp],[phase_ylim(1) phase_ylim(2)],'Color', 'k','LineWidth',1, 'LineStyle', '--');
% 添加图例
legend(mag_ax,'原始系统', 'PID校正', '校正后系统');
% 
figure(2);
margin(new_sys);%Gm幅值裕度 Pm相角裕度 Wcg穿越频率 Wcp剪切频率
 
figure(3);
% 绘制纳伊斯特图
nyquist(G);
hold on;
nyquist(new_sys);
legend('原始系统',  '校正后系统');
% 设置图形标题
title('Nyquist Plot');

参考

  1. 史忠科,卢京潮.自动控制原理[M].西北工业大学出版社,1998.
  2. 【频域分析中的三频段理论】https://blog.csdn.net/qq_39554681/article/details/89459784