📄 step_by_step.m
字号:
F_= menu([' 是否清除Matlab上以前的内存、图片、屏幕信息'],'是','否');
if F_==1
clf,clear ,clc
end
pause(1.6)
%第一块:
%生成一道习题
%<1>误差系数:K <2>超调量P.O.:P_O_ <3>调节时间Ts:Ts_ <4>相位裕量:Fai_M <5>增益裕量:Fai_F <6>系统类型:N <7>阻尼比:Zeata_
%未校正的传函的分子Num 分母Den
disp('给出待校正的系统的GH(s)。本程序要求按照分子分母的顺序以Matlab语法结构依次输入分子或分母中各环节的系数数组'),pause(1.6)
disp('如:"(3*S+1)" 则输入"[3 1]"; "(S^2+6*S+8)" 则输入"[1 6 2]"; "3*S" 则输入"[3 0]"; "3" 则输入"[3]"'),pause(1.6)
disp('如待校正的系统的GH(s)是以K*GH,K取1'),disp(' '),disp(' '),disp(' '),pause(1.6)
%初始化变量
Num=1;Den=1;vase=1;temp1_=0; F_=0;OF=-5;P_O_=0;T_s=0;Fai_M=0;Fai_F=0;N=0;Zeata_=0;
%初始化待校正的系统
while sum(size( vase))~=0%当直接输入回车的时候赋的是空数组 此时size( vase)=0
disp('')
vase=input(' 输入G(s)分子中的一个环节 不再输入后直接回车结束输入:');
try
Num=conv(Num,vase);
catch
disp('结束')
end
end
vase=1;disp(' ');disp(' ');disp(' ');
while sum(size( vase))~=0%当直接输入回车的时候赋的是空数组 此时size( vase)=0
disp('')
vase=input('输入G(s)分母中的一个环节 不再输入后直接回车结束输入: ');
try
Den=conv(Den,vase);
catch
disp('结束')
end
end
%初始化待校正的系统完成
%
%给出要求
while F_~=8
F_= menu(['系统要求达到的指标(本套程序直接输入角度即可,系统内自动转化)'],' 相位裕量 ',' 增益裕量 ',' 误差系数K ','系统类型','超调量P.O. ','调节时间Ts','阻尼比ζ','结束选择');
temp1_=temp1_+F_;%记录选择的类型用于以后的判断
switch F_
case 1
disp('____________');
%disp('相位裕量为:')
Fai_M=input('相位裕量为: ');
Fai_M= Fai_M*pi/180;%角度转弧度
case 2
disp('____________');
%disp('增益裕量为:')
Fai_F=input('增益裕量为: ');temp1_=temp1_+100;
case 3
disp('____________');
%disp('误差系数K为:')
K=input('误差系数K为: ');
case 4
disp('____________');
%disp('系统类型:')
N=input('系统类型: ');
case 5
disp('____________');
%disp('超调量P.O.为:')
P_O_=input('超调量P.O.(百分数)为: ');OF=1;
case 6
disp('____________');
%disp('调节时间Ts')
T_s=input('调节时间Ts: ');
case 7
disp('____________');
%disp('阻尼比ζ')
Zeata_=input('阻尼比ζ: ');%ZF=1;
otherwise
end
end
%给出要求结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%第二块:
disp('根据所给的要求确定要使用Bode图校正还是根轨迹校正')
pause(1),disp(' '),disp(' ')
disp('由于相位裕量和增益裕量是由Bode图反映,所以如果给出的要满足的指标是相位裕量和增益裕量'),pause(1 )
disp('那么就应该使用Bode图校正 ')
disp('这点在判断校正中十分的重要')
disp('press any key to be continue '),pause,disp(' '),disp(' ')
disp('如果给出的要满足的指标是超调量P.O.和调节时间Ts'),pause(1 )
disp('这两个参数通常能用复平面上的一对共轭复根表示那么,只能在根轨迹图上进行校正 '),pause(1 )
disp('所以应该使用根轨迹校正,因为主导极点区都是向复平面的左半边扩展的'),pause(1 )
disp('原系统不满足要求,一定是因为原系统的根轨迹在主导极点区的右侧'),pause(1 )
disp('所以要把根轨迹往左拉,一定是根轨迹的超前校正'),pause(1 )
disp('如果同时要求了误差系数K,那么应该在前面的校正步骤完成之后,验证校正出来的系统误差'),pause(1 )
disp('系数是否满足要求,如满足,那么校正成功,不满足,重复校正 '),pause(1 )
disp('press any key to be continue '),pause,disp(' '),disp(' ')
disp('如果系统动态特性满足,只需要提高误差系数K,就应该添加一对偶极子'),pause(1 )
disp('同时要用根轨迹验证添加的一对偶极子不会影响原来的主导极点的主导性 '),pause(1 )
disp('press any key to be continue '),pause,disp(' '),disp(' ')
disp('如果题目给出的系统为k*GH(s),只给出条件说主导极点阻尼比ζ要满足的值和误差系数K'),pause(1 )
disp('那么阻尼比ζ与题目给出的系统GH(s)的交点对应的k值就是满足动态特性的k'),pause(1 )
disp('用阻尼比ζ确定了系统的k后,就可以串一对偶极子来提高误差系数K'),pause(1 )
disp('press any key to be continue '),pause,disp(' '),disp(' ')
Choose_=menu(['你选择'],'Bode图','根轨迹');
pause(1.6)
switch Choose_
case 1
disp('Bode图的校正网络都是K*(a*T*s+1)/(T*s+1)或K*(T*s+1)/(a*T*s+1)'),pause(1.6)
disp('在这其中K用来把bode图低频部分上拉,提高误差系数'),pause(1.6)
disp('(a*T*s+1)/(T*s+1)或(T*s+1)/(a*T*s+1)部分用来改善动态特性'),pause(1.6)
disp('反映在Bode图上就是用各自的特点以不同的方式来提高相位裕量'),pause(1.6)
disp('Bode图的校正思想是首先判断原系统的误差系数是否满足要求'),pause(1.6)
disp('例如速度误差系数Kv=limit(s*G(s),s,0)'),pause(1.6)
disp('如不满足,将系统要求的误差系数除以待校正系统的误差系数得到结果 K__'),pause(1.6)
disp('得到的就是校正网络所要提供的增益K值'),pause(1.6)
K__=input('你算出的值是 K__: ');
disp('所以下面我们对K__*GH(s)进行校正'),pause(1.6)
bode(K__*Num,Den,'r'),grid on,pause(1)
bode_jiaozheng(K__*Num,Den)
otherwise
rlocus_jiaozheng(Num,Den,OF,P_O_,T_s,K,Zeata_)
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -