📄 bode_jiaozheng.m
字号:
function bode_jiaozheng(num,den,Fai_M)
disp('超前校正利用超前的相角来提高相位裕量,把校正网络的最大相角加在校正后的幅穿频率上') ,pause(1)
disp('单级超前校正网络提供的最大超前相角一般不超过60度') ,pause(1)
disp('滞后校正把负的|20*log10(α)|幅度叠加到原来的系统上,把原来的幅穿频率点左边的') ,pause(1)
disp('满足相位裕量的频率的点下拉到0分贝,使其成为新的幅穿频率点') ,pause(1.6)
disp('当相频曲线在辐穿频率点周围变化的十分剧烈时,使用滞后校正比较合适') ,pause(1.6)
disp('在幅穿频率对应的相位过低,以至于要提高的量都超过了60度,要串两个') ,pause(1.6)
disp('超前网络才可能把相位裕量提高到要求的值,那么更加的应该优先考虑滞后网络了') ,pause(1.6)
disp(''),disp(''),disp('')
choose__=menu(' 读Bode图,你认为应该使用何种校正 ',' 超前 ',' 滞后 ');pause(1.6)
switch choose__
case 1
disp('首先从Bode图上读出当前的相位裕量') ,pause(1)
disp('')
vase=input('你读出的相位裕量为: ');,pause(1)
disp('')
disp('那么要提高的相角Φm=Φ_要求值-Φ_当前值'),pause(1)
disp('由于工程上的各种各样的原因,我们要把设备做的比理论上的要求高点'),pause(1)
disp('所以我们把要提高的相角提高5~12度工程裕量,所以Φm=Φ_要求值-Φ_当前值+(5~12)'),pause(1)
disp('')
vase=input('输入需要提高的相角裕量: ');,pause(1)
disp('')
disp('通过要提高的Φm的大小,由sin(Φm)=(α-1)/(α+1)解出α来'),pause(1)
disp('')
a=input('你计算出的α是: ');,pause(1)
disp('')
disp('这时Bode图上-10*log10(α)分贝上的点就是新的辐穿频率点ωc'),pause(1)
disp('')
wc=input('读出这个ωc: ');
disp('')
disp('校正网络上新的辐穿频率点ωc对应的是校正网络:(Z*P)^0.5=sqrt( ((α*T)*T)^(-1) )的值'),pause(2.1)
disp('新的辐穿频率点ωc=(Z*P)^0.5,其中Z=1/(α*T) P=1/T,解方程算出T来'),pause(1)
disp('')
T_=input('你算出的T为:');
disp('')
pause(1),disp('现在校正网络,最重要的两个参数α,T已经确定了,可以给出校正网络了'),pause(2.1)
%屏幕上显示校正后的系统串入的网络
disp('得出结论=> 应对系统K__*GH(s)串入网络(a*T*S+1)/(T*S+1)为:'),pause(2.1)
disp(''),pause(1)
disp([' ',num2str(a),'*',num2str(T_),'*S+1']),pause(1)
disp('------------------------')
disp([' ',num2str(T_),'*S+1']),pause(1)
disp(''),disp(''),disp(''),pause(1)
%
%屏幕上显示校正后的系统
disp('校正后的系统GH(s)为:'),pause(1)
tt_num=shuzhu2zifu(num);tt_den=shuzhu2zifu(den);
qq1=strcat('(',num2str(a),'*',num2str(T_),'*S+1)'); ,pause(1)
qq2=strcat('(',num2str(T_),'*S+1)'); ,pause(1)
disp([qq1,'*(',tt_num,')']) ,pause(1)
disp('------------------------') ,pause(1)
disp([qq2,'*(',tt_den,')']) ,pause(1)
%
disp('校正前,后的Bode图的对比,红色:校正前;蓝色:校正后 黄色:校正网络'),pause(1.6)
er=abs((a*T_*j*wc+1)/(T_*j*wc+1)) ;er=20*log10(er);er=abs(er);er=er+0.1;
plot(linspace(wc,wc,100),linspace(-5,er+5,100),'g'),hold on
bode(num,den,'r'),grid on,hold on ,pause(1)
bode(conv(num,[a*T_ 1]),conv(den,[T_ 1]),'b')
bode([a*T_ 1],[T_ 1],'y')
otherwise
disp('首先从Bode图上读出当前的相位裕量') ,pause(1)
disp('')
vase=input('你读出的相位裕量为: ');,pause(1)
disp('')
disp('那么要提高的相角Φm=Φ_要求值-Φ_当前值'),pause(1)
disp('由于工程上的各种各样的原因,我们要把设备做的比理论上的要求高点'),pause(1.6)
disp('所以我们把要提高的相角提高5~12度工程裕量,所以Φm=Φ_要求值-Φ_当前值+(5~12)'),pause(1.6)
disp('')
vase=input('输入需要提高的相角裕量: ');,pause(1)
disp('')
disp('在Bode图上找出满足相角裕量的频率点ω,滞后校正需要把这个点的幅频增益拉到0dB,使其成为新的辐穿频率点'),pause(2.5)
disp('为了确保滞后网络的滞后相角不对校正后的辐穿频率点ωc’周围的相位产生影响以保证能够提供足够的相位裕量'),pause(2.5)
disp('')
wc=input('读出这个ωc ’:');,pause(1)
disp('')
disp('用滞后网络能降低的幅频值为:-20*log10(α),可以看出这个值的大小是由滞后网络中参数α决定的'),pause(2.1)
disp('从Bode图上读出需要提供的幅度,-20*log10(α)应该等于这个值,由此算出α,注意符号问题,算出的α应该是大于1的'),pause(2.5)
disp('')
a=input('你算出的α是:');
disp('')
disp('用滞后网络的零点之后比零点频率大10倍的频率点校正'),pause(1)
disp('反过来可以确定滞后网络的零点频率ωz=ωc’/10'),pause(1)
disp(['所以滞后网络的零点频率ωz为:',]),pause(1)
disp('因为滞后网络的零点频率ωz=1/T,所以可以算出T'),pause(1.6)
disp('')
T_=input('你算出的T是:');disp('现在校正网络,最重要的两个参数α,T已经确定了,可以给出校正网络了'),pause(1)
disp(''),pause(1)
%屏幕上显示校正后的系统串入的网络
disp('得出结论=> 应对系统K__*GH(s)串入网络(a*T*S+1)/(T*S+1)为:'),pause(1)
disp(''),pause(1)
disp([' ',num2str(T_),'*S+1']),pause(1)
disp('------------------------')
disp([' ',num2str(a),'*',num2str(T_),'*S+1']),pause(1)
disp(''),disp(''),disp(''),pause(1)
disp('校正后的系统GH(s)为:'),pause(1)
%
%屏幕上显示校正后的系统
tt_num=shuzhu2zifu(num);tt_den=shuzhu2zifu(den);
qq1=strcat('(',num2str(T_),'*S+1)'); ,pause(1)%分子
qq2=strcat('(',num2str(a),'*',num2str(T_),'*S+1)'); ,pause(1)%分母
disp([qq1,'*(',tt_num,')']) ,pause(1)
disp('------------------------') ,pause(1)
disp([qq2,'*(',tt_den,')']) ,pause(1)
%
disp('校正前,后的Bode图的对比,红色:校正前; 蓝色:校正后; 黄色:校正网络') ,pause(1.6)
er=abs((T_*j*wc+1)/(a*T_*j*wc+1)) ;er=20*log10(er);er=abs(er);er=er+5;
q_1=linspace(wc,wc,100);q_2=linspace(-er,er,100);
plot(q_1,q_2,'g'),hold on
bode(num,den,'r'),grid on,hold on ,pause(1)
bode(conv(num,[T_ 1]),conv(den,[a*T_ 1]),'b')
grid on,hold on ,pause(1)
bode([T_ 1],[a*T_ 1],'y')
end
choose__=menu(' 验证是否满足要求 ',' 满足 ',' 不满足 ');
if choose__==1
disp('恭喜你 你设计的系统可以使用了')
else
disp('请再重复校正一次')
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -