介紹
從這篇文章開始,即進入正式的關於控制教程的介紹,當然介紹框架主要還是來自於密歇根大學的教程網站來,中間也會新增我自己的理解和補充。
正文
我們所要考察的系統是能夠用外力作用來有目的地影響其運動行爲的系統。這種系統叫做被控系統,或被控對象,簡稱對象。通常控制系統設計過程的第一步是要建立其數學模型,這些模型可以從物理定律或實驗數據中得出。本節中,將用狀態空間和傳遞函數來表示動態系統,並以一些機械和電氣系統的例子來介紹建模的基本方法,並展示如何在MATLAB中生成這些模型來做進一步的分析。
本教程中使用的主要MATLAB命令是:ss, tf
動態系統
動態系統是根據固定規則隨時間變化或演變的系統。對於許多物理系統,此規則可以表示爲一組一階微分方程:
x˙=dtdx=f(x(t),u(t),t)在上面的等式中, x(t)是狀態變量,它是一組代表時間t的系統配置變量,例如,在簡單的機械質量塊-彈簧-阻尼器組成的系統中,兩個狀態變量可以是質量塊的位置和速度。 u(t)是在時刻t時由外部輸入到系統的向量,而f是一個(可能是非線性)函數,它表示在特定的時刻產生的狀態向量對時間的導數(變化率), dx/dt。
當已知初始狀態 x(t0),以及時間 t0 和 t1 之間的所有輸入 u(t),可通過積分上面的微分方程確定未來任何時刻的狀態 x(t1),儘管狀態變量本身不是唯一的,可以有非常多個,但是爲了能通過給定系統的“狀態”,來預測系統未來的行爲(求解狀態方程),需要確定一個最小數量的狀態向量 n,它確定了狀態空間的維度,通常會通過系統中獨立儲能元件的數量來確定 n。
前面的微分方程給出的狀態關係比較一般化,可用於描述各種不同的系統,不幸的是,這可能導致分析起來很困難。通常採用兩種簡化方法來便於處理。
- 首先,如果函數 f與時間無關,也就是 x˙=f(x,u),這樣的系統被稱爲時不變系統,這也是一個比較合理的假設,因爲基本的物理定律本身並不依賴於時間。對於時不變系統,函數 f的參數或係數是恆定的,但是狀態變量 x(t)和輸入控制量 u(t)可能仍然與時間有關。
- 第二個常見的是假設系統是線性的,實際上,幾乎每個物理系統都是非線性的。換句話說,f通常是狀態和輸入的某些複雜函數,這些非線性以多種不同的方式出現,控制系統中最常見的一種是“飽和”,指系統的某個量達到了物理極限。幸運的是,在足夠小的工作範圍內(理想曲線附近的切線),大多數系統的動力學近似線性,在這種情況下,一階微分方程組可以表示爲矩陣方程,即 x˙=Ax+Bu。
在數字計算機問世之前(以及隨後的大部分時間),分析線性時不變(LTI)系統是切實可行的,因此,控制理論的大多數結果都是基於這些假設,幸運的是,正如我們看到的那樣,這些結果被證明是非常有效的,並且使用LTI技術已經解決了許多重大的工程挑戰。實際上,反饋控制系統的真正厲害之處在於它們在不可避免的不確定性存在的情況下建模仍能正常工作(魯棒)。
狀態空間表示
對於連續線性時不變(LTI)系統,標準狀態空間表示如下:
x˙=Ax+Buy=Cx+Du其中 x 是狀態向量(n×1),x˙是狀態向量對時間的導數(n×1),u是輸入或控制向量(p×1),y是輸出向量(q×1),A是系統矩陣(n×n),B是輸入矩陣(n×p),C是輸出矩陣(q×n),D是前饋矩陣(q×p)。
輸入矩陣有時非必要,因爲通常存在有些狀態變量無法直接觀察或者不感興趣,輸出矩陣 C用於指定哪些狀態變量(或組合)可供控制器使用。同樣,通常情況下,輸出並不直接取決於輸入(僅通過狀態變量),在這種情況下,D是零矩陣。
狀態空間表示(也稱爲時域表示)可以輕鬆處理**多輸入/多輸出(MIMO)**系統,初始條件非零的系統和非線性系統。因此,狀態空間表示法在現代控制理論中廣泛使用。
傳遞函數表示
LTI系統具有極其重要的特性,即如果系統的輸入爲正弦波,則輸出也將爲正弦波,其頻率與輸入頻率相同,但幅值和相位可能不同。這些幅度和相位差是頻率的函數,這就是所謂的系統頻率響應。
使用拉普拉斯變換,可以將系統的時域表示形式轉換爲頻域輸入/輸出表示形式,即傳遞函數。這樣,它還可以將控制系統的微分方程轉換成更易於分析的代數方程。
時域函數f(t)的拉普拉斯變換定義如下:
F(s)=L{f(t)}=∫0∞e−stf(t)dt其中參數s=σ+jω是複數頻率變量,在實際中,很少需要直接計算拉普拉斯變換,而是通過查表來轉換,可以查看Laplace轉換表(wiki百科)
n階導數的拉普拉斯變換特別重要:
L{dtndnf}=snF(s)−sn−1f(0)−sn−2f˙(0)−...−f(n−1)(0)頻域方法最常用於分析LTI單輸入/單輸出(SISO)系統,例如微分方程的係數爲常數的那些,如下所示:
andtndny+...+a1dtdy+a0y(t)=bmdtmdmu+...+b1dtdu+b0u(t)該方程式的拉普拉斯變換如下:
ansnY(s)+...+a1sY(s)+a0Y(s)=bmsmU(s)+...+b1sU(s)+b0U(s)其中Y(s) 和 U(s)分別是y(t)和u(t)的拉普拉斯變換,請注意,在查找傳遞函數時,我們始終假定每個初始條件y(0),y˙(0),u(0)均爲0。因此G(s)=U(s)Y(s)=ansn+an−1sn−1+...+a1s+a0bmsm+bm−1sm−1+...+b1s+b0將傳遞函數的分子和分母分解爲零極點增益形式是很有用的:
G(s)=D(s)N(s)=K(s−p1)(s−p2)...(s−pn−1)(s−pn)(s−z1)(s−z2)...(s−zm−1)(s−zm)傳遞函數的零點z1,…,zm,是分子多項式的根,也就是使 N(s)=0的s。傳遞函數的極點p1,…,pn是分母多項式的根。也就是使D(s)=0的s,零點和極點都有可能是複數值(具有實部和虛部),系統增益爲 K=bm/an。
請注意,我們還可以直接根據狀態空間表示來確定傳遞函數,如下:
G(s)=U(s)Y(s)=C(sI−A)−1B+D
機械系統
牛頓運動定律構成了分析機械系統的基礎,牛頓的第二定律,可以表示爲:
ΣF=ma=mdt2d2x指出作用在物體上的合力和等於其質量與加速度的乘積。爲了我們的目的,牛頓第三定律指出,如果兩個物體接觸,那麼它們將承受相同大小的接觸力,只是作用方向相反。
在使用該方程時,最好構造一個顯示所有作用力的受力圖(free-body diagram,FBD)
例:
質量塊彈簧阻尼系統
該系統的受力圖如下:
彈簧的力與質量塊的位移 x 成正比,粘性阻力與質量塊的速度 v=x˙ 成正比,兩種力都與質量塊的運動相反,因此顯示爲 x 的負方向。還應注意 x=0 對應於彈簧未拉伸時的質量塊位置。
現在,我們對力進行求和並在每個方向上應用牛頓第二定律,在這種情況下,沒有作用在 y 方向上的力,但是在 x 方向上,我們有:
ΣFx=F(t)−bx˙−kx=mx¨該方程式稱爲控制方程式,完全表徵了系統的動態狀態。稍後,我們將看到如何使用它來計算系統對任何外部輸入F(t)的響應,以及分析系統屬性(例如穩定性和性能)。
爲了確定質量塊-彈簧-阻尼系統的狀態空間表示,我們必須將二階控制方程式簡化爲一組兩個一階微分方程式。爲此,我們選擇位置和速度作爲狀態變量。
x=[xx˙]位置變量表徵存儲在彈簧中的勢能,而速度變量表徵存儲在質量塊中的動能。阻尼器即消耗能量,也不存儲能量。通常,在選擇狀態變量時,考慮哪些變量會表徵系統中存儲的能量會很有幫助。
在這種情況下,狀態方程:
x˙=[x˙x¨]=[0−mk1−mb][xx˙]+[0m1]F(t)如果我們對質量塊的位置感興趣,則輸出方程可以表示爲:
y=[10][xx˙]
在MATLAB中輸入狀態空間模型
現在,我們將演示如何將上面導出的方程式輸入到MATLAB的m文件中,讓我們爲每個變量分配以下數值
變量 |
符號 |
大小 |
m |
質量 |
1.0 kg |
k |
彈簧常數 |
1.0 N/m |
b |
阻尼常數 |
0.2 Ns/m |
F |
輸入力 |
1.0 N |
創建一個新的m文件並輸入一下命令
m = 1;
k = 1;
b = 0.2;
F = 1;
A = [0 1; -k/m -b/m];
B = [0 1/m]';
C = [1 0];
D = [0];
sys = ss(A,B,C,D)
假設初始條件爲零,則該系統的拉普拉斯變換爲:
ms2X(s)+bsX(s)+kX(s)=F(s)因此,從輸入力到位移輸出的傳遞函數爲:
F(s)X(s)=ms2+bs+k1在MATLAB中輸入傳遞函數模型
現在,我們將演示如何在MATLAB中創建以上導出的傳遞函數模型。在定義了系統參數的m文件中輸入以下命令:
s = tf('s');
sys = 1/(m*s^2+b*s+k)
請注意,我們在這裏使用了符號s來定義傳遞函數模型,我們建議大多數時候使用這種方法,但是在某些情況下,例如在較舊的版本的MATLAB中或與SIMULINK接口時,可能需要直接使用分子和分母多項式係數來定義傳遞函數模型,在這種情況下,請使用以下命令:
num = [1];
den = [m b k];
sys = tf(num,den)
電氣系統
就像牛頓的機械系統定律一樣,基爾霍夫的電路定律是對電氣系統進行建模的基本分析工具,基爾霍夫(Kirchoff)的電流定律(KCL)規定,進入電路中某個節點的電流之和必須等於離開該節點的電流之和。基爾霍夫(Kirchoff)的電壓定律(KVL)規定,電路中任何閉環周圍的電壓差之和爲零。當施加KVL時,通常將源級電壓取爲正,將負載電壓取爲負。
例:
RLC電路
現在,我們將考慮三個無源電子元件的簡單串聯組合:電阻器,電感器和電容器,稱爲RLC電路。
由於該電路是一個單迴路,因此每個節點只有一個輸入和輸出,因此,KCL的應用只是表明在任何給定時間 i(t),整個電路的電流是相同的。現在在迴路周圍應用KVL並使用圖中所示的符號約定,我們得出以下控制方程式:
V(t)−Ri−Ldtdi−C1∫idt=0我們注意到,RLC電路的控制方程與質量塊-彈簧-阻尼器機械系統具有相似的形式。特別地,它們都是二階系統,其中電荷(電流的積分)對應於位移,電感對應於質量,電阻對應與粘性阻尼,電容對應於彈簧剛度。在概念上,這些類比在理解動力學系統的行爲方面非常有用。
通過選擇電容器上的電荷和通過電路(電感器)的電流作爲狀態變量,可以找到狀態空間表示形式:
x=[qi]其中q=∫idt因此,狀態方程爲:
x˙=[idtdi]=[0−LC11−LR][qi]+[0L1]V(t)我們選擇電流作爲輸出,如下所示:
y=[01][qi]傳遞函數表示可以通過採用拉普拉斯變換來獲得,就像我們對質量塊彈簧阻尼器所做的那樣,或者從狀態空間方程獲得:
V(s)I(s)=C(sI−A)−1B+D=[01](s[1001]−[0−LC11−LR])−1[0L1]⇒ V(s)I(s)=Ls2+Rs+C1s可以使用與上述質量塊彈簧阻尼器系統相同的步驟,將RLC狀態空間和傳遞函數模型輸入MATLAB。
系統辨識
在本節中,我們已經看到了如何使用基本物理原理對系統進行建模,但是,通常這是不可能的,因爲系統的參數不確定,或者根本不瞭解其基本過程,在這些情況下,我們必須依靠實驗測量和統計技術來開發系統模型,這一過程稱爲系統辨識。
可以使用時域或頻域數據執行系統辨識,有關更多更多信息,可參考http://ctms.engin.umich.edu/CTMS/index.php?aux=Extras_Identification,同時今後會詳細介紹
系統轉換
MATLAB中的大多數運算可以在傳遞函數,狀態空間模型或零極點增益形式上執行,此外,如果需要其他表示形式,則可以在這些形式之間進行轉換。可參考http://ctms.engin.umich.edu/CTMS/index.php?aux=Extras_Conversions