基于Matlab/GUI的电动机特性虚拟实验平台开发
2018-05-21高钦和董家臣邵亚军牛海龙陈志翔
高钦和, 董家臣, 邵亚军, 牛海龙, 陈志翔
(火箭军工程大学 二系,西安 710025)
0 引 言
电动机种类繁多,参数变化和动态性能分析复杂,在进行特性分析时,常给电动机设计和科研教学工作带来诸多不便。传统教学方法较难实现灵活设置电动机参数的要求,不易于分析过程的直观表述。
为高效获取对电动机特性的理解,提升教学实践效果,许多科研工作者针对电动机特性设计了虚拟实验平台。[1-3]但这些平台大多只针对一种实验特性,界面的优化也做得不足,缺乏较好的人机交互性。本文基于Matlab/GUI开发了用于电动机特性分析的虚拟实验平台。该平台集成了不同种类电动机的多种实验特性仿真功能,用户在交互界面上进行电动机类型选择、运行参数设置等操作可实现相关特性的Simulink模型调用、初始参数设置、仿真图显示、运行结果输出、特性曲线绘制等功能,使电动机特性分析更加方便高效;对平台界面进行优化,能够实现GUI界面互调、鼠标检测、特性介绍等功能,使得界面实用性更强。
以三相异步电动机能耗制动特性分析实例对虚拟实验平台进行验证,得到了特性曲线和稳态运行值,体现出该平台在电动机特性分析及仿真上具有系统化、便捷化、直观化的优势。结果表明,该平台为电动机学科教学效率的提高带来便捷。
1 平台功能及结构
虚拟实验平台要实现电动机特性分析的多项内容,设计的平台功能如图1所示。
打开平台首先进入类型选择界面,选择电动机类型随后进入次级界面。在该界面中设置了运行参数初始设定模块、Simulink仿真图模块、特性曲线绘制模块、运行稳态值输出模块以及各种功能按钮,用户可查看Simulink图,可修改电动机运行初始参数,可擦除已绘制的运行曲线而后修改初值重新运行,可以打开底层Simulink仿真原模型,直接修改参数。运行流程图如图2所示。
图2 平台运行流程图
虚拟实验平台以Matlab软件[4]为开发工具,依托其强大的科学计算和建模仿真功能,大大提高了电动机特性的分析效率。Matlab R2015b版中提供了丰富实用的用户界面开发工具GUI,操作性强,使用方便。平台采用GUI设计主、次级界面,使用Simulink建模以及程序语言编写M文件等方法开发特性分析的底层模型或程序。以“三相异步电动机能耗制动[5]”为例,详述实验平台的开发过程及功能实现。
2 底层仿真模型搭建
用户通过操作虚拟平台界面,调用底层电动机仿真模型来实现电动机特性的分析。首先搭建电动机特性Simulink模型[6]。
2.1 模型建立
在Matlab R2015b环境下,启动Simulink,对三相异步电动机能耗制动特性进行建模仿真[5]。仿真过程分为制动前、后两个阶段。
(1) 制动前模型。使用Simulink中Simscape下的SimPowerSystems模块库,按图3所示搭建能耗制动前稳态运行模型,命名为“YBnhzd_sim_former”。
图3 电动机能耗制动前仿真模型图
(2) 制动后模型。将图3中的三相交流电源去掉,给定子绕组重新加上直流电源模块和电阻模块,构造新的制动模型如图4所示。将该模型命名为“YBnhzd_sim_latter”。
图4 电动机能耗制动后仿真模型图
2.2 参数设置
为实现与后续GUI的参数传递,模块参数需设为变量。
(1) 模块参数。设置仿真模型中:三相交流电压为U,频率50 Hz;三相异步电动机模块按所提供的选项依次设置为:squirrel-cage,20:110 kW(150HP)400 V 50 Hz 1 487 r/min,Torque Tm,Rotor;常量模块(负载力矩),设为T;直流电源模块,设为E;电阻模块,设为0.5 Ω。
(2) 全局参数。在后续GUI编程时需使用sim函数获取模型“YBnhzd_sim_former”的末状态xFinal,因此在图3仿真模型model configuration Parameters面板的“Load from workspace”选项卡中勾选Initial state,并设为xFinal,以实现制动前、后模型之间的运行状态传递,其他设置均为默认。
3 人机交互界面设计
Matlab提供了GUIDE和底层代码编程两种设计界面的方法。前者提供了用户所需要的控件,通过鼠标拖拽添加到设计界面中,操作方便但在具体设置上灵活性不够;后者通过编写界面的程序代码为GUI控制程序提供框架,所有的程序代码和回调函数都包含在该M文件中,便于使用命令行方式进行界面控件的创建和编辑,能够设计出功能相对复杂的界面,也方便发布程序。本文采用编写底层代码的方式搭建平台界面[8]。
3.1 主界面设计
首先使用figure函数、set函数搭建好基本界面:
h_fig=figure( ‘Name’, ‘电机虚拟实验软件’,…
‘position’, [0.283,0.256,0.469,0.579]);
set(h_fig,‘NumberTitle’, ‘off’, …
‘MenuBar’, ‘none’, ‘unit’, ‘normalized’)
如此设置,可使图形窗口标题为“电机虚拟实验软件”,不显示菜单条,单位标准化,并确定窗口相对于屏幕的大小和位置。
然后添加各类控件设计界面布局并实现相关功能,控件及属性设置见表1(注:调用时,表中的‘Dong’即为主界面的主体程序名)。
表1 主界面控件及相关属性设置
界面中相关功能的实现方法如下:
(1) 鼠标响应。当用户将鼠标移动至电动机按钮上时,为优化显示,并给予一定的提示作用,设计鼠标指针变为手形。使用函数“WindowButtonMotionFcn”,鼠标在窗口上运动的时候就会响应此函数:set(gcf,‘WindowButtonMotionFcn’, @btnmotion)。通过编写回调函数btnmotion,使用get(push1, ‘position’)获得按钮控件的位置,使用setappdata和getappdata函数将按钮位置数据从界面h_fig的property传递至btnmotion函数中,同时使用get(h_fig, ‘CurrentPoint’)获取当前鼠标位置,经if条件语句判断出当前鼠标与按钮相对位置,进而设置鼠标为手的形状或默认形状:set(hObject, ‘Pointer’, ‘hand’(或者‘default’ ))。
(2) 注释信息、设置按钮背景图片。按钮控件的tooltipstring属性可显示鼠标所指按钮的注释信息,‘cdata’属性可设置按钮背景:
pic=imread(‘icon.png’); %读取图片icon的数据矩阵
set(push1,‘tooltipstring’,‘分为他励、并励、串励、…
复励直流电动机’, ‘cdata’,pic); %注释信息、设置按钮背景
(3) listbox设置及关联。使用列表框控件完成电动机选型:listbox=uicontrol(h_fig,‘style’,‘listbox’, ‘string’...)。lisbox1用来实现电动机类型选择,编写的回调函数为“select_callback”;lisbox2实现特性选择,编写的回调函数为“display_callback”;listbox3进行实例描述,无需回调。可在callback中使用switch函数实现各列表框之间的调用:
set(listbox1,‘max’,1,‘min’,0,‘callback’,@select_callback);
functionselect_callback
switch get(listbox1,‘value’)
case 1
set(listbox2,‘string’,‘反接制动|能耗制动|反馈制动’);
…
end
可使用HTML标记语言设置listbox中的选项文本格式:
str=cell(1,2); %定义cell类型的数据矩阵str
str{1}=‘’; %加粗
str{2}=‘
’;%选项文本设为杏色
set(listbox1,‘string’,‘str’);%在listbox中显示选项文本
(4) 主、次级界面的关联。push4为“确定”按钮,在callback中调用property1_callback函数,使用switch函数实现与次级界面的联接,callback中的部分程序如下:
function texing1_callback
switch get(h_listbox1,‘value’)
…
case 2 %选择的是第2种类型电动机
switch get(h_listbox2,‘value’)
case 1%选择的是第1种实验特性
YBnhzd; %调用YBnhzd次级界面
end
最终界面设计效果如图5所示。
3.2 次级界面设计
次级界面主程序命名为YBnhzd,其控件添置与主界面相仿,这里不再赘述。在该界面,主要完成电机初始参数设定、Simulink调用、仿真结果读取、模型图显示及特征曲线绘制功能。
(1) 初始参数设定。使用文本框控件edit。用户输入初始参数,便以字符格式确定该控件的string值。使用global函数声明全局变量,使用str2num函数将字符转换为数据,即可实现与simulink模型的参数传递:
图5 主界面设计效果图
global U;
U=str2num(get(h_edit1,‘string’));
同时在simulink模型中将电压模块的value设为U,即实现模型三相电压的初始设定。
(2) Simulink调用。以“制动前”为例,在按钮控件push的回调函数中,使用sim函数完成对simulink模型的调用:
h_push=uicontrol(h_fig,‘style’,‘push’,‘string’,‘制动前’,…
‘callback’,@sim_callback);
function sim_callback(~,~)
options = simset(‘SrcWorkspace’,‘current’);
%设置simulink使用当前工作空间
[t,x,ira,isa,speed,Te]=sim(‘YBnenghao_sim_former’,…
[],options); %运行仿真,输出相关参量
xFinal=x(end,:); %获取制动前模型的末状态xFinal
save xFinal.matxFinal; %将末状态储存至xFinal.mat,
制动后模型设置初始状态时 … 通过importdata命令可调用end
(3) 仿真结果读取。仿真结束时的运行数据视为稳定值,将之传递至GUI的edit编辑框中:
set(h_edit2,‘string’, speed(end));
(4) 模型图显示。为方便用户操作,将模型图显示至界面中。首先将搭建的模型截图,保存为“能耗制动.jpg”,然后添加坐标轴控件axes,使用imread命令在坐标轴中完成图像显示。
h_axes=axes(‘parent’,h_fig, ‘unit’,‘normalized’,…
‘position’,[0.007,0.439,0.43,0.315]);
Pi=imread(‘能耗制动.jpg’);
image(Pi);
axis off;
(5) 特征曲线绘制。添加8个坐标轴控件axes,分别用以绘制能耗制动前、后的定子电流、转子电流、转速、电磁转矩。将simulink模型中的仿真数据读出,用plot函数在相应坐标轴中完成曲线的绘制。如下:
h_axes1=axes(‘parent’,h_fig,‘unit’,‘normalized’,…
‘position’,[0.56,0.124,0.2,0.15]);
set(h_axes1,‘fontsize’,8,‘XTick’,[],‘YTick’,[]);
plot(h_axes1,t,speed)
ylabel(‘转速[r/min] ’,‘fontsize’,10);
xlabel(‘时间(s)’,‘fontsize’,10);
为在不同初始条件下重新仿真,需增设“清除”按钮,在其callback中使用“delete”命令可删除axes控件。
实现上述5步功能后,对界面颜色、控件位置等继续进行优化,添加适当文字说明,最终设计的次级界面效果如图6所示。
图6 次级界面设计效果图
4 仿真实例测试
分析正常工作在220 V市电、负载力矩为25 N·m的三相异步电动机,在180 V外接电压下的能耗制动特性。
4.1 界面操作测试
(1) 运行主界面程序,依次选择“三相异步电动机”“能耗制动”,阅读下方的特性介绍后,点击“确定”按钮进入次级界面;
(2) 设置初始参数,然后点击 “制动前”按钮,得到正常运行特性曲线和输出数据;再点击“制动后”按钮,得到电动机能耗制动特性曲线和输出数据。
(3) 点击“清除”按钮,擦除所绘曲线,重新设置初始参数后,可再次运行仿真。
(4) 点击“返回”按钮,返回至主界面。
通过操作界面,可快速、直观、便捷地绘制出不同初始条件下的电动机特性运行曲线,还可随时改变电动机运行的初始参数,便于观察比对特性的改变,整个界面具有较好的操作性。
4.2 仿真实用性测试
依照操作步骤运行,获得三相异步电动机能耗制动特性仿真界面,如图7所示。
观察仿真界面,结合显示的稳态数据,可以很清楚地了解:正常运行时,经历大约1.8 s加速后,电动机开始稳定运转,转速达到188.273 r/min,电磁转矩稳定在35.285 9 N·m,此时转子、定子电流分别达到13.789 9 A、45.273 1 A; 在制动7.3 s后,转速降至-0.003 61 r/min,此时电磁转矩为24.9831 N·m,制动后的转子、定子电流分别为3.396 17 A、-337.813 A。同时可以分析出,能耗制动时定子电流很大,这是由于制动电压较高,电动机阻抗小所致,因此采用该种制动方式,必须控制制动时间,防止烧毁电动机。结合所学知识,该制动特性曲线与实际相符。
图7 能耗制动特性仿真界面
5 结 语
以三相异步电动机能耗制动为例,详述了使用Matlab/GUI搭建电动机虚拟实验平台的方法,并通过实例测试验证了人机交互界面各控件的功能以及电动机虚拟实验平台的实用性。结果表明:①使用该电动机虚拟实验平台,可以实现电动机仿真的图形化、特性分析的模块化;②通过改变初始参数可以动态研究参数改变对电动机特性运行的影响,方便直观;③集成了各种类型、多种特性的电动机仿真实验模型,能够系统地进行电动机学仿真实验;④该平台能够实现电动机特性分析的系统化、便捷化、直观化,对于电动机学教学及科研分析有较好的帮助。
参考文献(References):
[1] 童 佳,丁立军.基于Matlab中GUI功能设计电机仿真实验系统[J].中国电力教育,2010(34):160-162.
[2] 韩庆庆,肖乾虎.基于GUI功能设计的电机仿真试验系统[J].水电能源科学,2011,29(1):129-131.
[3] 陈显彪.基于Web的电机仿真试验平台开发.电机与控制应用[J].2013,40(5):10-12.
[4] 陈 杰.Matlab宝典[M].北京:电子工业出版社,2013.
[5] 罗德荣,江岳春.三相异步电动机能耗制动的数值仿真[D].长沙:湖南大学,2002.
[6] 潘晓晟,郝世勇.Matlab电机仿真精华50例[M].北京:电子工业出版社,2007.
[7] 李希林. 三相异步电动机制动方式比较分析[J].机电工程技术,2015, 44(9):41-44.
[8] 罗华飞. Matlab/GUI设计学习手记[M]. 北京:北京航空航天大学出版社,2014.
[9] 张建斌, 赵 静. 基于Matlab-GUI的数值积分界面设计[J]. 实验室研究与探索, 2016, 36(1): 127-131.
[10] 郭 琼. 基于Matlab的Powergui性能在电力工程教学中的应用[J]. 电力系统及自动化学报, 2004, 16(2):80-84.
[11] 马 壮. 基于Matlab的典型二阶RLC振荡电路实验教学仿真[J]. 实验室研究与探索, 2016, 35(10):95-98.
[12] 马 莉. Matlab语言实用教程[M]. 北京:清华大学出版社, 2010.
[13] 林炳强,谢龙汉. Matlab 2015从入门到精通[M]. 北京:人民邮电出版社, 2016.
[14] 袁登科,徐延东.永磁同步电动机变频调速系统及其控制[M]. 北京:机械工业出版社, 2015.
[15] Theodore Wildi.Electrical Machines, Drive, And Power Systems(Six Edition)[M]. Beijing:China Machine Press, 2014.