串联滞后超前校正的MATLAB实现

串联滞后超前校正的MATLAB实现

滞后超前校正分成两个部分,先滞后挖掘更大的相位裕度储备,再超前,拉起相位,具体的例子如下所示:

clc;
close all
clear;
%串联滞后超前校正用matlab实现
% 指标
% ess =1/126(r=t)K要大于等于126
delta_K =0;
K = 126 + delta_K;
r_star = 35;
wc_star = 20;
% 系统的型别
v = 1;
% 原有的传递函数
num = K;
den = conv([1,0],[conv([1/10,1],[1/60,1])]);
G0 = tf(num,den);
[Gm0,Pm0,Wcg0,Wcp0] = margin(G0);
% % 进行判断是用什么校正,这点很重要
% 假设使用超前校正
delta = 10;
fai_m = r_star - Pm0 + delta;
% 假设使用滞后校正
r_wc_star = 180 + (-90)^v - atand(wc_star/10) - atand(wc_star/60);
% 进行判断
if (fai_m<50)&&(Pm0<r_star)&&(Wcp0<wc_star)
    fprintf('use pre')
else if (fai_m>50)&&(r_wc_star>r_star)
        fprintf('use delay')
    else if (r_wc_star<r_star)&&(fai_m>50)
            fprintf('use delay-pre')
        end
    end
end
% 进行校正
delta_fai = 0;
fai_m_new = r_star - r_wc_star + 6 + delta_fai;
a = (1+sind(fai_m_new)/(1-sind(fai_m_new)));
a_sqrt = double(sqrt(a));
% baseline = 10*log10(a);
% 模拟作图(其实没必要,根据图直接解算w_C,D,E,F)
% 解算超前部分
C = 20;
w_C = wc_star * a_sqrt+ C;
w_D = wc_star / a_sqrt;
% 解算滞后部分
w_E = 0.1 * wc_star;
% 关键在于解算w_F,用到了将DC延长至横坐标交点,计算交点处的频率w_0
w_0 = (Wcp0)^2/wc_star;
w_F = (w_D*w_E)/w_0;
% 就得到了滞后超前校正的Gcs
num_correct = conv([1/w_E,1],[1/w_D,1]);
den_correct = conv([1/w_F,1],[1/w_C,1]);
Gcs = tf(num_correct,den_correct);
G_star = series(Gcs,G0);
figure
margin(G0);hold on
margin(Gcs);hold on
margin(G_star);hold on 

% 验证,校正成功。

判断用什么方法

其中有两个关键点,首先是选择是用什么方法去校正。先看给定的指标,校正后的相位裕度是35,截止频率是20,在校正之前源系统加上增益之后的相位裕度是-11.3,截止频率是wcp = 32.5,其中截止频率已经满足给定的指标的要求,相位裕度不满足,不满足使用超前校正的条件(超前校正的条件是相位裕度和截止频率都是不足),在代码中体现的判定标准是使用的拉起相角的量(卢老师用的)这样的其实不是很有说服力(自以为)。按道理来讲这种情况应该使用滞后校正,看看在指标要求的截止频率处,能不能满足相位裕度的要求,经过测试也是不行的,在20处的相位裕度是8.13远低于要求的35,所以采用滞后超前校正。

% % 进行判断是用什么校正,这点很重要
% 假设使用超前校正
delta = 10;
fai_m = r_star - Pm0 + delta;
% 假设使用滞后校正
r_wc_star = 180 + (-90)^v - atand(wc_star/10) - atand(wc_star/60);
% 进行判断
if (fai_m<50)&&(Pm0<r_star)&&(Wcp0<wc_star)
    fprintf('use pre')
else if (fai_m>50)&&(r_wc_star>r_star)
        fprintf('use delay')
    else if (r_wc_star<r_star)&&(fai_m>50)
            fprintf('use delay-pre')
        end
    end
end

得到的结果是用滞后超前校正

开始设计校正

在此种校正模式的情况下,新的截止频率就是在给定的指标截止频率处进行校正。,先计算超前部分的参数

在这里插入图片描述

% 进行校正
delta_fai = 0;
fai_m_new = r_star - r_wc_star + 6 + delta_fai;
a = (1+sind(fai_m_new)/(1-sind(fai_m_new)));
a_sqrt = double(sqrt(a));
% baseline = 10*log10(a);
% 模拟作图(其实没必要,根据图直接解算w_C,D,E,F)
% 解算超前部分
C = 20;
w_C = wc_star * a_sqrt+ C;
w_D = wc_star / a_sqrt;

得到超前部分的参数之后,再去解算滞后部分的参数,其中超前与滞后的链接点在于,w_E与wc_star之间的距离是10倍频程,所以可以解出w_E来,然后重点就在于如何解算w_F,在这里用到了全等三角形加上渐近线斜率的关系,以及gcs渐近线的延长线:

将DC延长线交至横坐标轴与点w_0,该处的坐标是这样计算的,上图蓝线的斜率是40,Gcs在DBC处的斜率是20,由于Awc=Bwc因为A和B是镜像对称点,那么wcwc0=wc0w_0就可以算出w0,然后借助w_Fw_E = w_Dw_0,就可以计算出来w_F:然后就可以得到校正之后的系统传递函数

% 解算滞后部分
w_E = 0.1 * wc_star;
% 关键在于解算w_F,用到了将DC延长至横坐标交点,计算交点处的频率w_0
w_0 = (Wcp0)^2/wc_star;
w_F = (w_D*w_E)/w_0;
% 就得到了滞后超前校正的Gcs
num_correct = conv([1/w_E,1],[1/w_D,1]);
den_correct = conv([1/w_F,1],[1/w_C,1]);
Gcs = tf(num_correct,den_correct);
G_star = series(Gcs,G0);
figure
margin(G0);hold on
margin(Gcs);hold on
margin(G_star);hold on 

% 验证,校正成功

在这里插入图片描述

验算与二次校正

神来之笔:其中值得注意的是,在第一次校正过程中,校正失败了,在达到指标的截止频率的时候相位裕度没有达到要求,后来根据超前校正的调整方案,可以将C点“适当”的往后拉,来提高相位裕度,本代码中的C就是偏移量,其次可以适当的抬升fai_m以扩大a的值,让其相位裕度大一些,这些都是二次校正调整的方案。最后放在simulink中验证校正后的结果是稳定的。

在这里插入图片描述

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值