📄 rlocus_jiaozheng.m
字号:
function rlocus_jiaozheng(num,den,OF,P_O_,T_s,K,Zeata_)
switch OF
case 1%超前校正
%算出主导极点R_m1和R_m2
z_ta=log(P_O_)^2/(log(P_O_)^2+pi*pi);
z_ta=z_ta^(0.5);z_ta=abs(z_ta);
Wn_=(4/T_s)/z_ta;
R_m1=-z_ta*Wn_+j*Wn_*((1-z_ta*z_ta)^0.5); R_m2=conj(R_m1);
root_tu_( R_m1,1 )
rlocus(num,den)
disp('根据应满足的超调量P.O.和调节时间Ts得出的主导极点区已用虚线框出'),pause(1.5)
disp('观察根轨迹是否有处于主导区的点,如果有,表示动态特性满足,验证主导极点的主导性即可') ,pause(1.5)
disp('如果没有,那么应该把根轨迹往左边拉,拉到主导区,使用超前校正')
disp(' ')
disp('press any key to be continue '),pause
Choose_=menu(['是否继续校正'],'否','是');
if Choose_==1
disp('结束 ')
return
else
%求出超前校正的参数
disp('首先把主导极点带入原来的开环传函GH(s)|s=s1,得到一个虚数'),pause(1.6)
disp('由数学知识可知,得到的虚数的相角?就是各零点到该主导极点的角度和 减去 到各极点到该主导极点的角度和'),pause(1.6)
disp('由根轨迹的角条件可知,校正网络需要提供的相角Φ=-180-?'),pause(1.6)
c_ta=input('按照上述要求进行计算,算出Φ=');disp('由作图法得出校正网络的零、极点'),pause(1.6)
Z_=input('得出零点为:');P_=input('得出极点为:');
disp('由幅值条件串入校正网络后,系统变为:Gc(s)*GH(s),为满足幅值条件,| {Gc(s)*GH(s)|s=s主导} |还应等于1')
disp('如不等于1 就应在Gc(s)前乘Kc使 | {Kc*Gc(s)*GH(s)|s=s主导} |=1')
Kc=input('算出的Kc为: ');
%屏幕上显示校正网络
disp('得出串入网络(S-Z)/(S-P)为:'),pause(1)
disp(''),pause(1)
if Z_>=0
disp([num2str(Kc),'*(S-',num2str(Z_),')']),pause(1)
else
disp([num2str(Kc),'*(S+',num2str(-Z_),')']),pause(1)
end
disp('------------------------')
if P_>=0
disp(['S-',num2str(P_)]),pause(1)
else
disp(['S+',num2str(-P_)]),pause(1)
end
disp(''),disp(''),disp(''),pause(1)
%
end
disp(''),disp('')
%屏幕上显示校正后的系统
disp('校正后的系统GH(s)为:'),pause(1)
tt_num=shuzhu2zifu(num);tt_den=shuzhu2zifu(den);%原系统分子,分母的字符表示
if Z_>=0%校正网络分子
qq_num=strcat(num2str(Kc),'*(','S-',num2str(Z_),')'); ,pause(1)
else
qq_num=strcat(num2str(Kc),'*(','S+',num2str(-Z_),')'); ,pause(1)
end
%
disp([qq_num,'*(',tt_num,')']) ,pause(1)
disp('----------------------------------') ,pause(1)
if Z_>=0%校正网络分母
qq_den=strcat('(','S-',num2str(P_),')'); ,pause(1)
else
qq_den=strcat('(','S+',num2str(-P_),')'); ,pause(1)
end,pause(1.6),pause(1.6)
%
disp([qq_den,'*(',tt_den,')']) ,pause(1)
%
num1=conv([1 -Z_],num);den1=conv([1 -P_],den);%校正后的系统
disp('画出校正后系统的根轨迹'),figure(2)
root_tu_( R_m1,1 ),rlocus(num1,den1)
disp('验证主导极点的主导性:如得出的根轨迹上满足动态特性的一对共轭极点是主导的,那么要求的动态特性就满足了'),pause(2.1)
disp('求出该主导极点在根轨迹上对应的K值,验证误差系数,如不满足,重新校正'),pause(1.8)
disp('注意:不可以直接通过加大K值来满足误差系数,这样会改变主导极点在根轨迹上的位置'),pause(2.1)
disp('如果K的增大使主导极点失去了主导性或跑出了主导区,就错了!!!!'),pause(1.6)
disp('结束')
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
otherwise%滞后校正
disp('串入网络Kc’*(S-Z)/(S-P)'),pause(1)
if Zeata_~=0
root_tu_(R_m1,type)
rlocus(num,den)
disp('通过ζ的直线与根轨迹的交点 确定待校正的系统的常数项的取值'),pause(1.5)
disp('基于这个重新取得的常数项的值与原来常数项的比值就是要串入的网络的Kc’'),pause(1.6)
Kc=input('Kc= ');
end
Kc=1;
disp('基于根轨迹的滞后校正是在原系统的动态特性满足需要已不需修改,但稳态特性不好要提高误差系数的情形下校正'),pause(2.1)
K1=input('给出未校正前误差系数K1= '); disp('与要求得误差系数相比较得出a');a=K/K1;
disp(['所以a=K/K1= ',num2str(a)]);
disp('所以为防止串入的网络移动主导极点,影响动态特性,令Kc’=1'),pause(1.6)
disp('为保证加入的滞后网络带来的滞后的相角不会严重的影响原来系统的稳定性(即降低了相角裕量)'),pause(1.6)
disp('通常使零点Z的值取的比原系统GH(s)中分子、分母各环节时间常数的最大值Tmax的10倍的倒数') ,pause(1.6)
disp('即Z=1/(10*Tmax). 这样零点Z会非常的靠近原点'),pause(1.6)
Z_=input('给出Z= ');
disp('零点Z除以极点P的值就是要提高的位置误差系数的倍数a '),pause(2.1)
disp('因为limit((S+Z)/(S+P),s,0)=Z/P 所以令校正网络所能提供的误差系数放大倍数Z/P=a就可以达到校正的目的'),pause(2.1)
disp('因此P=Z/a,由于Z非常的靠近原点而a是大于1的,所以P更加的靠近原点,P,Z间的距离就很近'),pause(1.6)
disp('校正网络提供的相角,通常就会很小,这是可以也应该进行验证的'),pause(1.6)
P_=input('现在,给出P= ');
%屏幕上显示校正网络
disp('得出串入网络(S-Z)/(S-P)为:'),pause(1)
disp(''),pause(1)
disp([num2str(Kc),'*(','S+',num2str(-Z_),')']),pause(1)
disp('------------------------')
disp(['S+',num2str(-P_)]),pause(1)
disp(''),disp(''),disp(''),pause(1)
%
%屏幕上显示校正后的系统
disp('校正后的系统GH(s)为:'),pause(1)
tt_num=shuzhu2zifu(num);tt_den=shuzhu2zifu(den);%原系统分子,分母的字符表示
qq_num=strcat('(','S+',num2str(-Z_),')'); ,pause(1)
%
disp([num2str(Kc),'*(', qq_num,'*(',tt_num,'))']) ,pause(1)
disp('----------------------------------') ,pause(1)
qq_den=strcat('(','S+',num2str(-P_),')'); ,pause(1)
%
disp([qq_den,'*(',tt_den,')']) ,pause(1)
disp(''),disp(''),disp('')
%
num1=conv([1 -Z_],num);den1=conv([1 -P_],den);%校正后的系统
disp('画出校正后系统的根轨迹'),pause(1.6),figure(2)
rlocus(num1,den1)
disp('比较校正前后的根轨迹 '),pause(1.6)
disp('press any key to be continue'),pause
disp('验证系统的误差系数,是否满足') ,pause(1)
% YY_ss =shuzhu2fuhao( num1, den1);
% ess=limt(s*YY__SS,s,0);
disp('结束')
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -