⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bode_jiaozheng.m

📁 控制系统中系统的性能常常满足不了要求
💻 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 + -