陳 梅,王 健
(1. 曲阜師范大學(xué) 工學(xué)院,山東 日照 276826;2. 山東水利職業(yè)學(xué)院 經(jīng)濟管理系,山東 日照 276826)
隨著計算機技術(shù)的發(fā)展,越來越多的教學(xué)軟件為課堂教學(xué)和實驗教學(xué)帶來了便利[1-5]?!白詣涌刂圃怼闭n程是自動化、電子信息工程等專業(yè)的核心課程[6-10],PID 控制是自動控制原理課程中的重要內(nèi)容[11-13]。在PID 控制中,各參數(shù)的設(shè)置直接決定控制系統(tǒng)的性能優(yōu)劣。為了更好地理解PID 控制對系統(tǒng)性能參數(shù)的影響,通過MATLAB GUI 編程實現(xiàn)了控制系統(tǒng)的3 種獲取形式:傳遞函數(shù)、零極點及狀態(tài)控件形式;PID參數(shù)的動態(tài)調(diào)整;以及對應(yīng)控制系統(tǒng)的單位階躍響應(yīng)曲線和系統(tǒng)性能的參數(shù)。該演示系統(tǒng)操作方便,可實時更新數(shù)據(jù)和圖形,有助于理解和分析PID 參數(shù)對系統(tǒng)的影響。
基于MATLAB GUI 的PID 控制仿真系統(tǒng)包括了“自動控制原理”課程中PID 控制理論和實驗教學(xué)的4 個主要模塊,即控制系統(tǒng)的獲取、PID 參數(shù)設(shè)置、系統(tǒng)動態(tài)性能參數(shù)的獲取、單位階躍響應(yīng)曲線的繪制,該仿真系統(tǒng)的主要模塊如圖1 所示。
圖1 仿真系統(tǒng)主要模塊
GUIDE 是MATLAB 圖形用戶接口開發(fā)環(huán)境[14-15],它提供了一系列工具用于建立GUI 對象,簡化了設(shè)計和創(chuàng)建的過程。使用GUI 可以完成GUI 圖形界面布局和GUI 編程兩項工作,對應(yīng)2 個擴展名分別為“.fig”和“.m”的文件。“.fig”文件用來向界面中添加所需要的控件并設(shè)置其屬性;“.m”文件通過Callback 回調(diào)函數(shù)實現(xiàn)控件操作中的相關(guān)功能。GUI 設(shè)計流程如圖2 所示。
圖2 GUI 設(shè)計流程
根據(jù)設(shè)計的功能模塊,仿真系統(tǒng)的界面主要功能是控制系統(tǒng)設(shè)置、顯示所繪制的單位階躍響應(yīng)曲線、設(shè)置PID 參數(shù)及動態(tài)性能參數(shù)。界面設(shè)計包括編輯框、滑動條、單選按鈕、按鈕及坐標軸框、靜態(tài)文本框等控件。仿真系統(tǒng)主要包括4 個面板,用于對各功能進行分類管理,具體設(shè)計如下:
(1)控制系統(tǒng)設(shè)置。3 個單選按鈕選擇數(shù)據(jù)的形式,9 個編輯框獲取控制系統(tǒng)的參數(shù),2 個按鈕分別實現(xiàn)不同形式參數(shù)的轉(zhuǎn)換和從工作空間獲取數(shù)據(jù)。
(2)單位階躍響應(yīng)曲線繪制。2 個按鈕選擇開環(huán)或閉環(huán)響應(yīng)曲線,1 個坐標軸框用來顯示圖形。
(3)PID 參數(shù)設(shè)置。3 個滑動條分別調(diào)節(jié)KP、KI和KD參數(shù),3 個編輯框設(shè)置3 個參數(shù)的最大值,3 個編輯框顯示3 個參數(shù)的當前值,6 個靜態(tài)文本起到提示作用。
(4)動態(tài)性能參數(shù)。4 個靜態(tài)文本和4 個編輯框分別用來提示和顯示各性能參數(shù)。
控制系統(tǒng)是通過設(shè)置系統(tǒng)參數(shù)來獲取的??刂葡到y(tǒng)的主要有傳遞函數(shù)、零極點和狀態(tài)空間3 種形式,分別對應(yīng)3 種形式的數(shù)據(jù)設(shè)置,數(shù)據(jù)設(shè)置形式的選擇是通過單選按鈕實現(xiàn)的。傳遞函數(shù)的參數(shù)為分子num和分母den 的系數(shù):零極點形式的參數(shù)為比例k、零點z 和極點p;狀態(tài)空間的參數(shù)為A、B、C、D。各種形式的參數(shù)是以矩陣的形式給出的,不同形式之間可以相互轉(zhuǎn)換。控制系統(tǒng)的描述可以通過直接輸入數(shù)據(jù)和從工作空間獲取數(shù)據(jù)。
3.1.1 直接輸入數(shù)據(jù)
直接輸入數(shù)據(jù)是在選擇對應(yīng)的編輯框中直接輸入需要的參數(shù)。點擊“形式轉(zhuǎn)換”按鈕便可顯示其他形式的數(shù)據(jù)。例如,選中“傳遞函數(shù)”單選按鈕,輸入分子num 和分母den 的系數(shù),點擊“形式轉(zhuǎn)換”,即可顯示零極點形式和狀態(tài)空間的參數(shù)?!靶问睫D(zhuǎn)換”按鈕主要通過get 和set 函數(shù)獲取和設(shè)置數(shù)據(jù);通過str2num 和num2str 函數(shù)實現(xiàn)字符串和矩陣間數(shù)據(jù)的相互轉(zhuǎn)化;通過tf2zp、tf2ss、zp2tf、zp2ss、ss2tf、ss2zp函數(shù)實現(xiàn)傳遞函數(shù)、零極點及狀態(tài)空間不同形式參數(shù)間的轉(zhuǎn)化,主要實現(xiàn)語句如下:
%選中“傳遞函數(shù)”單選按鈕
if(get(handles.rbtf,'Value'))
%獲取num 和den 參數(shù)
num=get(handles.editnum,'string');
num=str2num(num);
den=get(handles.editden,'string');
den=str2num(den);
%轉(zhuǎn)換成零極點形式
[z p k]=tf2zp(num,den);
%轉(zhuǎn)換成狀態(tài)空間
[A B C D]=tf2ss(num,den);
%設(shè)置零極點參數(shù)z、p、k
z=num2str(z);
set(handles.editz,'string',z);
p=num2str(p);
set(handles.editp,'string',p);
k=num2str(k);
set(handles.editk,'string',k);
%設(shè)置狀態(tài)空間參數(shù)A、B、C、D
….
%選中“零極點形式”單選按鈕
elseif(get(handles.rbzpk,'Value'))
…..
%選中“狀態(tài)空間”單選按鈕
else
….
end
3.1.2 從狀態(tài)空間獲取數(shù)據(jù)
為了方便操作,控制系統(tǒng)的參數(shù)也可從工作空間獲取。該操作是通過“從工作空間獲取”按鈕實現(xiàn)。數(shù)據(jù)的獲取主要通過evalin 函數(shù)實現(xiàn),傳遞函數(shù)參數(shù)從工作空間獲取的語句為:
num=evalin('base','num');
den=evalin('base','den') ;
選擇“傳遞函數(shù)”單選按鈕,在工作空間中輸入num=1, den=[1 3 2],點擊“從工作空間獲取”按鈕,便將數(shù)據(jù)顯示到num 和den 后的編輯框中,點擊“形式轉(zhuǎn)換”便可顯示其他形式的數(shù)據(jù)。
對于控制系統(tǒng),通常需要繪制單位階躍響應(yīng)曲線來反映系統(tǒng)的性能,包括開環(huán)系統(tǒng)和閉環(huán)負反饋系統(tǒng)的響應(yīng)曲線,曲線的繪制通過step 函數(shù)實現(xiàn)。
設(shè)置完控制系統(tǒng)的參數(shù)后,點擊“開環(huán)繪制”按鈕,即可顯示開環(huán)曲線,如圖3 所示。點擊“閉環(huán)負反饋”按鈕,即可顯示閉環(huán)負反饋響應(yīng)曲線,如圖4所示。
圖3 開環(huán)曲線
圖4 閉環(huán)負反饋響應(yīng)曲線
PID 控制由比例、積分和微分組成,其對應(yīng)的參數(shù)分別為KP、KI和KD,其控制規(guī)律傳遞函數(shù)描述為:在PID 控制中,3 個參數(shù)的設(shè)置直接影響系統(tǒng)的性能參數(shù)。對每個參數(shù),先設(shè)置最大值即取值范圍,通過滑動條拖動調(diào)節(jié)當前值。KP參數(shù)的實現(xiàn)代碼如下:
%獲取Kp 最大值
mkp=get(handles.editmkp,'string');
mkp=str2num(mkp);
%獲取滑動條的位置,確定Kp 的值
kp=get(handles.sliderkp,'value')*mkp;
skp=num2str(kp);
set(handles.editkp,'string',skp);
設(shè)置控制系統(tǒng)的傳遞函數(shù) num 為 50,den 為1,20,100,0。在“PID 參數(shù)設(shè)置”中,在最大值編輯框中設(shè)置KP、KI和KD參數(shù)的最大值分別為100、1 和1,通過拖動滑動條可以調(diào)節(jié)3 個參數(shù),并在當前值編輯框中顯示各參數(shù)的調(diào)節(jié)值,如圖5 所示。
圖5 PID 參數(shù)調(diào)節(jié)
控制系統(tǒng)動態(tài)性能參數(shù)主要包括上升時間、調(diào)整時間、穩(wěn)態(tài)值及超調(diào)量。根據(jù)設(shè)置的控制系統(tǒng),在PID參數(shù)調(diào)節(jié)過程中,實時顯示動態(tài)性能參數(shù),如圖5 所示;對應(yīng)的單位階躍響應(yīng)曲線如圖6 所示。主要實現(xiàn)代碼如下:
%獲取PID 控制傳遞函數(shù)
syspid=tf([kd kp ki],[1 0]);
sys1=sys*syspid;
%獲取PID 控制反饋系統(tǒng)
sys2=feedback(sys1,1);
%繪制單位階躍響應(yīng)曲線
step(sys2)
[y,t]=step(sys2);
[max_y,k]=max(y);
tp=t(k);
%穩(wěn)態(tài)值
C=dcgain(sys2);
set(handles.editss,'string',num2str(C));
max_overshoot=100*(max_y-C)/C;
set(handles.editos,'string',num2str(max_overshoot));
%超調(diào)量
r1=1;
while (y(r1)<0.1*C)
r1=r1+1;
end
r2=1;
while (y(r2)<0.9*C)
r2=r2+1;
end
tr=t(r2)-t(r1)%上升時間
set(handles.editrt,'string',num2str(tr));
s=length(t);
while y(s)>0.98*C&&y(s)<1.02*C
s=s-1;
end
ts=t(s)%調(diào)整時間
set(handles.editst,'string',num2str(ts));
圖6 PID 控制單位階躍響應(yīng)曲線
通過MATALB GUI 設(shè)計實現(xiàn)的PID 控制仿真系統(tǒng),具有系統(tǒng)參數(shù)設(shè)置方式多樣、PID 參數(shù)調(diào)節(jié)靈活、能動態(tài)顯示性能參數(shù)和階躍響應(yīng)曲線的特點。該仿真系統(tǒng)界面簡潔、操作方便,可用于“自動控制原理”課程的教學(xué)和實驗中,從而幫助學(xué)生加深理解PID 控制的工作原理和PID 參數(shù)對系統(tǒng)動態(tài)性能參數(shù)的影響,培養(yǎng)學(xué)生的研究能力和實踐能力。