用極點配置設計伺服系統
方法1-前饋修正
對于一個可控的系統,我們知道可以用極點配置來得到系統的動態響應指標,但是系統有時會存在較大的靜態誤差。
例如:
系統的狀態矩陣如下,試求取其階躍響應。
MATLAB 代碼如下:
clear all;clc;
A=[0 1;-9 -1];
B=[0 ;1];
C=[1 0];
D=0;
sys0=ss(A,B,C,D);
step(sys0)
grid on
程序運行結果如下:
有上圖可知,原系統的動態響應性能很差,并且有較大的靜態誤差。
首先我們可以用極點配置,改善系統的動態特性。
MATLAB程序代碼入下:
clear all;clc;
A=[0 1;-9 -1];
B=[0 ;1];
C=[1 0];
D=0;
sys0=ss(A,B,C,D);
[y0 t0]= step(sys0,12);
Co = ctrb(A,B);
m=rank(Co); %% m=2 controllable
p=[-100 -200];
k=place(A,B,p);
sys1=ss(A-B*k,B,C,D);
[y1 t1]= step(sys1,12);
yyaxis left
plot(t0,y0);
yyaxis right
plot(t1,y1);
grid on
legend('原系統','極點配置后的新系統')
程序運行結果如下:
有上圖可知,通過極點配置后,系統的動態特性得到了較好的改善,但是系統然后存在較大的靜態誤差。
有系統的狀態方程可知,系統達到穩態時:
如果我們可以在前饋對輸入進行濾波,那么我們可以消除靜態誤差,其方框圖如下所示:
結合上式,我們可求出:
例如,消除上述系統的靜態誤差。
MATLAB代碼如下:
clear all;clc;
A=[0 1;-9 -1];
B=[0 ;1];
C=[1 0];
D=0;
sys0=ss(A,B,C,D);
p=[-100 -200];
k=place(A,B,p);
sys1=ss(A-B*k,B,C,D);
[y,t]=step(sys1,1);
y1=y*(-inv(C*inv(A-B*k)*B));
yyaxis left
plot(t,y)
grid on
yyaxis right
plot(t,y1)
legend('極點配置后的新系統','極點配置+消除靜態誤差的新系統')
程序運行結果如下:
由上圖可知,通過極點配置和伺服控制,我們可以獲得很好的動態性能和靜態性能。
但是,實際過程中,我們很難得到精確的系統狀態矩陣,所以接下來會介紹另外一個方法來做伺服控制。
**************************************************************************************************************
最后,歡迎大家有問題給我留言。
非常感謝小伙伴們的-點贊-收藏-加關注。