?? 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 + -