摘要:Matlab屬于一種通用的科學計算和系統仿真語言,在Matlab/Simulink下,從數學模型到計算機模型的轉換非常容易。Matlab/Simulink提供了三種仿真方法,即M文件編程仿真、Simulink仿真和Simulink結合M文件編程仿真。文章通過實例探討了Matlab的三種仿真方法在電工學教學中的應用。
關鍵詞:Matlab仿真;Simulink;電工學
中圖分類號:TP391.9文獻標識碼:A文章編號:1009-3044(2008)33-1446-04
The Application of Matlab Emulation in Electrotechnology Teaching
RUI Yun-sheng1,2, LIN Jun1
(1. Department of Engineering, Hunan Normal University, Changsha 410081, China; 2. Hefei Science and Technology School, Chinese Academy of Science, Hefei 230031, China)
Absract: Matlab is a kind of all-purpose compute language used in science calculation and system emulation. On the platform of Matlab/Simulink, the transition from mathematics model to compute model is greatly easy. Matlab/Simulink provides three emulation methods: M document programming emulation, Simulink emulation, and Simulink emulation combined with M document programming emulation. Through some instances, the present paper discussed the application of the three methods in electrotechnology teaching.
Key words: matlab emulation; simulink; electrotechnology
1 引言
電工學是一門非電專業的技術基礎課,通過本課程的學習,學生掌握電工技術的基本理論、基本定律、基本概念及基本分析方法和理論的實際應用。它的內容廣泛,理論性和系統性也很強。采用傳統的教學模式,往往只能在理論上進行論述、推導、驗證和證明,并借助一些公式來闡述問題,很難給學生較直觀的印象,教學效果不理想。若把Matlab應用到教學中,利用其強大的數值計算功能、繪圖功能、可視化的仿真功能,可以很好的彌補傳統教學的不足,使一些不容易理解的抽象、復雜的變化過程,通過Matlab仿真比較直觀的的顯示出來,便于學生理解和應用。同時,可以根據教學的需要,隨機修改電路和參數,即時觀察輸出結果,從而加深學生對電路本質的理解,全面掌握教學內容。Matlab提供了三種仿真方法,即 M文件編程仿真、Simulink仿真和Simulink結合M文件編程仿真。下面通過實例探討Matlab的三種仿真方法在電工學教學中的應用。
2 M文件編程仿真
Matlab本身可以被認為是一種高效的語言,用它可編寫出具有特殊意義的文件來,這些文件是由一系列的的Matlab語句組成的,它既可以是一系列窗口命令語句,又可以是由各種控制語句和說明語句構成的函數文件。所有的M文件都是以“.m”作為擴展名,形式有兩種:腳本文件和M函數文件。M文件可以通過M文件編輯器建立完成,即通過Matlab命令窗口的File菜單下的New命令建立M-File。下面例子是通過編寫M函數文件來對電路進行仿真的。
例1 在圖1所示電路中,L= 1H,C = 1uF,R = 250、500、750Ω, 輸入信號為階躍信號iS=ε(t)A,輸出為電容電壓,利用Matlab編程仿真求解系統在時間t = [0,0.05]秒的輸出信號波形。
首先建立數學模型:設電容電壓為uc,電感電流為iL,由圖可知 uR=uL=uC,根據電路列出KVL方程:
■
改寫為標準形式:
■
令電路的狀態變量uC=x1,iL=x2,則微分方程簡寫為:
■
按照Matlab的固定寫法,編寫微分方程組的Matlab函數文件(函數文件名為 functionrlc456.m):
function xdot=functionrlc456(t,x,flag,R,L,C)
xdot=zeros(2,1); %矩陣初始化
xdot(1)=-1/(R*C)*x(1)-1/C*x(2)+i_s(t)/C;%方程1
xdot(2)=1/L*x(1);%方程2
function in=i_s(t) %輸入信號
in = (t>0)*1;%階躍信號
再利用Matlab提供的求解微分方程的指令對該微分方程組求解。選擇“ode45”函數求解,也可采用“ode23” 、“ode15s” 函數求解,Matlab程序(程序名為rlc456.m)如下:
% filename rlc456.m
function x= rlc456(t,R,L,C)
L=1;% 電感值
C=1*(10)^(-6);% 電容值
for R = [250 500 750] % 仿真電阻值分別為250、500、750Ω
[t,x] =ode45('functionrlc456',[0,0.03],[0;0],[],R,L,C);
figure(1);plot(t,x(:,1));hold on ; xlabel('time sec');
text(0.0025,260,'\\leftarrow u_C(t)');grid;
figure(2);plot(t,x(:,2));hold on;xlabel('time sec');
text(0.004,0.58,'\\leftarrow i_L(t)');grid;
end
運行程序后,得到的電容電壓、電感電流波形仿真結果如圖2所示。
3 Simulink仿真
Simulink是基于Matlab的圖形化仿真設計環境,是Matlab提供的進行動態系統建模、仿真和綜合分析的集成軟件包。它使用圖形化的系統模塊對動態系統進行描述,并在此基礎上采用Matlab的計算引擎對動態系統在時域內進行求解。Matlab計算引擎主要對系統微分方程和差分方程求解。Simulink和Matlab是高度集成在一起的,它們之間可以進行靈活的交互操作。下面結合具體電路,說明如何使用Simulink對動態系統進行建模和仿真。
例2 圖3所示電路是一個二階電路。已知R1=20Ω,R2=40Ω,R3=10Ω,us=6V,L=0.2H, C=0.4F。假設在t=0時開關閉合,求t>0時,電感電流iL和電容電壓uC。
首先進入Simulink集成環境窗口,點擊Create a new model創建一個新文件,保存并命名為example2。然后按以下方法和步驟,依次在有關模塊庫集中選中與圖3電路中元件相對應的模塊,并拖入example2窗口中,以便為組成Simulink電路模型作準備。
1) 雙擊Electrical Sources中的模塊DC Voltage Source,進入模塊參數設置窗口,將Amplitude(幅值)設為6V,確定后單擊旁邊的符號標注DC Voltage Source,把它改寫為us。
2) 雙擊Elements中的模塊Series RLC Branch(串聯RLC支路),進入模塊參數設置窗口,將Branch type選為R,把Resistance(電阻)設為20Ω,確定后其圖形符號就自動變為電阻符號。將其符號標注Series RLC Branch改寫為R1,再把R1模塊復制一次,得到電阻R2,按已知條件設置它們的值。再用右鍵單擊R2,把光標放到下拉菜單中的Format上,選中Rotate Block(旋轉),把它旋轉900。按照同樣的方法可得到電阻R3。
3) 雙擊Elements中的模塊Series RLC Branch(串聯RLC支路),將Branch type選為L,把Inductance(H)設為0.2H,將其符號標注Series RLC Branch改寫為L。同理可得到模塊C,將Branch type選為C,把Capacitance(F)設為0.4F,其符號標注Series RLC Branch改寫為C。
4) 從SimPowerSystems/ Elements庫集中拖入一個模塊Breaker(開關),雙擊進入模塊參數設置,把Breaker resistance Ron(開通電阻)設為1×10-6,Initial State(初始狀態)設為0,Snubber resistance Rs(吸收電阻)設為inf,Snubber capacitance Cs(吸收電容)設為0,并選擇External Control of Switching times(外部開關時間控制),通過Simulink/Sources中的模塊Step對Breaker進行控制,使其在t=0時閉合。雙擊Step模塊,打開屬性設置對話框,設置有關參數,Step time(階躍時間)設置為0,Initial value(初始值)設置為0,Final value(終值)設為1,其它參數采用默認值。
5) 要得出電路中電流 和電壓uC,還應拖入Measurements中的模塊Current Measurement和Voltage Measurement,同時將其符號標注。
6) 為顯示電感電流iL和電容電壓uC,從Sinks庫集中拖入Scope模塊,雙擊Scope模塊,打開示波器顯示窗口。在顯示窗口中單擊鼠標右鍵,通過快捷菜單設置顯示坐標范圍等屬性,這里設置為自動刻度。為計算電路的未知量,從SimPowerSystems模塊集中拖入模塊powergui(電力圖形用戶界面),用它可計算并顯示所測量的電壓和電流數值。
得到與圖3電路中有關的模塊后,按照Simulink的連線規則建立與圖3電路對應的Simulink電路模型。Simulink電路模型如圖4所示。
進入菜單Simulation/Configuration Parameters(仿真/仿真參數)設置仿真參數和仿真時的算法,仿真起始時間為0,仿真結束時間為40秒,求解器采用“ode23t”算法,最大步長設置為0.01,其它參數采用默認值。運行仿真,仿真結果如圖5所示,結果與理論分析相同。
4 Simulink結合M文件編程仿真
Simulink的圖形建模方式能夠給用戶提供強大的功能與友好的使用界面,使用戶可以完成大部分的動態系統的仿真分析工作。但在分析一些系統在不同參數情況下的性能、在對系統進行調參以滿足特定要求或分析系統在不同的輸入信號作用下的響應時,單純使用Simulink的圖形建模方式是非常不方便的。使用命令行方式,編寫并運行系統仿真的M文件對動態系統進行仿真,用戶可以很容易的做到:
1) 能夠自動重復地運行仿真;
2) 在仿真過程中可以動態地調整參數;
3) 可以方便地分析不同輸入信號作用下系統的響應。
例3 電路如圖6所示,已知R=3Ω,C=0.1F,輸入信號為f(t),試對系統在階躍信號ε(t)V、sin(314t)V、cos(314t)V作用下電容電壓的輸出波形進行求解。
首先建立數學模型,根據電路列出KVL方程為:uR+uC=f(t),把uR=Ri,i=CduC/dt代入,得電路的微分方程為:
RCduC/dt+uC=f(t) t≥0+
進行拉氏變換,得出傳遞函數為:H(s)=UC(s)/F(s)=1/(RCs+1),把 R=3Ω,C=0.1F 代入得H(s)=10/(3s+10),第二步:建立Simulink模型,如圖7所示。
■
圖7 完成的建模方框圖
圖中使用了Sources子模型庫中的From Workspace模塊,以便從工作空間中讀入數據。使用Sinks子模型庫中的To Workspace模塊,以便將數據回送到Matlab工作空間。
雙擊From Workspace模塊,修改模塊的參數,將Data項修改為[t,f],其它參數采用默認值。使用同樣的方法修改To Workspace模塊的參數,輸出變量名(Variable name)改為“yout”,數據格式設置為帶時間的結構變量。
利用鼠標選中傳遞函數模塊Transfer Fcn,單擊鼠標右鍵,彈出快捷菜單,從快捷菜單中選取“Signal Generator Parameters…”項修改傳遞函數參數,將傳遞函數分子系數“Numerator”、分母系數“Denominator”分別設置為[10]和[3 10],其余參數使用默認值。
仿真求解器采用ode45算法,其余參數采用默認值,Data Import/Export選項卡中的Load from workspace 選項設為禁用。建模完成后,將模型文件存盤為exampl2.mdl文件。
第三步:編寫Matlab仿真程序
編寫Matlab仿真程序對系統在階躍信號、正弦信號、余弦信號作用下進行仿真。腳本文件名為ruirc2.m,程序如下:
clear;
t=(0:0.001:5)';% 仿真時間段和步進,為列向量
f=(t>0); %在時間為0秒躍變的階躍信號
sim('exampl2',[0 5]); %運行仿真exampl2.mdl,仿真時間范圍設置為0至5秒
figure(1);simplot(yout.time,yout.signals.values); %使用simplot命令繪制圖形
xlabel('time sec');
f=sin(314*t);%正弦信號輸入下
sim('exampl2',[0:0.0001:0.1]);
wave1=yout.signals.values;
f=cos(314*t);%余弦信號輸入下
sim('exampl2',[0:0.0001:0.1]);
wave2=yout.signals.values;
data={wave1,wave2};%組合信號
figure(2);
simplot(yout.time,data); %使用simplot命令將兩個信號繪制在一張圖中
xlabel('time sec');
程序運行結果如圖8(a)、(b)所示。
■
(a) 階躍信號作用下的仿真結果 (b) 正、余弦信號作用下的仿真結果
圖8 仿真結果
5 結束語
本文通過具體實例探討了 Matlab的三種仿真方法在電工學教學中的應用。三種方法各有特點,M文件編程仿真的特點是靈活性好,數學關系顯式地表達在程序語句之中,但是仿真的直觀性方面稍顯欠缺,通常在仿真計算完畢之后才能看到結果;Simulink仿真的直觀性好,可以在仿真過程中實時地修改系統模塊的參數,并能夠實時地顯示當前的仿真結果;Simulink結合M文件編程仿真方法是前兩種方法的綜合應用,同時具備圖形界面的直觀性和字符界面的強大功能。與通過圖形界面交互完成的仿真過程相比較,通過編程語句實現將“手動”的仿真過程真正變成了“自動化”仿真過程。在教學中,應根據教學內容選擇合適的仿真方法,以發揮Matlab仿真在電工學教學中的作用。
參考文獻:
[1] 蔣德川. 電工學[M]. 北京:高等教育出版社.1990.
[2] 邱關源. 電路[M]. 北京:高等教育出版社. 1995.
[3] 徐明遠,邵玉斌. Matlab仿真在通信與電子工程中的應用[M]. 西安:西安電子科技大學出版社.2005.
[4] 賈秋玲,袁冬莉,欒云鳳,等.Matlab7.x/Simulink/Stateflow系統仿真、分析及設計[M]. 西安:西北工業大學出版社,2006.
[5] 王群,耿云玲. Simulink在電路分析中應用[J]. 電力自動化設備,2007,27(4):71-74.
[6] 李春茂,王英,鐘誠. 現代教育技術引入電工學課程教學的影響[J]. 電氣電子教學學報,1999,21(2):110-112.
[7] 王忠禮,段慧達,高玉峰. Matlab應用技術——在電氣工程與自動化專業中的應用[M]. 北京:清華大學出版社,2007.
注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。”