滑動模式(Sliding Mode, SM)是可變結構(Variable Structure System, VSS)的一支學問,其控制的主幹,在於建立滑動曲面函數,迫使系統狀態,往特定的滑動曲面逼近,並誘使其不離開滑動曲面,直至逼近期望值。
滑動曲面函數定義為:
S(Xi)=C1X1+C2X2+....+Cn-1Xn-1+Xn=0
其中X即使用者定義的觀測變數,例如:
X1=期望值-實際測量值=誤差值,實際測量值可由感測器或儀表測得
X2=(當前時刻X1-前一時刻X1)/△T=誤差變化率
而C為常數係數,最高項次之係數為1
控制器根據系統觀測變數,提供輸入控制量,讓觀測的變數到達滑動區面函數,此一控制量稱之為到達模式控制量(reaching mode control,Ud)或(hitting) 。
當觀測變數到達或逼近滑動曲面後,為了使該觀測值不離開滑動曲面,更期望它沿著滑動曲面移動而滑向原點達到期望值,控制器必須提供足量的控制量(等效控制量,Ueq)來維持系統奔向期望值。如下圖即觀測變數沿著滑動曲面滑向原點示意圖。
(一)到達模式控制律(hitting law)
條件:S‧X1>0
Ud=α‧X1
條件:S‧X1<0
Ud=β‧X1
其中α>0、β<0
(二)滑動模式控制律(sliding mode law)
Ueq=γ‧X1
(三)U=Ud+Ueq
由於現今的控制系統均採微電腦控制,所以離散時間的控制設計,觀測變數不可能準確落在滑動曲面上,當進入滑動曲面後,必然於曲面的兩側左右顫動(chatter),但仍會逐步進入期望值。
假設有一線性非時變系統如下:
可知該狀態方程式如下:
若假設某一系統微分方程式為x"(t)+2x'(t)+3x(t)=u(t),則狀態方程式表示如下:
其中x=x1、dx/dt=x2
若我假定滑動函數S:0.7(z1)+(z2)=0,此函數必通過z1,z2平面的原點。
滑動函數原常用x1,x2作為滑動函數之觀測變數,但易與系統狀態變數混淆,所以爰用z1,z2作為觀測變數。
[程式碼]
clear all[模擬執行結果]
clc
%二階微分方程X'=AX+BU Y=CX+DU
a11=0;a12=1;a21=-2;a22=-3;
A=[a11 a12;a21 a22];
B=[0;1];
C=[1 0];
D=0;
U=0;
T=0.005; %取樣時間
T_End=20; %結束時間
X=[0;0]; %狀態變數X1
dot_X=[0;0];
R=10; %期望值(參考值)
cnt=1;
alpha=20;
beta=-20;
Theta=0;
%滑動函數參數S=C1*e+C2*ce
C1=0.7;
C2=1;
cond=-A(2,2)*C1-C1^2+A(2,1)/B(2,1);
[A,B,C,D]=c2dm(A,B,C,D,T); %微分方程轉換離散方程模型
for i=0:T:T_End
dot_X=A*X+B*U;
N=C*X+D*U;
Theta=Theta+N*T;
err(cnt)=R-Theta;
if (cnt==1)
cerr(cnt)=0;
else
cerr(cnt)=(err(cnt)-err(cnt-1))/T;
end
S=C1*err(cnt)+C2*cerr(cnt);
if (S*err(cnt)>0)
Ud=alpha*err(cnt);
end
if(S*err(cnt)<0)
Ud=beta*err(cnt);
end
Ueq=cond*err(cnt);
U=Ud+Ueq;
X=dot_X;
cnt=cnt+1;
end
plot(err,cerr,'-');
axis([0 15 -15 0]);
hold on
X2=C1*[0 -15];
X1=[0 15];
plot(X1,X2,'r-');
hold off
grid
xlabel('X1');
ylabel('X2');
從模擬的結果觀察得知,觀測變數x1,x2(即滑動函數定義的變數)其移動軌跡在初值迅速逼近滑動函數,並在函數的兩側切換控制量,使其維持在滑動面直至期望值。
薛老師您好:
回覆刪除目前也正在學習SM,剛好見面您的po文.
想請教一下:X2的變數定義是什麼?
謝謝
X2在程式中,只是做為plot圖形時的一個變數。
回覆刪除在matlab中,有時為了清楚表示x-y變數之間的關係,通常會把scale調整至比較適切的刻度範圍。
至於滑動模式,定義滑動面的函數S=C1*x1+x2=0
x1=誤差
x2=誤差變化率
謝謝薛老師的回答
回覆刪除還想請教一下
1.滑動函數定義為:S(X)=CX 為何老師定義為:CT ?
2.還有程式中cond是依據為何?
謝謝
1.我前面是寫S=CT‧X
回覆刪除其中T是上標字母,表示轉秩矩陣
2.
cond的定義-請參考可變結構導論
x"(t)+2x'(t)+3x(t)=u(t)
回覆刪除矩陣A的-2 -3是不是顛倒了?
謝謝指正。
刪除