買書捐殘盟

2011年6月13日 星期一

線性非時變系統,可變結構滑動模式的概念

可變結構對於系統參數變動有極佳、強健的控制特性,研究所曾學習此一控制方法。由於目前正投入研究segway的平衡控制,所以重拾以前所學。

滑動模式(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(即滑動函數定義的變數)其移動軌跡在初值迅速逼近滑動函數,並在函數的兩側切換控制量,使其維持在滑動面直至期望值。

6 則留言:

  1. 薛老師您好:
    目前也正在學習SM,剛好見面您的po文.
    想請教一下:X2的變數定義是什麼?
    謝謝

    回覆刪除
  2. X2在程式中,只是做為plot圖形時的一個變數。
    在matlab中,有時為了清楚表示x-y變數之間的關係,通常會把scale調整至比較適切的刻度範圍。

    至於滑動模式,定義滑動面的函數S=C1*x1+x2=0
    x1=誤差
    x2=誤差變化率

    回覆刪除
  3. 謝謝薛老師的回答
    還想請教一下
    1.滑動函數定義為:S(X)=CX 為何老師定義為:CT ?
    2.還有程式中cond是依據為何?
    謝謝

    回覆刪除
  4. 1.我前面是寫S=CT‧X
    其中T是上標字母,表示轉秩矩陣
    2.
    cond的定義-請參考可變結構導論

    回覆刪除
  5. x"(t)+2x'(t)+3x(t)=u(t)
    矩陣A的-2 -3是不是顛倒了?

    回覆刪除