控制系統的MATLAB仿真
1 MATLAB簡介
MATLAB是Mathworks公司開發的一種集數值計算、符號計算和圖形可視化三大基本功能於一體的功能強大、操作簡單的優秀工程計算應用軟件。MATLAB不僅可以處理代數問題和數值分析問題,而且還具有強大的圖形處理及仿真模擬等功能。從而能夠很好的幫助工程師及科學家解決實際的技術問題。
MATLAB的含義是矩陣實驗室(Matrix Laboratory),最初主要用於方便矩陣的存取,其基本元素是無需定義維數的矩陣。經過十幾年的擴充和完善,現已發展成爲包含大量實用工具箱(Toolbox)的綜合應用軟件,不僅成爲線性代數課程的標準工具,而且適合具有不同專業研究方向及工程應用需求的用戶使用。
MATLAB最重要的特點是易於擴展。它允許用戶自行建立完成指定功能的擴展MATLAB函數(稱爲M文件),從而構成適合於其它領域的工具箱,大大擴展了MATLAB的應用範圍。目前,MATLAB已成爲國際控制界最流行的軟件,控制界很多學者將自己擅長的CAD方法用MATLAB加以實現,出現了大量的MATLAB配套工具箱,如控制系統工具箱(control systems toolbox),系統識別工具箱(system identification toolbox),魯棒控制工具箱(robust control toolbox),信號處理工具箱(signal processing toolbox)以及仿真環境SIMULINK等。
(1) MATLAB的安裝
本節將討論操作系統爲Microsoft Windows環境下安裝MATLAB6的過程。
將MATLAB6的安裝盤放入光驅,系統將自動運行auto-run.bat文件,進行安裝;也可以執行安裝盤內的setup.exe文件啓動MATLAB的安裝程序。啓動安裝程序後,屏幕將顯示安裝MATLAB的初始界面,根據Windows安裝程序的常識,不斷單擊[Next],輸入正確的安裝信息,具體操作過程如下:
輸入正確的用戶註冊信息碼;
選擇接收軟件公司的協議;
輸入用戶名和公司名;
選擇MATLAB組件(Toolbox);
選擇軟件安裝路徑和目錄;
單擊[Next]按鈕進入正式的安裝界面。安裝過程界面如圖1所示。
圖1 MATLAAB安裝過程界面
圖2 MATLAAB啓動過程界面
安裝完畢後,選擇[Restart my computer now]選項以重新啓動計算機。
重新啓動計算機後,用戶就可以點擊圖標使用MATLAB6了。MATLAB啓動過程界面如圖2所示。
(2) MATLAB桌面系統
MATLAB的桌面系統由桌面平臺以及桌面組件共同構成,如圖3。桌面平臺是各桌面組件的展示平臺,它提供了一系列的菜單操作以及工具欄操作,而不同功能的桌面組件構成了整個MATLAB操作平臺。其組件主要包含如下8個組件部分:
①命令窗口(Command Window)②歷史命令窗口(Command History)③組件平臺(Launch Pad)④路徑瀏覽器(Current Directory Browser)⑤幫助瀏覽器(Help Browser)⑥工作空間瀏覽器(Workspace Browser)⑦數組編輯器(Array Editor)⑧M文件編輯調試器(Editor-Debugger)。
用戶可以在View菜單下選擇打開或關閉某個窗口。
圖3 MATLAB桌面平臺
(3) MATLAB命令窗口
MATLAB可以認爲是一種解釋性語言。在MATLAB命令窗口中,標誌>>爲命令提示符,在命令提示符後面鍵入一個MATLAB命令時,MATLAB會立即對其進行處理,並顯示處理結果。
這種方式簡單易用,但在編程過程中要修改整個程序比較困難,並且用戶編寫的程序不容易保存。如果想把所有的程序輸入完再運行調試,可以用鼠標點擊快捷或File|New|M-file菜單,在彈出的編程窗口中逐行輸入命令,輸入完畢後點擊Debug|Run(或F5)運行整個程序。運行過程中的錯誤信息和運行結果顯示在命令窗口中。整個程序的源代碼可以保存爲擴展名爲".m"的M文件。
在介紹MATLAB的強大計算和圖象處理功能前,我們可以先運行一個簡單的程序。
設系統的閉環傳遞函數爲:
求系統的時域響應圖,可輸入下面的命令:
>> num=[1,4];
den=[1,2,8];
step(num,den)
圖4 動態響應時域圖
程序運行後會在一個新的窗口中顯示出系統的時域動態響應曲線,如圖4。用鼠標左鍵點擊動態響應曲線的某一點,系統會提示其響應時間和幅值。按住左鍵在曲線上移動鼠標的位置可以很容易的根據幅值觀察出上升時間、調節時間、峯值及峯值時間,進而求出超調量。如果想求根軌跡,可將程序的第三行變爲rlocus(num,den),求伯德圖可改爲bode(num,den)。所不同的是,在根軌跡和伯德圖中,G(s)爲開環傳遞函數。
MATLAB的語法規則類似於C語言,變量名、函數名都與大小寫有關,即變量A和a是兩個完全不同的變量。應該注意所有的函數名均由小寫字母構成。
MATLAB是一個功能強大的工程應用軟件,它提供了相當豐富的幫助信息,同時也提供了多種獲得幫助的方法。如果用戶第一次使用MATLAB,則建議首先在>>提示符下鍵入DEMO命令,它將啓動MATLAB的演示程序。用戶可以在此演示程序中領略MATLAB所提供的強大的運算和繪圖功能。
2 MATLAB基本操作命令
本節簡單介紹與本書內容相關的一些基本知識和操作命令。
(1)簡單矩陣的輸入
MATLAB是一種專門爲矩陣運算設計的語言,所以在MATLAB中處理的所有變量都是矩陣。這就是說,MATLAB只有一種數據形式,那就是矩陣,或者數的矩形陣列。標量可看作爲1×1的矩陣,向量可看作爲n×1或1×n的矩陣。這就是說,MATLAB語言對矩陣的維數及類型沒有限制,即用戶無需定義變量的類型和維數,MATLAB會自動獲取所需的存儲空間。
輸入矩陣最便捷的方式爲直接輸入矩陣的元素,其定義如下:
-
元素之間用空格或逗號間隔;
-
用中括號([])把所有元素括起來;
-
用分號(;)指定行結束。
例如,在MATLAB的工作空間中,輸入:
>>
則輸出結果爲:
矩陣a被一直保存在工作空間中,以供後面使用,直至修改它。
MATLAB的矩陣輸入方式很靈活,大矩陣可以分成n行輸入,用回車符代替分號或用續行符號(…)將元素續寫到下一行。例如:
以上三種輸入方式結果是相同的。一般若長語句超出一行,則換行前使用續行符號(…)。
在MATLAB中,矩陣元素不限於常量,可以採用任意形式的表達式。同時,除了直接輸入方式之外,還可以採用其它方式輸入矩陣,如:
-
利用內部語句或函數產生矩陣;
-
利用M文件產生矩陣;
-
利用外部數據文件裝入到指定矩陣。
(2)複數矩陣輸入
MATLAB允許在計算或函數中使用複數。輸入複數矩陣有兩種方法:
-
a=[12;34]+i*[56;78]
(2) a=[1+5i 2+6i;3+7i 4+8i]
注意,當矩陣的元素爲複數時,在複數實部與虛部之間不允許使用空格符。如1 +5i將被認爲是1和5i兩個數。另外,MATLAB表示複數時,複數單位也可以用j。
(3) MATLAB語句和變量
MATLAB是一種描述性語言。它對輸入的表達式邊解釋邊執行,就象BASIC語言中直接執行語句一樣。
MATLAB語句的常用格式爲:
變量=表達式[;]
或簡化爲:
表達式[;]
表達式可以由操作符、特殊符號、函數、變量名等組成。表達式的結果爲一矩陣,它賦給左邊的變量,同時顯示在屏幕上。如果省略變量名和"="號,則MATLAB自動產生一個名爲ans的變量來表示結果,如:
1900∕81
結果爲:
-
ans 是MATLAB提供的固定變量,具有特定的功能,是不能由用戶清除的。常用的固定變量還有eps、pi、Inf、NaN等。其特殊含義可以用7.2.10節介紹的方法查閱幫助。
MATAB允許在函數調用時同時返回多個變量,而一個函數又可以由多種格式進行調用,語句的典型格式可表示爲:
[返回變量列表]=fun-name(輸入變量列表)
例如用bode()函數來求取或繪製系統的Bode圖,可由下面的格式調用:
其中變量num、den表示系統傳遞函數分子和分母,W表示指定頻段,mag爲計算幅值,phase爲計算相角。
(4)語句以"%"開始和以分號";"結束的特殊效用
在MATLAB中以"%"開始的程序行,表示註解和說明。符號"%"類似於C++中的"//"。這些註解和說明是不執行的。這就是說,在MATLAB程序行中,出現"%"以後的一切內容都是可以忽略的。
分號用來取消打印,如果語句最後一個符號是分號,則打印被取消,但是命令仍在執行,而結果不再在命令窗口或其它窗口中顯示。這一點在M文件中大量採用,以抑制不必要的信息顯示。
(5)獲取工作空間信息
MATLAB開闢有一個工作空間,用於存儲已經產生的變量。變量一旦被定義,MATLAB系統會自動將其保存在工作空間裏。在退出程序之前,這些變量將被保留在存儲器中。
爲了得到工作空間中的變量清單,可以在命令提示符>>後輸入who 或 whos 命令,當前存放在工作空間的所有變量便會顯示在屏幕上。
命令clear能從工作空間中清除所有非永久性變量。如果只需要從工作空間中清除某個特定變量,比如"x",則應輸入命令clear x。
(6)常數與算術運算符
MATLAB採用人們習慣使用的十進制數。如:
3 –99 0.0001 9.6397238
2i -3.14159i 3e5i
其中 。
數值的相對精度爲eps,它是一個符合IEEE標準的16位長的十進制數,其範圍爲:。
MATLAB提供了常用的算術運算符:+,-,,∕(﹨),^(冪指數)。
應該注意:(∕)右除法和(﹨)左除法這兩種符號對數值操作時,其結果相同,其斜線下爲分母,如1∕4與4﹨1,其結果均爲0.25,但對矩陣操作時,左、右除法是有區別的。
(7)選擇輸出格式
輸出格式是指數據顯示的格式,MATLAB提供format命令可以控制結果矩陣的顯示,而不影響結果矩陣的計算和存儲。所有計算都是以雙精度方式完成的。
-
如果矩陣的所有元素都是整數,則矩陣以不帶小數點的格式顯示。
如輸入:
則顯示:
-
如果矩陣中至少有一個元素不是整數,則有多種輸出格式。常見格式有以下四種:
① format short(短格式,也是系統默認格式)
② format short e(短格式科學表示)
③ format long(長格式)
④ format long e(長格式科學表示)
如:
對於以上四種格式,其顯示結果分別爲:
短格式5位表示
短格式科學表示
長格式16位表示
長格式科學表示
一旦調用了某種格式,則這種被選用的格式將保持,直到對格式進行了改變爲止。
(8)MATLAB圖形窗口
當調用了一個產生圖形的函數時,MATLAB會自動建立一個圖形窗口。這個窗口還可分裂成多個窗口,並可在它們之間選擇,這樣在一個屏上可顯示多個圖形。
圖形窗口中的圖形可通過打印機打印出來。若想將圖形導出並保存,可用鼠標點擊菜單File|Export,導出格式可選emp、bmp、jpg等。命令窗口的內容也可由打印機打印出來:如果事先選擇了一些內容,則可打印出所選擇的內容;如果沒有選擇內容,則可打印出整個工作空間的內容。
(9)剪切板的使用
利用Windows的剪切板可在MATLAB與其它應用程序之間交換信息。
-
要將MATLAB的圖形移到其它應用程序,首先按Alt-Print Screen鍵,將圖形複製到剪切板中,然後激活其它應用程序,選擇edit(編輯)中的paste(粘貼),就可以在應用程序中得到MATLAB中的圖形。當然還可以藉助於copy to Bitmap 或copy to Metafile 選項來傳遞圖形信息。
-
要將其它應用程序中的數據傳遞到MATLAB,應先將數據放入剪切板,然後在MATLAB中定義一個變量來接收。
如鍵入: q=[
然後選擇Edit中的paste,最後加上"]",這樣可將應用程序中的數據送入MATLAB的q變量中。
(10)MATLAB編程指南
MATLAB的編程效率比BASIC、C、FORTRAN和PASCAL等語言要高,且易於維護。在編寫小規模的程序時,可直接在命令提示符>>後面逐行輸入,逐行執行。對於較複雜且經常重複使用的程序,可按7.1.3介紹的方法進入程序編輯器編寫M文件。
M文件是用MATLAB語言編寫的可在MATLAB環境中運行的磁盤文件。它爲腳本文件(Script File)和函數文件(Function File),這兩種文件的擴展名都是.m。
-
腳本文件是將一組相關命令編輯在一個文件中,也稱命令文件。腳本文件的語句可以訪問MATLAB工作空間中的所有數據,運行過程中產生的所有變量都是全局變量。例如下述語句如果以.m爲擴展名存盤,就構成了M腳本文件,我們不妨將其文件名取爲"Step_Response"。
% 用於求取一階躍響應。
num=[1 4];
den=[1 2 8];
step(num,den)
當你鍵入help Step_Response時,屏幕上將顯示文件開頭部分的註釋:
用於求取一階躍響應。
很顯然,在每一個M文件的開頭,建立詳細的註釋是非常有用的。由於MATLAB提供了大量的命令和函數,想記住所有函數及調用方法一般不太可能,通過聯機幫助命令help可容易地對想查詢的各個函數的有關信息進行查詢。該命令使用格式爲:
help 命令或函數名
注意:若用戶把文件存放在自己的工作目錄上,在運行之前應該使該目錄處在MATLAB的搜索路徑上。當調用時,只需輸入文件名,MATLAB就會自動按順序執行文件中的命令。
-
函數文件是用於定義專用函數的,文件的第一行是以function作爲關鍵字引導的,後面爲註釋和函數體語句。
函數就像一個黑箱,把一些數據送進去,經加工處理,再把結果送出來。在函數體內使用的除返回變量和輸入變量這些在第一行functon語句中直接引用的變量外,其它所有變量都是局部變量,執行完後,這些內部變量就被清除了。
函數文件的文件名與函數名相同(文件名後綴爲.m),它的執行與命令文件不同,不能鍵入其文件名來運行函數,M函數必須由其它語句來調用,這類似於C語言的可被其它函數調用的子程序。M函數文件一旦建立,就可以同MATLAB基本函數庫一樣加以使用。
例1 求一系列數的平均數,該函數的文件名爲"mean.m"
function y=mean(x)
% 這是一個用於求平均數的函數
w=length(x); % length函數表示取向量x的長度
y=sum(x)/w; % sun函數表示求各元素的和
該文件第一行爲定義行,指明是mean函數文件,y 是輸出變量,x是輸入變量,其後的%開頭的文字段是說明部分。真正執行的函數體部分僅爲最後二行。其中變量w是局部變量,程序執行完後,便不存在了。
在MATLAB命令窗口中鍵入
>> r=1:10; % 表示r變量取1到10共10個數
mean(r)
運行結果顯示
ans =
5.5000
該例就是直接使用了所建立的M函數文件,求取數列r的平均數。
3 MATLAB在控制系統中的應用
MATLAB是國際控制界目前使用最廣的工具軟件,幾乎所有的控制理論與應用分支中都有MATLAB工具箱。本節結合前面所學自控理論的基本內容,採用控制系統工具箱(Control Systems Toolbox)和仿真環境(Simulink),學習MATLAB的應用。
(1) 用MATLAB建立傳遞函數模型
1.有理函數模型
線性系統的傳遞函數模型可一般地表示爲:
(1)
將系統的分子和分母多項式的係數按降冪的方式以向量的形式輸入給兩個變量和,就可以輕易地將傳遞函數模型輸入到MATLAB環境中。命令格式爲:
; (2)
; (3)
在MATLAB控制系統工具箱中,定義了tf() 函數,它可由傳遞函數分子分母給出的變量構造出單個的傳遞函數對象。從而使得系統模型的輸入和處理更加方便。
該函數的調用格式爲:
G=tf(num,den); (4)
例2 一個簡單的傳遞函數模型:
可以由下面的命令輸入到MATLAB工作空間中去。
>> num=[1,5];
den=[1,2,3,4,5];
G=tf(num,den)
運行結果:
Transfer function:
s + 5
-----------------------------
s^4 + 2s^3 + 3s^2 + 4s + 5
這時對象G可以用來描述給定的傳遞函數模型,作爲其它函數調用的變量。
例3 一個稍微複雜一些的傳遞函數模型:
該傳遞函數模型可以通過下面的語句輸入到MATLAB工作空間。
>> num=6*[1,5];
den=conv(conv([1,3,1],[1,3,1]),[1,6]);
tf(num,den)
運行結果
Transfer function:
6 s + 30
-----------------------------------------
s^5 + 12 s^4 + 47 s^3 + 72 s^2 + 37 s + 6
其中conv()函數(標準的MATLAB函數)用來計算兩個向量的卷積,多項式乘法當然也可以用這個函數來計算。該函數允許任意地多層嵌套,從而表示複雜的計算。
2.零極點模型
線性系統的傳遞函數還可以寫成極點的形式:
(5)將系統增益、零點和極點以向量的形式輸入給三個變量、Z和P,就可以將系統的零極點模型輸入到MATLAB工作空間中,命令格式爲:
(6) (7) (8)
在MATLAB控制工具箱中,定義了zpk()函數,由它可通過以上三個MATLAB變量構造出零極點對象,用於簡單地表述零極點模型。該函數的調用格式爲:
G=zpk(Z,P,KGain) (9)
例4 某系統的零極點模型爲:
該模型可以由下面的語句輸入到MATLAB工作空間中。
>> KGain=6;
z=[-1.9294;-0.0353+0.9287j;-0.0353-0.9287j];
p=[-0.9567+1.2272j;-0.9567-1.2272j;0.0433+0.6412j;0.0433-0.6412j];
G=zpk(Z,P,KGain)
運行結果:
Zero/pole/gain:
6 (s+1.929) (s^2 + 0.0706s + 0.8637)
----------------------------------------------
(s^2 - 0.0866s + 0.413) (s^2 + 1.913s + 2.421)
注意:對於單變量系統,其零極點均是用列向量來表示的,故Z、P向量中各項均用分號(;)隔開。
3. 反饋系統結構圖模型
設反饋系統結構圖如圖5所示。
圖5 反饋系統結構圖
控制系統工具箱中提供了feedback()函數,用來求取反饋連接下總的系統模型,該函數調用格式如下:
G=feedback(G1,G2,sign); (10)
其中變量sign用來表示正反饋或負反饋結構,若sign=-1表示負反饋系統的模型,若省略sign變量,則仍將表示負反饋結構。G1和G2分別表示前向模型和反饋模型的LTI(線性時不變)對象。
例5 若反饋系統圖5中的兩個傳遞函數分別爲:
,
則反饋系統的傳遞函數可由下列的MATLAB命令得出
>> G1=tf(1,[1,2,1]);
G2=tf(1,[1,1]);
G=feedback(G1,G2)
運行結果:
Transfer function:
s + 1
---------------------
s^3 + 3 s^2 + 3 s + 2
若採用正反饋連接結構輸入命令
>> G=feedback(G1,G2,1)
則得出如下結果:
Transfer function:
s + 1
-----------------
s^3 + 3 s^2 + 3 s
例6 若反饋系統爲更復雜的結構如圖6所示。其中
,,
則閉環系統的傳遞函數可以由下面的MATLAB命令得出:
>> G1=tf([1,7,24,24],[1,10,35,50,24]);
G2=tf([10,5],[1,0]);
H=tf([1],[0.01,1]);
G_a=feedback(G1*G2,H)
得到結果:
Transfer function:
0.1 s^5 + 10.75 s^4 + 77.75 s^3 + 278.6 s^2 + 361.2 s + 120
--------------------------------------------------------------------
0.01 s^6 + 1.1 s^5 + 20.35 s^4 + 110.5 s^3 + 325.2 s^2 + 384 s + 120
圖6 複雜反饋系統
4. 有理分式模型與零極點模型的轉換
有了傳遞函數的有理分式模型之後,求取零極點模型就不是一件困難的事情了。在控制系統工具箱中,可以由zpk()函數立即將給定的LTI對象G轉換成等效的零極點對象G1。該函數的調用格式爲:
G1=zpk(G) (11)
例7 給定系統傳遞函數爲:
對應的零極點格式可由下面的命令得出
>> num=[6.8, 61.2, 95.2];
den=[1, 7.5, 22, 19.5, 0];
G=tf(num,den);
G1=zpk(G)
顯示結果:
Zero/pole/gain:
6.8 (s+7) (s+2)
-------------------------
s (s+1.5) (s^2 + 6s + 13)
可見,在系統的零極點模型中若出現複數值,則在顯示時將以二階因子的形式表示相應的共軛複數對。
同樣,對於給定的零極點模型,也可以直接由MATLAB語句立即得出等效傳遞函數模型。調用格式爲:
G1=tf(G) (12)
例8 給定零極點模型:
可以用下面的MATLAB命令立即得出其等效的傳遞函數模型。輸入程序的過程中要注意大小寫。
>> Z=[-2,-7];
P=[0,-3-2j,-3+2j,-1.5];
K=6.8;
G=zpk(Z,P,K);
G1=tf(G)
結果顯示:
Transfer function:
6.8 s^2 + 61.2 s + 95.2
-------------------------------
s^4 + 7.5 s^3 + 22 s^2 + 19.5 s
5. Simulink建模方法
在一些實際應用中,如果系統的結構過於複雜,不適合用前面介紹的方法建模。在這種情況下,功能完善的Simulink程序可以用來建立新的數學模型。Simulink是由Math Works 軟件公司1990年爲MATLAB提供的新的控制系統模型圖形輸入仿真工具。它具有兩個顯著的功能:Simul(仿真)與Link(連接),亦即可以利用鼠標在模型窗口上"畫"出所需的控制系統模型。然後利用SIMULINK提供的功能來對系統進行仿真或線性化分析。與MATLAB中逐行輸入命令相比,這樣輸入更容易,分析更直觀。下面簡單介紹SIMULINK建立系統模型的基本步驟:
(1) SIMULINK的啓動:在MATLAB命令窗口的工具欄中單擊按鈕或者在命令提示符>>下鍵入simulink命令,回車後即可啓動Simulink程序。啓動後軟件自動打開Simullink模型庫窗口,如圖 7所示。這一模型庫中含有許多子模型庫,如Sources(輸入源模塊庫)、Sinks(輸出顯示模塊庫)、Nonlinear(非線性環節)等。若想建立一個控制系統結構框圖,則應該選擇File| New菜單中的Model選項,或選擇工具欄上new Model按鈕,打開一個空白的模型編輯窗口如圖 8所示。
圖 7 simulink 模型庫
圖8 模型編輯窗口
(2) 畫出系統的各個模塊:打開相應的子模塊庫,選擇所需要的元素,用鼠標左鍵點中後拖到模型編輯窗口的合適位置。
(3) 給出各個模塊參數:由於選中的各個模塊只包含默認的模型參數,如默認的傳遞函數模型爲1/(s+1)的簡單格式,必須通過修改得到實際的模塊參數。要修改模塊的參數,可以用鼠標雙擊該模塊圖標,則會出現一個相應對話框,提示用戶修改模塊參數。
(4) 畫出連接線:當所有的模塊都畫出來之後,可以再畫出模塊間所需要的連線,構成完整的系統。模塊間連線的畫法很簡單,只需要用鼠標點按起始模塊的輸出端(三角符號),再拖動鼠標,到終止模塊的輸入端釋放鼠標鍵,系統會自動地在兩個模塊間畫出帶箭頭的連線。若需要從連線中引出節點,可在鼠標點擊起始節點時按住Ctrl鍵,再將鼠標拖動到目的模塊。
-
指定輸入和輸出端子:在Simulink下允許有兩類輸入輸出信號,第一類是仿真信號,可從source(輸入源模塊庫)圖標中取出相應的輸入信號端子,從Sink(輸出顯示模塊庫)圖標中取出相應輸出端子即可。第二類是要提取系統線性模型,則需打開Connection(連接模塊庫)圖標,從中選取相應的輸入輸出端子。
例9 典型二階系統的結構圖如圖9所示。用SIMULINK對系統進行仿真分析。
圖9 典型二階系統結構圖
按前面步驟,啓動simulink並打開一個空白的模型編輯窗口。
-
畫出所需模塊,並給出正確的參數:
-
-
在sources子模塊庫中選中階躍輸入(step)圖標,將其拖入編輯窗口,並用鼠標左鍵雙擊該圖標,打開參數設定的對話框,將參數step time(階躍時刻)設爲0。
-
在Math(數學)子模塊庫中選中加法器(sum)圖標,拖到編輯窗口中,並雙擊該圖標將參數List of signs(符號列表)設爲|+-(表示輸入爲正,反饋爲負)。
-
在continuous(連續)子模塊庫中、選積分器(Integrator)和傳遞函數(Transfer Fcn)圖標拖到編輯窗口中,並將傳遞函數分子(Numerator)改爲〔900〕,分母(Denominator)改爲〔1,9〕。
-
在sinks(輸出)子模塊庫中選擇scope(示波器)和Out1(輸出端口模塊)圖標並將之拖到編輯窗口中。
(3)將畫出的所有模塊按圖9用鼠標連接起來,構成一個原系統的框圖描述如圖10所示。
(4)選擇仿真算法和仿真控制參數,啓動仿真過程。
-
在編輯窗口中點擊Simulation|Simulation parameters菜單,會出現一個參數對話框,在solver模板中設置響應的仿真範圍StartTime(開始時間)和StopTime(終止時間),仿真步長範圍Maxinum step size(最大步長)和Mininum step size(最小步長)。對於本例,StopTime可設置爲2。最後點擊Simulation|Start菜單或點擊相應的熱鍵啓動仿真。雙擊示波器,在彈出的圖形上會"實時地"顯示出仿真結果。輸出結果如圖11所示。
圖10 二階系統的simulink實現
在命令窗口中鍵入whos命令,會發現工作空間中增加了兩個變量――tout和yout,這是因爲Simulink中的Out1 模塊自動將結果寫到了MATLAB的工作空間中。利用MATLAB命令plot(tout,yout),可將結果繪製出來,如圖12所示。比較11和12,可以發現這兩種輸出結果是完全一致的。
圖11仿真結果示波器顯示
圖12 MATLAB命令得出的系統響應曲線
(2) 利用MATLAB進行時域分析
1. 線性系統穩定性分析
線性系統穩定的充要條件是系統的特徵根均位於S平面的左半部分。系統的零極點模型可以直接被用來判斷系統的穩定性。另外,MATLAB語言中提供了有關多項式的操作函數,也可以用於系統的分析和計算。
(1)直接求特徵多項式的根
設p爲特徵多項式的係數向量,則MATLAB函數roots()可以直接求出方程p=0在複數範圍內的解v,該函數的調用格式爲:
v=roots(p) (13)
例10 已知系統的特徵多項式爲:
特徵方程的解可由下面的MATLAB命令得出。
>> p=[1,0,3,2,1,1];
v=roots(p)
結果顯示:
v =
0.3202 + 1.7042i
0.3202 - 1.7042i
-0.7209
0.0402 + 0.6780i
0.0402 - 0.6780i
利用多項式求根函數roots(),可以很方便的求出系統的零點和極點,然後根據零極點分析系統穩定性和其它性能。
(2)由根創建多項式
如果已知多項式的因式分解式或特徵根,可由MATLAB函數poly()直接得出特徵多項式係數向量,其調用格式爲:
p=poly(v) (14)
如上例中:
v=[0.3202+1.7042i;0.3202-1.7042i;
-0.7209;0.0402+0.6780i; 0.0402-0.6780i];
>> p=poly(v)
結果顯示
p =
1.0000 -0.0000 3.0000 2.0000 1.0000 1.0000
由此可見,函數roots()與函數poly()是互爲逆運算的。
(3)多項式求值
在MATLAB 中通過函數polyval()可以求得多項式在給定點的值,該函數的調用格式爲:
polyval(p,v) (15)
對於上例中的p值,求取多項式在x點的值,可輸入如下命令:
>> p=[1,0,3,2,1,1];
x=1
polyval(p,x)
結果顯示
ans =
8
(4)部分分式展開
考慮下列傳遞函數:
式中,但是和中某些量可能爲零。
MATLAB函數可將展開成部分分式,直接求出展開式中的留數、極點和餘項。該函數的調用格式爲:
(16)
則的部分分式展開由下式給出:
式中,,…, ,爲極點,
,,…, 爲各極點的留數,爲餘項。
例11 設傳遞函數爲:
該傳遞函數的部分分式展開由以下命令獲得:
>> num=[2,5,3,6];
den=[1,6,11,6];
[r,p,k]=residue(num,den)
命令窗口中顯示如下結果
r= p= k=
-6.0000 -3.0000 2
-4.0000 -2.0000
3.0000 -1.0000
中留數爲列向量r,極點爲列向量p,餘項爲行向量k。
由此可得出部分分式展開式:
該函數也可以逆向調用,把部分分式展開轉變回多項式之比的形式,命令格式爲:
[num,den]=residue(r,p,k) (17)
對上例有:
>> [num,den]=residue(r,p,k)
結果顯示
num=
2.0000 5.0000 3.0000 6.0000
den=
1.0000 6.0000 11.0000 6.0000
應當指出,如果p(j)=p(j+1)=…=p(j+m-1),則極點p(j)是一個m重極點。在這種情況下,部分分式展開式將包括下列諸項:
例12 設傳遞函數爲:
則部分分式展開由以下命令獲得:
>> v=[-1,-1,-1]
num=[0,1,2,3];
den=poly(v);
[r,p,k]=residue(num,den)
結果顯示
r=
1.0000
0.0000
2.0000
p=
-1.0000
-1.0000
-1.0000
k=
[ ]
其中由poly()命令將分母化爲標準降冪排列多項式係數向量den, k=[]爲空矩陣。
由上可得展開式爲:
(5)由傳遞函數求零點和極點。
在MATLAB控制系統工具箱中,給出了由傳遞函數對象G求出系統零點和極點的函數,其調用格式分別爲:
Z=tzero(G) (18)
P=G.P{1} (19)
注意:式19中要求的G必須是零極點模型對象,且出現了矩陣的點運算"."和大括號{}表示的矩陣元素,詳細內容參閱後面章節。
例13 已知傳遞函數爲:
輸入如下命令:
num=[6.8,61.2,95.2];
den=[1,7.5,22,19.5,0];
G=tf(num,den);
G1=zpk(G);
Z=tzero(G)
P=G1.P{1}
結果顯示
Z =
-7
-2
P =
0
-3.0000 + 2.0000i
-3.0000 - 2.0000i
-1.5000
其結果與例8完全一致。
(6)零極點分佈圖。
在MATLAB中,可利用pzmap()函數繪製連續系統的零、極點圖,從而分析系統的穩定性,該函數調用格式爲:
pzmap(num,den) (20)
例 14 給定傳遞函數:
利用下列命令可自動打開一個圖形窗口,顯示該系統的零、極點分佈圖,如圖13所示。
>> num=[3,2,5,4,6];
den=[1,3,4,2,7,2];
pzmap(num,den)
title(?Pole-Zero Map?) % 圖形標題。
圖13 MATLAB函數零、極點分佈圖
2. 系統動態特性分析。
(1)時域響應解析算法――部分分式展開法。
用拉氏變換法求系統的單位階躍響應,可直接得出輸出c(t)隨時間t變化的規律,對於高階系統,輸出的拉氏變換象函數爲:
(21)
對函數c(s)進行部分分式展開,我們可以用num,[den,0]來表示c(s)的分子和分母。
例 15 給定系統的傳遞函數:
用以下命令對進行部分分式展開。
>> num=[1,7,24,24]
den=[1,10,35,50,24]
[r,p,k]=residue(num,[den,0])
輸出結果爲
r= p= k=
-1.0000 -4.0000 [ ]
2.0000 -3.0000
-1.0000 -2.0000
-1.0000 -1.0000
1.0000 0
輸出函數c(s)爲:
拉氏變換得:
(2)單位階躍響應的求法:
控制系統工具箱中給出了一個函數step()來直接求取線性系統的階躍響應,如果已知傳遞函數爲:
則該函數可有以下幾種調用格式:
step(num,den) (22)
step(num,den,t) (23)
或
step(G) (24)
step(G,t) (25)
該函數將繪製出系統在單位階躍輸入條件下的動態響應圖,同時給出穩態值。對於式23和25,t爲圖像顯示的時間長度,是用戶指定的時間向量。式22和24的顯示時間由系統根據輸出曲線的形狀自行設定。
如果需要將輸出結果返回到MATLAB工作空間中,則採用以下調用格式:
c=step(G) (26)
此時,屏上不會顯示響應曲線,必須利用plot()命令去查看響應曲線。plot 可以根據兩
個或多個給定的向量繪製二維圖形,詳細介紹可以查閱後面的章節。
例16 已知傳遞函數爲:
利用以下MATLAB命令可得階躍響應曲線如圖14所示。
圖14 MATLAB繪製的響應曲線
>> num=[0,0,25];
den=[1,4,25];
step(num,den)
grid % 繪製網格線。
title(?Unit-Step Response of G(s)=25/(s^2+4s+25) ?) % 圖像標題
我們還可以用下面的語句來得出階躍響應曲線
>> G=tf([0,0,25],[1,4,25]);
t=0:0.1:5; % 從0到5每隔0.1取一個值。
c=step(G,t); % 動態響應的幅值賦給變量c
plot(t,c) % 繪二維圖形,橫座標取t,縱座標取c。
Css=dcgain(G) % 求取穩態值。
系統顯示的圖形類似於上一個例子,在命令窗口中顯示瞭如下結果
Css=
1
(3)求階躍響應的性能指標
MATLAB提供了強大的繪圖計算功能,可以用多種方法求取系統的動態響應指標。我們首先介紹一種最簡單的方法――遊動鼠標法。對於例16,在程序運行完畢後,用鼠標左鍵點擊時域響應圖線任意一點,系統會自動跳出一個小方框,小方框顯示了這一點的橫座標(時間)和縱座標(幅值)。按住鼠標左鍵在曲線上移動,可以找到曲線幅值最大的一點――即曲線最大峯值,此時小方框中顯示的時間就是此二階系統的峯值時間,根據觀察到的穩態值和峯值可以計算出系統的超調量。系統的上升時間和穩態響應時間可以依此類推。這種方法簡單易用,但同時應注意它不適用於用plot()命令畫出的圖形。
另一種比較常用的方法就是用編程方式求取時域響應的各項性能指標。與上一段介紹的遊動鼠標法相比,編程方法稍微複雜,但通過下面的學習,讀者可以掌握一定的編程技巧,能夠將控制原理知識和編程方法相結合,自己編寫一些程序,獲取一些較爲複雜的性能指標。
通過前面的學習,我們已經可以用階躍響應函數step( )獲得系統輸出量,若將輸出量返回到變量y中,可以調用如下格式
[y,t]=step(G) (27)
該函數還同時返回了自動生成的時間變量t,對返回的這一對變量y和t的值進行計算,可以得到時域性能指標。
① 峯值時間(timetopeak)可由以下命令獲得:
[Y,k]=max(y); (28)
timetopeak=t(k) (29)
應用取最大值函數max()求出y的峯值及相應的時間,並存於變量Y和k中。然後在變量t中取出峯值時間,並將它賦給變量timetopeak。
② 最大(百分比)超調量(percentovershoot)可由以下命令得到:
C=dcgain(G);
[Y,k]=max(y); (30)
percentovershoot=100*(Y-C)/C (31)
dcgain( )函數用於求取系統的終值,將終值賦給變量C,然後依據超調量的定義,由Y和C計算出百分比超調量。
③ 上升時間(risetime)可利用MATLAB中控制語句編制M文件來獲得。首先簡單介紹一下循環語句while的使用。
while循環語句的一般格式爲:
while<循環判斷語句>
循環體
end
其中,循環判斷語句爲某種形式的邏輯判斷表達式。
當表達式的邏輯值爲真時,就執行循環體內的語句;當表達式的邏輯值爲假時,就退出當前的循環體。如果循環判斷語句爲矩陣時,當且僅當所有的矩陣元素非零時,邏輯表達式的值爲真。爲避免循環語句陷入死循環,在語句內必須有可以自動修改循環控制變量的命令。
要求出上升時間,可以用while語句編寫以下程序得到:
C=dcgain(G);
n=1;
while y(n)<C
n=n+1;
end
risetime=t(n)
在階躍輸入條件下,y 的值由零逐漸增大,當以上循環滿足y=C時,退出循環,此時對應的時刻,即爲上升時間。
對於輸出無超調的系統響應,上升時間定義爲輸出從穩態值的10%上升到90%所需時間,則計算程序如下:
C=dcgain(G);
n=1;
while y(n)<0.1*C
n=n+1;
end
m=1;
while y(n)<0.9*C
m=m+1;
end
risetime=t(m)-t(n)
④ 調節時間(setllingtime)可由while語句編程得到:
C=dcgain(G);
i=length(t);
while(y(i)>0.98*C)&(y(i)<1.02*C)
i=i-1;
end
setllingtime=t(i)
用向量長度函數length( )可求得t序列的長度,將其設定爲變量i的上限值。
例 17 已知二階系統傳遞函數爲:
利用下面的stepanalysis.m程序可得到階躍響應如圖 15及性能指標數據。
>> G=zpk([ ],[-1+3*i,-1-3*i ],3);
% 計算最大峯值時間和它對應的超調量。
C=dcgain(G)
[y,t]=step(G);
plot(t,y)
grid
[Y,k]=max(y);
timetopeak=t(k)
percentovershoot=100*(Y-C)/C
% 計算上升時間。
n=1;
while y(n)<C
n=n+1;
end
risetime=t(n)
% 計算穩態響應時間。
i=length(t);
while(y(i)>0.98*C)&(y(i)<1.02*C)
i=i-1;
end
setllingtime=t(i)
運行後的響應圖如圖 15,命令窗口中顯示的結果爲
C = timetopeak =
0.3000 1.0491
percentovershoot = risetime =
35.0914 0.6626
setllingtime =
3.5337
圖 15 二階系統階躍響應
有興趣的讀者可以用本節介紹的遊動鼠標法求取此二階系統的各項性能指標。將它們與例18得出的結果相比較,會發現它們是一致的。
3. 利用MATLAB繪製系統根軌跡
假設閉環系統中的開環傳遞函數可以表示爲:
則閉環特徵方程爲:
特徵方程的根隨參數K的變化而變化,即爲閉環根軌跡。控制系統工具箱中提供了rlocus()函數,可以用來繪製給定系統的根軌跡,它的調用格式有以下幾種:
rlocus(num,den) (32)
rlocus(num,den,K) (33)
或者 rlocus(G) (34)
rlocus(G,K) (35)
以上給定命令可以在屏幕上畫出根軌跡圖,其中G爲開環系統G0(s)的對象模型,K爲用戶自己選擇的增益向量。如果用戶不給出K向量,則該命令函數會自動選擇K向量。如果在函數調用中需要返回參數,則調用格式將引入左端變量。如
[R,K]=rlocus(G) (36)
此時屏幕上不顯示圖形,而生成變量R和K。
R爲根軌跡各分支線上的點構成的複數矩陣,K向量的每一個元素對應於R矩陣中的一行。若需要畫出根軌跡,則需要採用以下命令:
plot(R,??) (37)
plot()函數裏引號內的部分用於選擇所繪製曲線的類型,詳細內容見表1。控制系統工具箱中還有一個rlocfind()函數,該函數允許用戶求取根軌跡上指定點處的開環增益值,並將該增益下所有的閉環極點顯示出來。這個函數的調用格式爲:
[K,P]=rlocfind(G) (38)
這個函數運行後,圖形窗口中會出現要求用戶使用鼠標定位的提示,用戶可以用鼠標左鍵點擊所關心的根軌跡上的點。這樣將返回一個K變量,該變量爲所選擇點對應的開環增益,同時返回的P變量則爲該增益下所有的閉環極點位置。此外,該函數還將自動地將該增益下所有的閉環極點直接在根軌跡曲線上顯示出來。
例18 已知系統的開環傳遞函數模型爲:
利用下面的MATLAB命令可容易地驗證出系統的根軌跡如圖16所示。
>> G=tf(1,[conv([1,1],[1,2]),0]);
rlocus(G);
grid
title(?Root_Locus Plot of G(s)=K/[s(s+1)(s+2)]?)
xlabel(?Real Axis?) % 給圖形中的橫座標命名。
ylabel(?Imag Axis?) % 給圖形中的縱座標命名。
[K,P]=rlocfind(G)
用鼠標點擊根軌跡上與虛軸相交的點,在命令窗口中可發現如下結果
select_point=0.0000+1.3921i
K=
5.8142
p=
-2.29830
-0.0085+1.3961i
-0.0085-1.3961i
所以,要想使此閉環系統穩定,其增益範圍應爲0<K<5.81。
參數根軌跡反映了閉環根與開環增益K的關係。我們可以編寫下面的程序,通過K的變化,觀察對應根處階躍響應的變化。考慮K=0.1,0.2,…,1,2,…,5,這些增益下閉環系統的階躍響應曲線。可由以下MATLAB命令得到。
>> hold off; % 擦掉圖形窗口中原有的曲線。
圖16 系統的根軌跡
t=0:0.2:15;
Y=[ ];
for K=[0.1:0.1:1,2:5]
GK=feedback(K*G,1);
y=step(GK,t);
Y=[Y,y];
end
plot(t,Y)
對於for循環語句,循環次數由K給出。系統畫出的圖形如圖17所示。可以看出,當K的值增加時,一對主導極點起作用,且響應速度變快。一旦K接近臨界K值,振盪加劇,性能變壞。
圖17 不同K值下的階躍響應曲線
4. MATLAB繪圖的基本知識
通過以上實例的應用,我們已初步嘗試了MATLAB的繪圖功能。MATLAB具有豐富的獲取圖形輸出的程序集。我們已用命令plot()產生線性x-y圖形(用命令loglog、semilogx、semilogy或polar取代命令plot,可以產生對數座標圖和極座標圖)。所有這些命令的應用方式都是相似的,它們只是在如何給座標軸進行分度和如何顯示數據上有所差別。
(1)二維圖形繪製
如果用戶將X和Y軸的兩組數據分別在向量x和y中存儲,且它們的長度相同,則命令
plot(x,y) (39)
將畫出y值相對於x值的關係圖。
例19 如果想繪製出一個週期內的正弦曲線,則首先應該用t=0:0.01:2*pi(pi是系統自定義的常數,可用help命令顯示其定義)命令來產生自變量t;然後由命令y=sin(t)對t向量求出正弦向量y,這樣就可以調用plot(t,y)來繪製出所需的正弦曲線,如圖18所示。
圖18一個週期內的正弦曲線
(2)一幅圖上畫多條曲線。
利用具有多個輸入變量的plot( )命令,可以在一個繪圖窗口上同時繪製多條曲線,命令格式爲:
plot(x1,Y1,x2,Y2,…,xn,Yn) (40)
x1、Y1、x2、Y2等一系列變量是一些向量對,每一個x-y對都可以用圖解表示出來,因而可以在一幅圖上畫出多條曲線。多重變量的優點是它允許不同長度的向量在同一幅圖上顯示出來。每一對向量採用不同的線型以示區別。
另外,在一幅圖上疊畫一條以上的曲線時,也可以利用hold命令。hold命令可以保持當前的圖形,並且防止刪除和修改比例尺。因此,後來畫出的那條曲線將會重疊在原曲線圖上。當再次輸入命令hold,會使當前的圖形復原。也可以用帶參數的hold命令――hold on 和hold off來啓動或關閉圖形保持。
(3)圖形的線型和顏色
爲了區分多幅圖形的重疊表示,MATLAB提供了一些繪圖選項,可以用不同的線型或顏色來區分多條曲線,常用選項見下表1
表1MATLAB繪圖命令的多種選項
選項 |
意義 |
選項 |
意義 |
′-′ |
實線 |
′--′ |
短劃線 |
′: ′ |
虛線 |
′-.′ |
點劃線 |
′r′ |
紅色 |
′*′ |
用星號繪製各個數據點 |
′b′ |
藍色 |
′o′ |
用圓圈繪製各個數據點 |
′g′ |
綠色 |
′.′ |
用圓點繪製各個數據點 |
′y′ |
黃色 |
′×′ |
用叉號繪製各個數據點 |
表1中繪出的各個選項有一些可以並列使用,能夠對一條曲線的線型和顏色同時作出規定。例如′--g′表示綠色的短劃線。帶有選項的曲線繪製命令的調用格式爲:
plot(X1,Y1,S1,X2,Y2,S2,…) (41)
(4)加進網絡線、圖形標題、x軸和y軸標記
一旦在屏幕上顯示出圖形,就可以依次輸入以下相應的命令將網絡格線、圖形標題、x、y軸標記疊加在圖形上。命令格式如下:
grid(網絡線) (42)
title(′圖形標題′) (43)
xlabel(′x軸標記′) (44)
ylabel(′y軸標記′) (45)
函數引號內的字符串將被寫到圖形的座標軸上或標題位置。
(5)在圖形屏幕上書寫文本。
如果想在圖形窗口中書寫文字,可以單擊按鈕,選擇屏幕上一點,點擊鼠標,在光標處輸入文字。另一種輸入文字的方法是用text()命令。它可以在屏幕上以(x,y)爲座標的某處書寫文字,命令格式如下:
text(x,y,′text′) (46)
例如,利用語句
text(3,0.45,′sint′)
將從點(3,0.45)開始,水平的寫出"sint"。
(6)自動繪圖算法及手工座標軸定標
在MATLAB圖形窗口中,圖形的橫、縱座標是自動標定的,在另一幅圖形畫出之前,這幅圖形作爲現行圖將保持不變,但是在另一幅圖形畫出後,原圖形將被刪除,座標軸自動地重新標定。關於瞬態響應曲線、根軌跡、伯德圖、奈魁斯特圖等的自動繪圖算法已經設計出來,它們對於各類系統具有廣泛的適用性,但是並非總是理想的。因此,在某些情況下,可能需要放棄繪圖命令中的座標軸自動標定特性,由用戶自己設定座標範圍,可以在程序中加入下列語句:
v=[x-min x-max y-min y-max] (47)
axis(v) (48)
式中v是一個四元向量。axis(v)把座標軸定標建立在規定的範圍內。對於對數座標圖,v的元素應爲最小值和最大值的常用對數。
執行axis(v)會把當前的座標軸標定範圍保持到後面的圖中,再次鍵入axis可恢復系統的自動標定特性。
Axis(′sguare′)能夠把圖形的範圍設定在方形範圍內。對於方形長寬比,其斜率爲1的直線恰位於45o 上,它不會因屏幕的不規則形狀而變形。Axis(′normal′)將使長寬比恢復到正常狀態。
5、線性系統的頻域分析。
(1)頻率特性函數。
設線性系統傳遞函數爲:
則頻率特性函數爲:
由下面的MATLAB語句可直接求出G(jw)。
i=sqrt(-1) % 求取-1的平方根 (49)
GW=polyval(num,i*w)./polyval(den,i*w) (50)
其中(num,den)爲系統的傳遞函數模型。而w爲頻率點構成的向量,點右除(./)運算符表示操作元素點對點的運算。從數值運算的角度來看,上述算法在系統的極點附近精度不會很理想,甚至出現無窮大值,運算結果是一系列複數返回到變量GW中。
(2)用MATLAB作奈魁斯特圖。
控制系統工具箱中提供了一個MATLAB函數nyquist( ),該函數可以用來直接求解Nyquist 陣列或繪製奈氏圖。當命令中不包含左端返回變量時,nyquist()函數僅在屏幕上產生奈氏圖,命令調用格式爲:
nyquist(num,den) (51)
nyquist(num,den,w) (52)
或者
nyquist(G) (53)
nyquist(G,w) (54)
該命令將畫出下列開環系統傳遞函數的奈氏曲線:
如果用戶給出頻率向量w,則w包含了要分析的以弧度/秒錶示的諸頻率點。在這些頻率點上,將對系統的頻率響應進行計算,若沒有指定的w向量,則該函數自動選擇頻率向量進行計算。
對於式43和45用戶不必給定頻率向量,系統會自動選擇頻率向量進行計算。式44和46需要用戶給出率向量w。w包含了用戶要分析的以弧度/秒錶示的諸頻率點,MATLAB會自動計算這些點的頻率響應。
當命令中包含了左端的返回變量時,即:
[re,im,w]=nyquist(G) (55)
或
[re,im,w]=nyquist(G,w) (56)
函數運行後不在屏幕上產生圖形,而是將計算結果返回到矩陣re、im和w中。矩陣re和im分別表示頻率響應的實部和虛部,它們都是由向量w中指定的頻率點計算得到的。
在運行結果中,w數列的每一個值分別對應re、im數列的每一個值。
例20 考慮二階典型環節:
試利用MATLAB畫出奈氏圖。
利用下面的命令,可以得出系統的奈氏圖,如圖19所示。
>> num=[0,0,1];
den=[1,0.8,1];
nyquist(num,den)
% 設置座標顯示範圍
v=[-2,2,-2,2];
axis(v)
grid
圖19 二階環節奈氏圖
title(′Nyquist Plot of G(s)=1/(s^2+0.8s+1) ′)
(3)用MATLAB作伯德圖
控制系統工具箱裏提供的bode()函數可以直接求取、繪製給定線性系統的伯德圖。
當命令不包含左端返回變量時,函數運行後會在屏幕上直接畫出伯德圖。如果命令表達式的左端含有返回變量,bode()函數計算出的幅值和相角將返回到相應的矩陣中,這時屏幕上不顯示頻率響應圖。命令的調用格式爲:
[mag,phase,w]=bode(num,den) (57)
[mag,phase,w]=bode(num,den,w) (58)
或
[mag,phase,w]=bode(G) (59)
[mag,phase,w]=bode(G,w) (60)
矩陣mag、phase包含系統頻率響應的幅值和相角,這些幅值和相角是在用戶指定的頻率點上計算得到的。用戶如果不指定頻率w,MATLAB會自動產生w向量,並根據w向量上各點計算幅值和相角。這時的相角是以度來表示的,幅值爲增益值,在畫伯德圖時要轉換成分貝值,因爲分貝是作幅頻圖時常用單位。可以由以下命令把幅值轉變成分貝:
magdb=20﹡log10(mag) (61)
繪圖時的橫座標是以對數分度的。爲了指定頻率的範圍,可採用以下命令格式:
logspace(d1,d2) (62)
或
logspace(d1,d2,n) (63)
公式(62)是在指定頻率範圍內按對數距離分成50等分的,即在兩個十進制數和 之間產生一個由50個點組成的分量,向量中的點數50是一個默認值。例如要在弧度/秒與弧度/秒之間的頻區畫伯德圖,則輸入命令時,,在此頻區自動按對數距離等分成50個頻率點,返回到工作空間中,即
w=logspace(-1,2)
要對計算點數進行人工設定,則採用公式(63)。例如,要在與之間產生100個對數等分點,可輸入以下命令:
w=logspace(0,3,100)
在畫伯德圖時,利用以上各式產生的頻率向量w,可以很方便地畫出希望頻率的伯德圖。
由於伯德圖是半對數座標圖且幅頻圖和相頻圖要同時在一個繪圖窗口中繪製,因此,要用到半對數座標繪圖函數和子圖命令。
-
對數座標繪圖函數
利用工作空間中的向量x,y繪圖,要調用plot函數,若要繪製對數或半對數座標圖,只需要用相應函數名取代plot即可,其餘參數應用與plot完全一致。命令公式有:
semilogx(x,y,s) (64)
上式表示只對x軸進行對數變換,y軸仍爲線性座標。
semilogy(x,y,s) (65)
上式是y軸取對數變換的半對數座標圖。
Loglog(x,y,s) (66)
上式是全對數座標圖,即x軸和y 軸均取對數變換。
-
子圖命令
MATLAB允許將一個圖形窗口分成多個子窗口,分別顯示多個圖形,這就要用到subplot()函數,其調用格式爲:
subplot(m,n,k)
該函數將把一個圖形窗口分割成m×n個子繪圖區域,m爲行數,n爲列數,用戶可以通過參數k調用各子繪圖區域進行操作,子圖區域編號爲按行從左至右編號。對一個子圖進行的圖形設置不會影響到其它子圖,而且允許各子圖具有不同的座標系。例如,subplot(4,3,6)則表示將窗口分割成4×3個部分。在第6部分上繪製圖形。 MATLAB最多允許9×9的分割。
例21 給定單位負反饋系統的開環傳遞函數爲:
試畫出伯德圖。
利用以下MATLAB程序,可以直接在屏幕上繪出伯德圖如圖20。
>> num=10*[1,1];
den=[1,7,0];
bode(num,den)
grid
title(′Bode Diagram of G(s)=10*(s+1)/[s(s+7)] ′)
該程序繪圖時的頻率範圍是自動確定的,從0.01弧度/秒到30弧度/秒,且幅值取分貝值,軸取對數,圖形分成2個子圖,均是自動完成的。
圖20 自動產生頻率點畫出的伯德圖
如果希望顯示的頻率範圍窄一點,則程序修改爲:
>> num=10*[1,1];
den=[1,7,0];
w=logspace(-1,2,50); % 從0.1至100,取50個點。
[mag, phase, w]=bode(num, den, w);
magdB=20*log10(mag) % 增益值轉化爲分貝值。
% 第一個圖畫伯德圖幅頻部分。
subplot(2,1,1);
semilogx(w,magdB, ′-r′) % 用紅線畫
grid
title(′Bode Diagram of G(s)= 10*(s+1)/[s(s+7)] ′)
xlabel(?Frequency(rad/s)?)
ylabel(?Gain(dB)?)
% 第二個圖畫伯德圖相頻部分。
subplot(2,1,2);
semilogx(w,phase, ?-r?);
grid
xlabel(?Frequency(rad/s)?)
ylabel(′Phase(deg) ′)
圖21 用戶指定的頻率點畫出的伯德圖
修改程序後畫出的伯德圖如21所示。
4. 用MATLEB求取穩定裕量
同前面介紹的求時域響應性能指標類似,由MATLAB裏bode()函數繪製的伯德圖也可以採用遊動鼠標法求取系統的幅值裕量和相位裕量。例如,我們可以在圖20的幅頻曲線上按住鼠標左鍵遊動鼠標,找出縱座標(Magnitude)趨近於零的點,從提示框圖中讀出其頻率約爲7.25dB。然後在相頻曲線上用同樣的方法找到橫座標(Frequence)最接近7.25dB的點,可讀出其相角爲-53.9度,由此可得,此係統的相角裕量爲126.1度。幅值裕量的計算方法與此類似。
此外,控制系統工具箱中提供了margin()函數來求取給定線性系統幅值裕量和相位裕量,該函數可以由下面格式來調用:
[Gm, Pm, Wcg, Wcp]=margin(G); (67)
可以看出,幅值裕量與相位裕量可以由LTI對象G求出,返回的變量對(Gm, Wcg)爲幅值裕量的值與相應的相角穿越頻率,而(Pm, Wcp)則爲相位裕量的值與相應的幅值穿越頻率。若得出的裕量爲無窮大,則其值爲Inf,這時相應的頻率值爲NaN(表示非數值),Inf和NaN均爲MATLAB軟件保留的常數。
如果已知系統的頻率響應數據,我們還可以由下面的格式調用此函數。
[Gm, Pm, Wcg, Wcp]=margin(mag, phase, w);
其中(mag, phase, w)分別爲頻率響應的幅值、相位與頻率向量。
例22 已知三階系統開環傳遞函數爲:
利用下面的MATLAB程序,畫出系統的奈氏圖,求出相應的幅值裕量和相位裕量,並求出閉環單位階躍響應曲線。
>> G=tf(3.5,[1,2,3,2]);
subplot(1,2,1);
% 第一個圖爲奈氏圖
nyquist(G);
grid
xlabel('Real Axis')
ylabel('Imag Axis')
% 第二個圖爲時域響應圖
[Gm,Pm,Wcg,Wcp]=margin(G)
G_c=feedback(G,1);
subplot(1,2,2);
step(G_c)
grid
xlabel(′Time(secs) ′)
ylabel(′Amplitude′)
顯示結果爲:
ans=1.1429 1.1578
1.7321 1.6542
圖22 三階系統的奈氏圖和階躍響應圖
畫出的圖形如圖22 所示。由奈氏曲線可以看出,奈氏曲線並不包圍(-1,j0)點,故閉環系統是穩定的。由於幅值裕量雖然大於1,但很接近1,故奈氏曲線與實軸的交點離臨界點(-1,j0)很近,且相位裕量也只有7.1578o,所以系統儘管穩定,但其性能不會太好。觀察閉環階躍響應圖,可以看到波形有較強的振盪。
如果系統的相角裕量γ>45o,我們一般稱該系統有較好的相角裕量。
例23 考慮一個新的系統模型,開環傳遞函數爲:
由下面MATLAB語句可直接求出系統的幅值裕量和相位裕量:
>> G=tf(100*conv([1,5],[1,5]), conv([1,1],[1,1,9]));
[Gm, Pm, Wcg, Wcp]=margin(G)
結果顯示 Gm = Pm =
Inf 85.4365
Wcg = Wcp =
NaN 100.3285
再輸入命令
>> G_c=feedback(G,1);
step(G_c)
grid
xlalel(′Time(sec) ′)
ylalel(′Amplitude′)
圖23 較理想的系統響應
可以看出,該系統有無窮大幅值裕量,且相角裕量高達85.4365o。所以系統的閉環響應是較理想的,閉環響應圖如圖23.
-
時間延遲系統的頻域響應
(1) 時間延遲系統的傳遞函數模型
帶有延遲環節e-Ts的系統不具有有理函數的標準形式,在MATLAB中,建立這類系統的模型。要由一個屬性設置函數set()來實現。該函數的調用格式爲:
set(H, ′屬性名′, ′屬性值′) (68)
其中H爲圖形元素的句柄(handle)。在MATLAB中,當對圖形元素作進一步操作時,只需對該句柄進行操作即可。例如以下調用格式
h=plot(x,y)
G=tf(num,den)
Plot()函數將返回一個句柄h,tf()函數返回一個句柄G,要想改變句柄h所對應曲線的顏色,則可以調用下面命令:
Set(h,color,[1,0,0]);
即對"color"參數進行賦值,將曲線變成紅色(由[1,0,0]決定)
同樣,要想對G句柄所對應模型的延遲時間'Td'進行修改,則可調用下面命令
Set(G, ′Td′,T)
其中T爲延遲時間。由此修改後,模型G就已具有時間延遲特性。
(2) 時間延遲系統的頻域響應
含有一個延遲環節的系統,其開環頻域響應爲
可見,該系統的幅頻特性不變,只加大了相位滯後。
例24 考慮系統的開環模型爲:
當T=1時,我們可以由下面的MATLAB命令繪出系統的奈氏圖,如圖24所示,此係統對應的時域響應圖爲25。
>> G=tf(1,[1, 1]);
T=[1];
w=[0, logspace(-3, 1, 100), logspace(1,2,200)];
set(G,'Td', T); % 延遲1秒。
nyquist(G,w)
grid
figure % 建立一個新的繪圖窗口
step(G)
圖24 時間延遲系統奈氏圖
圖25 時間延遲系統的階躍響應
4 頻域法串聯校正的MATLAB方法
利用MATLAB可以方便的畫出Bode圖並求出幅值裕量和相角裕量。將MATLAB應用到經典理論的校正方法中,可以方便的校驗系統校正前後的性能指標。通過反覆試探不同校正參數對應的不同性能指標,能夠設計出最佳的校正裝置。
例25 給定系統如圖26 所示,試設計一個串聯校正裝置,使系統滿足幅值裕量大於10分貝,相位裕量≥45o
圖26 校正前系統
解:爲了滿足上述要求,我們試探地採用超前校正裝置Gc(s),使系統變爲圖27的結構。
圖27 校正後系統
我們可以首先用下面地MATLAB語句得出原系統的幅值裕量與相位裕量。
>> G=tf(100, [0.04, 1, 0]);
[Gw, Pw, Wcg, Wcp]=margin(G);
在命令窗口中顯示如下結果
w = Pw =
Inf 28.0243
Wcg = Wcp =
Inf 46.9701
可以看出,這個系統有無窮大的幅值裕量,並且其相位裕量=28o,幅值穿越頻率Wcp=47rad/sec。
引入一個串聯超前校正裝置:
我們可以通過下面的MATLAB語句得出校正前後系統的Bode圖如圖28,校正前後系統的階躍響應圖如圖29。其中、、ts1分別爲校正前系統的幅值穿越頻率、相角裕量、調節時間,2、、ts2分別爲校正後系統的幅值穿越頻率、相角裕量、調節時間。
>> G1=tf(100,[0.04,1,0]); % 校正前模型
G2=tf(100*[0.025,1],conv([0.04,1,0],[0.01,1])) % 校正後模型
% 畫伯德圖,校正前用實線,校正後用短劃線。
bode(G1)
hold
bode(G2, ′--′)
% 畫時域響應圖,校正前用實線,校正後用短劃線。
figure
G1_c=feedback(G1,1)
G2_c=feedback(G2,1)
step(G1_c)
hold
step(G2_c, ′--′)
圖28 校正前後系統的Bode圖
圖29 校正前後系統的階躍響應圖
可以看出,在這樣的控制器下,校正後系統的相位裕量由增加到48o,調節時間由0.28s減少到0.08s。系統的性能有了明顯的提高,滿足了設計要求。
5 自動控制理論模擬實驗
《自動控制理論》是一門理論性和實踐性很強的專業基礎課,前面我們通過計算機仿真,可以方便地研究系統性能,驗證理論的正確性,加深對理論知識的理解。本節我們再通過電子模擬實驗,學習和掌握系統模擬電路的構成和測試技術,進一步培養學生的實際動手能力和分析、研究問題的能力。
在控制理論課程中,大部分院校目前擁有的實驗設備是電子模擬學習機。這種專爲教學實驗製造的電子模擬學習機,體積較小,使用方便,實驗箱中備有多個運算放大器構成的獨立單元,再加上常用的電阻、電容等器件,通過手工連線、可以構成多種特性的被控對象和控制器。
在基礎訓練階段,實驗手段採用模擬方法,除了靈活方便之外,還具有以下兩個優點:
-
電子模擬裝置可建立較準確的數學模型,從而可以避免實際系統中常碰到的各種複雜因素,使初學者能夠根據所學理論知識循序漸進地完成各項實驗。
-
在工程實踐中,電子模擬方法有一定的實用價值,也是實驗室常用的一種實驗方法。
當然,對於將來從事實際工作的學生來說,僅僅掌握模擬實驗方法還是不夠的,應在此基礎上進行一些以實際系統爲主要設備的實驗訓練。
-
常用的實驗設備和儀器
-
以自控理論電子模擬學習機爲核心的一組基本實驗設備和儀器,共同完成對各種實驗對象的模擬和測試任務,傳統的測試手段下,構成基本實驗必備儀器有以下幾種:
-
電子模擬學習機。
-
超低頻雙蹤示波器。
-
超低頻信號發生器。
-
萬用表。
圖30 傳統儀器組合
按照被測系統的數學模型,在電子模擬學習機上用基本運放單元模擬出相應的電路模型,然後按圖30所示的方法進行模擬實驗測試。
隨着計算機軟、硬件的快速發展,人們越來越多地利用計算機實現的虛擬儀器代替傳統儀器。目前,大多數實驗室都是用計算機來實現信號的產生、測量與顯示、系統的控制及數據處理,使實驗過程更加方便,功能更強大。現在的模擬實驗組件是按圖31來實現的。
圖31 計算機仿真模擬實驗
A/D、D/A卡起模擬信號與數字信號的轉換作用,還可產生不同的輸入信號(階躍、三角、正弦等),供實驗時選用。使用時用RS232串口電纜將A/D、D/A卡與計算機連接起來。如果配備打印機,則可在實驗的同時將實驗結果打印輸出。由於計算機可以方便地輸入數據、觀察數據,初學者可以在屏幕的提示下進行實驗過程,使學習變的更加輕鬆。
-
自控理論的基本實驗
實驗一. 典型環節及階躍響應測試
-
實驗的基本原理
控制系統的模擬實驗是採用複合網絡法來模擬各種典型環節,即利用運算放大器和RC組成的不同輸入網絡和反饋網絡組合,模擬出各種典型環節,然後按照給定系統的結構圖將這些模擬環節連接起來,便得到了相應的模擬系統。然後將輸入信號加到模擬系統的輸入端,使系統產生動態響應。這時,可利用計算機或示波器等測試儀器,測量系統的輸出,便可觀測到系統的動態響應過程,並進行性能指標的測量。若改變系統的某一參數,還可進一步分析研究參數對系統性能的影響。
在以下的實驗過程中,爲了更好地檢驗實驗結果,避免過多地出現錯誤操作,我們將每一環節的正確結果,通過Simulink仿真軟件繪出正確的圖形,以便於讀者檢驗實驗結果的正確性。
-
時域性能指標測量方法
(1)最大超調量
利用示波器或計算機顯示器上測到的輸出波形,讀出響應最大值和穩態值所具有的刻度值,代入下式算出超調量:
(60)
(2)峯值時間
根據示波器或顯示器上輸出的波形最大值,找出這一點在水平方向上所具有的刻度值,即可換算出或讀出峯值時間。
(3)調節時間
同樣,讀出水平方向上對應輸出從零到進入5%或2%誤差帶時所佔的刻度值,即可得到調節時間。
-
實驗內容
(1)比例環節
模擬線路如圖32
圖32 比例放大電路
,
一般可通過改變電阻來調整放大倍數。
由於輸入信號是從運算放大器的反相輸入端輸入,所以輸出信號和輸入信號在相位上正好相反,傳遞函數中出現負號。爲了觀測方便,可以從輸入端輸入負階躍信號。也可以在輸出端連接一個反相器,如圖33。
圖33
取,,將模擬學習機上手動階躍信號(或信號發生器置於"手動階躍")引入環節輸入端,觀測輸出波形,並作記錄。(爲便於比較,應將輸入信號與輸出信號同時送入雙蹤示波器或計算機,兩路信號同時在一個座標系下顯示。繪製曲線時,也用這種形式)。
(a)仿真模塊 (b) 仿真輸出
圖34 比例環節的Simulink仿真
圖34爲Simulink 的仿真模塊。爲便於觀察,階躍信號輸入時間設置爲1s(系統默認值),後面的各個例題也都適當調整輸入時間。增益(Gain)模塊的增益放大倍數設爲2。另外,也可以用鼠標雙擊各模塊,設置適合其它參數。
圖35 積分電路
(2)積分環節
模擬線路如圖35 所示。
,
積分時間常數可通過改變電阻或電容來選擇。
取,,按上述同樣方法觀測階躍響應波形。用Simulink仿真的環節模塊圖如圖36 (a)。由於積分環節附帶的增益比較大(積分時間常數T=0.1),Scope(示波器)繪出圖形的輻值顯示範圍並不是很理想。我們可以在Scope的顯示圖中點擊鼠標右鍵,選Axes properties菜單,在彈出的對話框中設置Y-max屬性爲100,則輸出結果如圖36 (b)所示。
(a)仿真模塊 (b) 仿真輸出
圖36 積分環節的Simulink仿真
圖37 微分電路
(3)微分環節
模擬線路圖如圖37 。
其中: ,
微分時間常數可通過改變和來選取。令,,,按上述同樣步驟進行模擬和測試,觀察微分環節的階躍響應波形。用Simulink仿真的模塊圖爲圖38(a),在Scope繪出的圖形中調整橫縱座標,得出的時域響應圖如圖38(b)所示。
(4)慣性環節
(a)仿真模塊 (b)仿真輸出
圖38 微分環節的Simulink仿真
模擬線路如圖39。
圖39 慣性環節電路圖
,,
取,,觀測其階躍響應輸出,測出,並與理論值(或4T)相比較,用Simulink仿真結果如圖40。
(a)仿真模塊 (b)仿真輸出
圖40 慣性環節的Simulink仿真
(5)振盪環節
其模擬線路如圖41 。
圖41 振盪環節
對應的結構圖如圖42。
圖42 振盪環節結構圖
,,
改變可改變的大小,改變可改變的大小。按表2給出的參數測量階躍響應,並記入表中。
表2 不同的和所對應的時域性能指標
記 錄 參 數 |
|
(ms) |
(ms) |
階躍響應波形 |
|
( ) |
|
100% |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
( ) |
|
|
|
|
|
|
|
|
|
|
當,時用Simulink仿真結果如圖43。
(a)仿真模塊 (b)仿真輸出
圖43 振盪環節的Simulink 仿真
-
實驗報告
-
畫出實驗線路圖,記錄原始數據、測試數據及波形。
-
討論慣性環節(一階系統):
按實驗給出的響應曲線,求出,,,與理論計算值比較,並得出由實驗結果求慣性環節傳遞函數的方法。
-
討論振盪環節(二階系統):
按實驗給出的欠阻尼下的響應曲線,求出和,與理論值相比較,並確定參數,,最終可得出由實驗結果求振盪環節傳遞函數的方法。
討論振盪環節性能指標與,的關係。
實驗二 系統頻率特性測量
利用簡單儀器測量頻率特性,測量精度是較差的,但物理意義明顯,波形直觀是其特點。本實驗通過"李沙育圖形"法進行頻率特性測試,可以使學生通過實驗觀測到物理系統的頻率響應,並根據測量值算出頻率特性的幅值和相角,通過實驗可以掌握測試頻率特性的基本原理和方法。
-
原理
一個穩定的線性系統,在正弦信號的作用下,它的穩態輸出將是一個與輸入信號同頻率的正弦信號,但其振幅和相位卻隨輸入信號的頻率不同而變化,測取不同頻率下系統的輸出、輸入信號的振幅比及相位差,即可求得這個系統的幅頻特性和相頻特性。
設線性系統輸入和穩態響應分別爲以下兩個正弦信號:
幅頻特性 (69)
相頻特性 (70)
若以爲橫軸,以爲縱軸,而以作爲參變量,則隨的變化,和所確定的點的軌跡,將在x-y平面上描繪出一條封閉的曲線(通常是一個橢圓)。這就是所謂的"李沙育圖形",如圖44。
圖44 "李沙育圖形"原理圖
不斷的改變的頻率,就可以獲得一系列形狀不同的李沙育圖形。由此求出各個頻率所對應的相位差和幅值比,就可獲得系統的頻率特性。
幅值比由測量數據按式(69)直接求出;而相位差的具體求法如下:
令=0,則
即得 (71)
顯然上式僅當時成立,"李沙育圖形"在四個象限的形狀如圖45 所示,注意箭頭方向。
實際的控制系統一般爲相位滯後系統,即頻率特性的相頻是負的角度,相頻特性滯後角按"李沙育圖形"法,應按下式確定:
第四象限: (72)
(逆時針)
第三象限: (73)
(逆時針)
第二象限: (74)
(順時針)
第一象限: (75)
(順時針)
圖45 "李沙育圖形"形狀
-
實驗內容
(1)給出三階系統模擬電路如圖46 所示
圖46 三階系統模擬圖
對應的系統結構圖如圖47 所示。
圖47 系統結構圖
選元件,,,
則開環傳遞函數爲:
圖48 測試電路
(2)斷開閉環系統模擬電路圖46中主反饋線路,按開環三階系統在學習機上接好線路,並將有關測試儀器按圖48連接。
將超低頻正弦輸入信號輸入系統,調節輸入信號幅度使被測對象在避免飽和的情況下,輸出幅度儘可能大,以便於測量。然後調節示波器Y軸增益(量程範圍),使在所取信號幅度下,圖像達到滿刻度。
(3)在示波器上測量此時輸入信號幅值(用表示),並記錄在表3中,此後在輸出幅度能有效測出時,一般不再改變輸入信號的幅度。
按表中給定的測點依次改變輸入信號頻率,測試並記錄於表3中。
爲了提高讀數精度,對示波器的X,Y軸增益可隨時調節,以獲得較好的"李沙育圖形"。注意在X軸與Y軸增益不一致時,"李沙育圖形"的形狀可能會有所變化。讀數後按相應的增益正確折算出,值。另外,在轉折頻率附近以及穿越頻率附近應多測幾點。
表3 頻率特性測試結果記錄
8
10
15
20
30
40
60
80
100
200
f(Hz)
1.27
1.6
2.4
3.2
4.8
6.4
9.6
12.7
16
32
2
2
李沙育圖形
3. 實驗報告
-
按被測對象的傳遞函數,畫出模擬電路圖
-
整理表3中的實驗數據,在半對數座標紙上作出被測系統的對數幅頻特性和相頻特性。
-
採用MATLAB語言,畫出被測對象的Bode圖,與上圖進行比較,特別驗證在測試點處的結果是否一致。
-
討論"李沙育圖形"法測試頻率特性的優缺點,有效頻率範圍及測試精度。
附:(1)用以下MATLAB命令繪製的開環系統伯德圖見圖49。
>> G=tf(10,[conv([0,1,1],[0.001,0.1,1])]);
Bode(G)
grid
49 開環系統伯德圖
(2)採用以下MATLAB命令繪出的"李沙育圖形"見圖50
>> G=tf(10,[conv([0.1,1],[0.001,0.1,1])]);
%畫頻率爲8的圖。
t=0:0.01:2*pi;
u=sin(8*t);
y=lsim(G,u,t);
plot(u,y)
%畫頻率爲60的圖。
t=0:0.1:2*pi; % 設置新的時間間隔。
figure
u=sin(60*t);
y=lsim(G,u,t);
plot(u,y)
其中,MATLAB函數lsim()是求任意輸入下的響應,調用格式與step()函數基本一致,只是輸入變量中必須包含任意輸入u,向量u表示系統輸入在各個時刻的值。
如果想求取和,可輸入如下程序
>> i=length(u);
while(u(i)>0&u(i)<0)
i=i-1;
end
y0=abs(y(i))
ym=max(y)
對頻率爲8時給定的u和y,可得如下結果:
y0 = ym =
8.9149 9.2467
(a)=8時的"李沙育圖形" (b)=60時的"李沙育圖形"
圖50 MATLAB仿真"李沙育圖形"
圖51(a) Simulink仿真圖
圖51(b)響應波形
圖51(c)Simulink繪出的"李沙育圖形"
(3)應用Simulink仿真工具輸出的響應曲線及畫出的"李沙育圖形"如圖51所示。
在圖51(a)所示的編輯窗口中,點擊Simulation|Simulation parameters菜單,將Simulation time設爲:Start time設爲0.0s,Stop time 設爲3.0s。雙擊Sine Wave控件,將其Frequency設爲8,Amplitude設爲0.5,雙擊XY Graph控件,將x-min,x-max,y-min, y-max, sample time(採樣時間間隔)分別設爲-0.5,0.5,-4,4,-1。輸出響應波形爲圖51(b),XY Graph繪出的"李沙育圖形"爲51(c).
實驗三 連續系統的頻率法串聯校正
頻率法串聯校正,主要是根據工程上提出的頻率指標, ,等,在頻率特性曲線上進行計算測量,最終得出欲增加的校正裝置的功能,然後驗證校正後的實際結果,經過反覆調整,直至滿意爲止。
本實驗的校正原理已在前面章節介紹,理論計算過程可以由讀者自己完成。本節只通過對校正前後系統性能的測量,來進一步體會串聯校正的實際效果。
-
-
實驗目的
(1)加深理解串聯校正裝置對系統動態性能的校正作用。
(2)對給定系統進行串聯校正設計,並通過模擬實驗檢驗設計的正確性。
-
實驗內容
對於給定的單位反饋閉環系統如圖52 ,其對應的開環傳遞函數爲:
圖52 原閉環系統結構圖
其中
-
串聯超前校正
系統的模擬電路圖如圖53 所示,圖中開關S斷開時對應校正前的系統,當S接通時串入超前校正環節。
圖53 模擬電路圖
取原系統電路元件數值爲:,,,, ,有,,,
則當S斷開時,原系統開環傳遞函數爲:
由下列MATLAB命令給出校正前系統的頻域指標。
>> G=tf (120, [0.03,1,0]) ;
[Gm,Pm,Wcg,Wcp]=margin(G)
結果顯示
Gm = Pm = Wcg = Wcp =
Inf 29.4646 Inf 59.0015
由顯示結果得,前校正系統的頻域指標爲:=,=59.0rad/sec。
圖54 串聯超前校正系統結構圖
當S開關閉合時,串入有源超前校正裝置,對應結構圖如圖54。
其中:,,
選取,
由以下MATLAB命令繪出校正前後開環系統Bode圖如圖55,在串聯超前校正作用下,將超前角疊加在原系統附近,使校正後的系統=,=71.8 rad/sec 。
>> G=tf (120,[0.03,1,0]); %校正前模型。
Gc=tf ([0.02,1], [0.01,1]);
G_0=Gc*G; %校正後模型。
bode(G) %校正前伯德圖採用默認畫法。
grid
hold
bode(G_0, ':' ) %校正後伯德圖用虛線畫。
[Gm,Pm,Wcg,Wcp]=margin(G_0)
結果顯示
Gm = Pm = Wcg = Wcp =
Inf 44.3717 Inf 71.8021
可見,系統的相角裕量由增加到,幅值穿越頻率由59.0 rad/sec增加到71.8rad/sec,系統的性能有了明顯的提高。
圖55 串聯超前校正前後系統的伯德圖
(2)串聯滯後校正
圖56 串聯滯後校正模擬電路圖
仍對上述圖53系統進行串聯滯後校正,校正前原系統不變。當S開關閉合後,串入滯後校正裝置Gc(s),對應模擬電路圖如圖56所示。
其中:,,
取 ,,
利用下列MATLAB命令將系統校正前後的Bode圖繪於圖57 。
>> G=tf (120, [0.03, 1, 0]); %校正前模型。
Gc=tf ([0.75, 1], [3, 1]);
G_0=Gc*G; %校正後模型。
bode (G) %校正前伯德圖採用默認畫法。
grid
hold
bode(G_0, ':' ) %校正後伯德圖用虛線畫。
[Gm,Pm,Wcg,Wcp]=margin(G_0)
結果顯示
Gm = Pm = Wcg = Wcp =
Inf 51.5713 Inf 24.2824
可見,系統的相角裕度增加到,幅值穿越頻率卻減小到=24.3 rad/dec,這種技術導致系統響應速度有所降低。
圖57 串聯滯後校正前後系統的伯德圖
-
實驗步驟:
-
在電子模擬學習機上按實驗線路連接好模擬電路。
-
按實驗一圖33 的方法,連接好信號源和測試儀器。
-
輸入階躍信號,測量校正前系統階躍響應,在表4中記錄所測的指標,,及階躍響應波形。
-
閉合開關S,將超前(或滯後)校正裝置串入系統,重複上面(3)的測量步驟並記錄。
-
-
實驗報告
-
畫出原系統及各校正環節的模擬線路圖及校正前後系統的閉環結構圖,記錄測試數據及響應波形。
-
寫出校正後系統的開環傳遞函數,並畫出漸近線形式的伯德圖,計算,。
-
比較校正前後系統的階躍響應曲線及性能指標,說明校正裝置的作用。
-
(a) 仿真模塊 (b) 階躍響應曲線
圖58 校正前實驗系統
附: 採用Simulink仿真工具得出的校正前後的仿真模塊圖及輸出波形分別如圖58、59、60所示。
(a) 仿真模塊 (b) 階躍響應曲線
圖59 超前校正實驗圖
(a) 仿真模塊 (b)階躍響應曲線
圖60 滯後校正實驗圖
表4 串聯校正測試記錄
校正前
超前校正後
滯後校正後
階躍響應曲線
-