基于MATLAB GUI 的PID 控制仿真系统设计
2020-09-29陈梅,王健
陈 梅,王 健
(1. 曲阜师范大学 工学院,山东 日照 276826;2. 山东水利职业学院 经济管理系,山东 日照 276826)
随着计算机技术的发展,越来越多的教学软件为课堂教学和实验教学带来了便利[1-5]。“自动控制原理”课程是自动化、电子信息工程等专业的核心课程[6-10],PID 控制是自动控制原理课程中的重要内容[11-13]。在PID 控制中,各参数的设置直接决定控制系统的性能优劣。为了更好地理解PID 控制对系统性能参数的影响,通过MATLAB GUI 编程实现了控制系统的3 种获取形式:传递函数、零极点及状态控件形式;PID参数的动态调整;以及对应控制系统的单位阶跃响应曲线和系统性能的参数。该演示系统操作方便,可实时更新数据和图形,有助于理解和分析PID 参数对系统的影响。
1 仿真系统总体设计
基于MATLAB GUI 的PID 控制仿真系统包括了“自动控制原理”课程中PID 控制理论和实验教学的4 个主要模块,即控制系统的获取、PID 参数设置、系统动态性能参数的获取、单位阶跃响应曲线的绘制,该仿真系统的主要模块如图1 所示。
图1 仿真系统主要模块
GUIDE 是MATLAB 图形用户接口开发环境[14-15],它提供了一系列工具用于建立GUI 对象,简化了设计和创建的过程。使用GUI 可以完成GUI 图形界面布局和GUI 编程两项工作,对应2 个扩展名分别为“.fig”和“.m”的文件。“.fig”文件用来向界面中添加所需要的控件并设置其属性;“.m”文件通过Callback 回调函数实现控件操作中的相关功能。GUI 设计流程如图2 所示。
图2 GUI 设计流程
2 仿真系统界面设计
根据设计的功能模块,仿真系统的界面主要功能是控制系统设置、显示所绘制的单位阶跃响应曲线、设置PID 参数及动态性能参数。界面设计包括编辑框、滑动条、单选按钮、按钮及坐标轴框、静态文本框等控件。仿真系统主要包括4 个面板,用于对各功能进行分类管理,具体设计如下:
(1)控制系统设置。3 个单选按钮选择数据的形式,9 个编辑框获取控制系统的参数,2 个按钮分别实现不同形式参数的转换和从工作空间获取数据。
(2)单位阶跃响应曲线绘制。2 个按钮选择开环或闭环响应曲线,1 个坐标轴框用来显示图形。
(3)PID 参数设置。3 个滑动条分别调节KP、KI和KD参数,3 个编辑框设置3 个参数的最大值,3 个编辑框显示3 个参数的当前值,6 个静态文本起到提示作用。
(4)动态性能参数。4 个静态文本和4 个编辑框分别用来提示和显示各性能参数。
3 仿真系统的实现
3.1 控制系统设置
控制系统是通过设置系统参数来获取的。控制系统的主要有传递函数、零极点和状态空间3 种形式,分别对应3 种形式的数据设置,数据设置形式的选择是通过单选按钮实现的。传递函数的参数为分子num和分母den 的系数:零极点形式的参数为比例k、零点z 和极点p;状态空间的参数为A、B、C、D。各种形式的参数是以矩阵的形式给出的,不同形式之间可以相互转换。控制系统的描述可以通过直接输入数据和从工作空间获取数据。
3.1.1 直接输入数据
直接输入数据是在选择对应的编辑框中直接输入需要的参数。点击“形式转换”按钮便可显示其他形式的数据。例如,选中“传递函数”单选按钮,输入分子num 和分母den 的系数,点击“形式转换”,即可显示零极点形式和状态空间的参数。“形式转换”按钮主要通过get 和set 函数获取和设置数据;通过str2num 和num2str 函数实现字符串和矩阵间数据的相互转化;通过tf2zp、tf2ss、zp2tf、zp2ss、ss2tf、ss2zp函数实现传递函数、零极点及状态空间不同形式参数间的转化,主要实现语句如下:
%选中“传递函数”单选按钮
if(get(handles.rbtf,'Value'))
%获取num 和den 参数
num=get(handles.editnum,'string');
num=str2num(num);
den=get(handles.editden,'string');
den=str2num(den);
%转换成零极点形式
[z p k]=tf2zp(num,den);
%转换成状态空间
[A B C D]=tf2ss(num,den);
%设置零极点参数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);
%设置状态空间参数A、B、C、D
….
%选中“零极点形式”单选按钮
elseif(get(handles.rbzpk,'Value'))
…..
%选中“状态空间”单选按钮
else
….
end
3.1.2 从状态空间获取数据
为了方便操作,控制系统的参数也可从工作空间获取。该操作是通过“从工作空间获取”按钮实现。数据的获取主要通过evalin 函数实现,传递函数参数从工作空间获取的语句为:
num=evalin('base','num');
den=evalin('base','den') ;
选择“传递函数”单选按钮,在工作空间中输入num=1, den=[1 3 2],点击“从工作空间获取”按钮,便将数据显示到num 和den 后的编辑框中,点击“形式转换”便可显示其他形式的数据。
3.2 单位阶跃响应曲线的绘制
对于控制系统,通常需要绘制单位阶跃响应曲线来反映系统的性能,包括开环系统和闭环负反馈系统的响应曲线,曲线的绘制通过step 函数实现。
设置完控制系统的参数后,点击“开环绘制”按钮,即可显示开环曲线,如图3 所示。点击“闭环负反馈”按钮,即可显示闭环负反馈响应曲线,如图4所示。
图3 开环曲线
图4 闭环负反馈响应曲线
3.3 PID 参数设置
PID 控制由比例、积分和微分组成,其对应的参数分别为KP、KI和KD,其控制规律传递函数描述为:在PID 控制中,3 个参数的设置直接影响系统的性能参数。对每个参数,先设置最大值即取值范围,通过滑动条拖动调节当前值。KP参数的实现代码如下:
%获取Kp 最大值
mkp=get(handles.editmkp,'string');
mkp=str2num(mkp);
%获取滑动条的位置,确定Kp 的值
kp=get(handles.sliderkp,'value')*mkp;
skp=num2str(kp);
set(handles.editkp,'string',skp);
设置控制系统的传递函数 num 为 50,den 为1,20,100,0。在“PID 参数设置”中,在最大值编辑框中设置KP、KI和KD参数的最大值分别为100、1 和1,通过拖动滑动条可以调节3 个参数,并在当前值编辑框中显示各参数的调节值,如图5 所示。
图5 PID 参数调节
3.4 动态性能参数
控制系统动态性能参数主要包括上升时间、调整时间、稳态值及超调量。根据设置的控制系统,在PID参数调节过程中,实时显示动态性能参数,如图5 所示;对应的单位阶跃响应曲线如图6 所示。主要实现代码如下:
%获取PID 控制传递函数
syspid=tf([kd kp ki],[1 0]);
sys1=sys*syspid;
%获取PID 控制反馈系统
sys2=feedback(sys1,1);
%绘制单位阶跃响应曲线
step(sys2)
[y,t]=step(sys2);
[max_y,k]=max(y);
tp=t(k);
%稳态值
C=dcgain(sys2);
set(handles.editss,'string',num2str(C));
max_overshoot=100*(max_y-C)/C;
set(handles.editos,'string',num2str(max_overshoot));
%超调量
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)%调整时间
set(handles.editst,'string',num2str(ts));
图6 PID 控制单位阶跃响应曲线
4 结语
通过MATALB GUI 设计实现的PID 控制仿真系统,具有系统参数设置方式多样、PID 参数调节灵活、能动态显示性能参数和阶跃响应曲线的特点。该仿真系统界面简洁、操作方便,可用于“自动控制原理”课程的教学和实验中,从而帮助学生加深理解PID 控制的工作原理和PID 参数对系统动态性能参数的影响,培养学生的研究能力和实践能力。