基于matlab的控制系统串联校正—相位超前校正问题实例

1.问题

        为了改进闭环系统性能,可以采用串联校正,这里用相位超前校正,即
eq?Gc%28S%29%3D%5Cfrac%7B%5Ctau%20s+1%7D%7B%5Calpha%20%5Ctau%20s+1%7D
α常取 0.07~0.2,选择适当的α与τ, 要使
eq?%5Cfrac%7B1%7D%7B%5Ctau%20%7D%3C%20%5Comega%20_%7Bc%7D%3C%20%5Cfrac%7B1%7D%7B%5Calpha%20%5Ctau%20%7D
针对新的开环传递函数G’ K(S)=Gc(S)×G(S)×H(S),画出开环Bode图,
观察不同的α与τ对 BODE 图的影响,使相位裕度γ>40°,以使闭环系统性能
大大提高,确定合适的α与τ。

2.代码

% 定义G(s)和H(s)  
numG = 160;  
denG = [1, 1, 0.01]; % 转换为标准形式s^3 + 0s^2 + 0.01s  
G = tf(numG, denG);  
H = 0.1;  
s=tf("s")  ;
% 初始化alpha和tau的搜索范围  
alpha_range = 0.07:0.01:0.2; % 
tau_range = 0.01:0.01:1; 
  
% 初始化存储相位裕度的数组  
pm_alpha = zeros(size(alpha_range));  
pm_tau = zeros(size(tau_range));  
pm_matrix = zeros(length(alpha_range), length(tau_range));  
  
% 迭代搜索  
for i = 1:length(alpha_range)  
    for j = 1:length(tau_range)  
        % 假设相位超前校正为 (tau*s + 1) / (alpha*tau*s + 1)  
        comp = (tau_range(j)*s + 1) / (alpha_range(i)*tau_range(j)*s + 1);  
        GH = G * H * comp; % 闭环传递函数  
        [~, pm] = margin(GH); % 计算相位裕度  
        pm_matrix(i, j) = pm;  
    end  
    pm_alpha(i) = max(pm_matrix(i, :)); % 每个alpha下的最大相位裕度  
    [~, idx] = max(pm_matrix(i, :));  
    pm_tau(idx) = pm_matrix(i, idx); % 对应的tau下的相位裕度  
end  

%% 
% 绘制相位裕度随alpha变化的图  
figure; 
subplot(1,2,1)
plot(alpha_range, pm_alpha, 'b-o');  
xlabel('\alpha');  
ylabel('Phase Margin (deg)');  
title('相位裕度随alpha变化的图');  
grid on; 
  
% 绘制相位裕度随tau变化的图 
subplot(1,2,2) 
plot(tau_range, pm_tau, 'r-o');  
xlabel('\tau');  
ylabel('Phase Margin (deg) for Optimal \alpha');  
title('相位裕度随tau变化的图');  
grid on;  
  
%% 

  
% 确定最优值  
[max_pm_alpha, idx_alpha] = max(pm_alpha);  
optimal_alpha = alpha_range(idx_alpha);  
optimal_tau_idx = find(pm_matrix(idx_alpha, :) == max_pm_alpha); % 可能有多个tau对应相同的最大相位裕度  
optimal_tau = tau_range(optimal_tau_idx(1)); % 选择第一个tau值  
  
% 绘制最优alpha和tau下的Bode图  
comp_optimal = (optimal_tau*s + 1) / (optimal_alpha*optimal_tau*s + 1);  
GH_optimal = G * H * comp_optimal;  
figure;  
bode(GH_optimal, '-k');  
title(['最优alpha和tau下的Bode图 (\alpha = ', num2str(optimal_alpha), ', \tau = ', num2str(optimal_tau), ')']);  
grid on;  

[gm3, pm3, wcg3, wcp3] = margin(GH_optimal);   
% 幅值裕度(以分贝为单位)  
am_dB3 = 20*log10(1/gm3);  

3.运行结果

4b894617e0174db094d677c197019cf4.jpeg

图1

66e4e38f848a49aba7f324c51b5eb8ef.jpeg

图2

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值