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