基于三种电机的matlabGUI设计(直流、异步、同步)

可能电气工程及其自动化电机方向的同学在matlab课设时会遇到这样的问题:基于电机去设计一个GUI界面。有时候会感觉无从下手,就是这种电机从哪分析。下面我会分享我的成果,完全原创,希望能帮助到大家。由于第一次写博客,若是有表达不清楚的地方,请留言指出,我会尽快补充。

题目1(直流电机部分)

一台直流并励电动机的UN=220V,PN=22KW,IN=115A,nN=1500r/min,电枢回路总电阻Ra=0.18欧,试绘制出此电机的机械特性曲线以及计算下列参数:
求:(1)电动机的输出转矩TN;
(2)额定电流时的电磁转矩Tem;
(3)电机的空载制动转矩To;

题目2(异步电机部分)

一台JO2-52-6型异步电动机,已知部分参数:额定电压U1为380V、定子角接、频率为f1为50Hz、额定输出功率P2为7.5KW、额定功率因数cosn为0.824、定子电阻R1为1.9欧、转子折算电流I2为8A、转子折算电阻R2为1.64欧,附加损耗为37.5w。又经实验得到各个转速下不同扭矩对应的电机效率表,和电机的外特性表。
求:(1)此电机的各有用功率:输入功率P1、电磁功率Pe、总机械功率Pmec。
(2)此电机的各种损耗:定子铜耗pcu1、定子铁耗pfe、转子铜耗pcu2、转子机械损耗pmec。
(3)根据实验测得的转速-转矩-效率表和外特性数据,绘出此电机的电机效率map图。(实验数据储存在excel文件里)

题目3(同步电机部分)

一台水轮发电机(凸极同步发电机)的PN=50000KW,UN=13800V,标幺值Xd=1,Xq=0.554,额定功率因数cosn=0.8(滞后),Ra约等于0。试求额定负载下发电机的励磁电动势和角,并绘制其V形曲线。

界面设计结果

其实我相信大部分的同学都想设计出属于自己的界面,我这个只是个参考,还是希望同学们自己设计
主界面部分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码

我下面就直接发回调函数的代码了,同学们自己找对应关系,相信GUI有一定基础的的同学可以完成这个任务。然后我会附上非GUI界面设计,就是正常的m文件的代码。顺序为直流,异步,同步

1直流

可编辑文本1-5:
function edit1_Callback(hObject, eventdata, handles)
input=str2num(get(hObject,'String'));
if(isempty(input))
set(hObject,'String','0');
end
guidata(hObject,handles);

计算按钮:
function pushbutton1_Callback(hObject, eventdata, handles)
UN=get(handles.edit1,'String');
PN=get(handles.edit2,'String');
IN=get(handles.edit3,'String');
nN=get(handles.edit4,'String');
Ra=get(handles.edit5,'String');
CEN=(str2num(UN)-str2num(Ra)*str2num(IN))/str2num(nN);%电动势常数乘磁通
CTN=9.55*CEN;%转矩常数乘磁通
TN=(str2num(PN)*1000)/(2*pi*str2num(nN)/60)%输出转矩
Tn=num2str(TN);
set(handles.edit6,'String',Tn);
Tem=CTN*str2num(IN)%电磁转矩
Te=num2str(Tem);
set(handles.edit7,'String',Te);
T0=Tem-TN%空载制动转矩
To=num2str(T0);
set(handles.edit8,'String',To);

绘制按钮:
function pushbutton2_Callback(hObject, eventdata, handles)
axes(handles.axes1);
cla
var=get(handles.popupmenu1,'value');
a=get(handles.edit1,'String');
b=get(handles.edit2,'String');
c=get(handles.edit3,'String');
d=get(handles.edit4,'String');
e=get(handles.edit5,'String');
UN=str2num(a);
PN=str2num(b);
IN=str2num(c);%已知参数
nN=str2num(d);
Ra=str2num(e);
IaN=IN;
CEN=(UN-Ra*IaN)/nN;%电动势常数乘磁通
CTN=9.55*CEN;%转矩常数乘磁通
Ia=0:IaN;
n=UN/CEN-Ra/(CEN)*Ia;
Te=CTN*Ia;
P1=UN*Ia;
T2_N=9550*PN/nN;
if var==2
    plot(Te,n,'rs');
    xlabel('电磁转矩 Te/N.m');
    ylabel('转速n/rpm');
    hold on;
    Rc=0;
for coef=1:-0.25:0.25
    U=UN*coef;
    n=U/CEN-(Ra+Rc)/(CEN*CTN)*Te;
    plot(Te,n,'k-');
    str=strcat('U=',num2str(U),'V');
    s_y=1650*coef;
    text(50,s_y,str);
end
else
    if var==3
   Rc=0;
   n=UN/CEN-(Ra+Rc)/(CEN*CTN)*Te;
   plot(Te,n,'rs');
   xlabel('电磁转矩Te/N.m');
   ylabel('转速n/rpm');
   hold on;
   U=UN;Rc=0.02;
for Rc=0:0.5:1.9
    n=U/CEN-(Ra+Rc)/(CEN*CTN)*Te;
    plot(Te,n,'k-');
    str=strcat('R=',num2str(Rc+Ra),'\Omega');
    s_y=400*(4-Rc*1.8);
    text(120,s_y,str);
end
    end
end


返回菜单按钮:
function pushbutton5_Callback(hObject, eventdata, handles)
close(gcf);%关闭第一个欢迎界面
menu1 % 第二个界面(主界面)————推荐直接输入函数名的这种方式

退出按钮:
function pushbutton4_Callback(hObject, eventdata, handles)
close

2.异步

可编辑文本1-9:
function edit1_Callback(hObject, eventdata, handles)
input=str2num(get(hObject,'String'));
if(isempty(input))
set(hObject,'String','0');
end
guidata(hObject,handles);

计算按钮:
function pushbutton2_Callback(hObject, eventdata, handles)
i1=get(handles.edit1,'String');
u1=get(handles.edit2,'String');
r1=get(handles.edit3,'String');
i2=get(handles.edit4,'String');
r2=get(handles.edit5,'String');
n2=get(handles.edit6,'String');
p2=get(handles.edit7,'String');
cosn=get(handles.edit8,'String');
pad=get(handles.edit9,'String');
p1=3*str2num(i1)*str2num(u1)*str2num(cosn);
P1=num2str(p1);
set(handles.edit10,'String',P1);
pem=3*str2num(i2)^2*str2num(r2)/0.04;
Pem=num2str(pem);
set(handles.edit11,'String',Pem);
pmec=3*str2num(i2)^2*str2num(r2)*24;
Pmec=num2str(pmec);
set(handles.edit13,'String',Pmec);
pcu1=3*str2num(i1)^2*str2num(r1);
Pcu1=num2str(pcu1);
set(handles.edit26,'String',Pcu1);
pcu2=3*str2num(i2)^2*str2num(r2);
Pcu2=num2str(pcu2);
set(handles.edit27,'String',Pcu2);
pfe=p1-pcu1-pem;
Pfe=num2str(pfe);
set(handles.edit28,'String',Pfe);
pme=pmec-str2num(p2)-str2num(pad);
Pme=num2str(pme);
set(handles.edit29,'String',Pme);

绘制按钮:
function pushbutton3_Callback(hObject, eventdata, handles)
axes(handles.axes2);
cla
var=get(handles.popupmenu1,'value');
if var==2
speed=xlsread('map','sheet1','B2:B16');%读取命名为map的excel数据(sheet1中)
torque=xlsread('map','sheet1','C2:C16');%读取电机外特性(转速,转矩)的数据
[SPEED,TORQUE]=meshgrid(0:500:7500,0:1:100);%绘图背景的m*n矩阵网格
n0=0:500:7500;%限定插值范围
TN=interp1(speed,torque,n0);%将speed,torque按照n0对应插值
p=repmat(TN,101,1);%为筛选采样点区域,将TN数据重排为m*n矩阵
ii=find(TORQUE>p);%搜索采样区域外数据位置
TORQUE(ii)=NaN;%将纵坐标采样区域外网格定义为空值,为了图形的美观
SPEED(ii)=NaN;%将横坐标采样区域外网格定义为空值
plot(n0,TN,'b--','linewidth',1.5);%绘制拟合的转矩曲线
hold on
speed_L=xlsread('map','sheet2','B2:B168');%读取效率试验数据:转速
torque_L=xlsread('map','sheet2','C2:C168');%转矩
efficiency_L=xlsread('map','sheet2','D2:D168');%效率
value_eff=(60:1:100);%限定效率等值曲线显示条数
EFFICIENCY=griddata(speed_L,torque_L,efficiency_L,SPEED,TORQUE,'v4');
%将speed_L,torque_L,efficiency_L三维数据对应二维SPEED,TORQUE插值
[C,h]=contour(SPEED,TORQUE,EFFICIENCY,value_eff);%生成等值曲线图
clabel(C,h,value_eff);%为等值曲线图添加标签
hold on
xlabel('转速/(rpm)');%为x轴加标签
ylabel('转矩/Nm');%为y轴加标签
title('电机map图');%为等值图加标题
legend('外特性曲线','效率等值线');%为曲线加标签
else
  if var==3
speed=xlsread('map','sheet1','B2:B16');%读取命名为map的excel数据(sheet1中)
torque=xlsread('map','sheet1','C2:C16');%读取电机外特性(转速,转矩)的数据
[SPEED,TORQUE]=meshgrid(0:500:7500,0:1:100);%绘图背景的m*n矩阵网格
n0=0:500:7500;%限定插值范围
TN=interp1(speed,torque,n0);%将speed,torque按照n0对应插值
p=repmat(TN,101,1);%为筛选采样点区域,将TN数据重排为m*n矩阵
ii=find(TORQUE>p);%搜索采样区域外数据位置
TORQUE(ii)=NaN;%将纵坐标采样区域外网格定义为空值,为了图形的美观
SPEED(ii)=NaN;%将横坐标采样区域外网格定义为空值
plot(n0,TN,'b--','linewidth',1.5);%绘制拟合的转矩曲线
hold on
speed_L=xlsread('map','sheet2','B2:B168');%读取效率试验数据:转速
torque_L=xlsread('map','sheet2','C2:C168');%转矩
efficiency_L=xlsread('map','sheet2','D2:D168');%效率
value_eff=(60:0.5:100);%限定效率等值曲线显示条数
EFFICIENCY=griddata(speed_L,torque_L,efficiency_L,SPEED,TORQUE,'v4');
%将speed_L,torque_L,efficiency_L三维数据对应二维SPEED,TORQUE插值
[C,h]=contour(SPEED,TORQUE,EFFICIENCY,value_eff);%生成等值曲线图
clabel(C,h,value_eff);%为等值曲线图添加标签
hold on
xlabel('转速/(rpm)');%为x轴加标签
ylabel('转矩/Nm');%为y轴加标签
title('电机map图');%为等值图加标题
legend('外特性曲线','效率等值线');%为曲线加标签
  end
end

返回菜单按钮:
function pushbutton5_Callback(hObject, eventdata, handles)
close(gcf);%关闭第一个欢迎界面
menu1 % 第二个界面(主界面)————推荐直接输入函数名的这种方式
退出按钮:
function pushbutton4_Callback(hObject, eventdata, handles)
close

3.同步

可编辑文本1-5:
function edit1_Callback(hObject, eventdata, handles)
input=str2num(get(hObject,'String'));
if(isempty(input))
set(hObject,'String','0');
end
guidata(hObject,handles);

绘制按钮:
function pushbutton2_Callback(hObject, eventdata, handles)
axes(handles.axes1);
cla
a=get(handles.edit1,'String');
b=get(handles.edit2,'String');
c=get(handles.edit3,'String');
d=get(handles.edit4,'String');
e=get(handles.edit5,'String');
Xd=str2num(a); %定义直轴同步电抗
Xq=str2num(b); %定义交轴同步电抗
PN=str2num(c);%定义额定输出功率
UN=str2num(d);%定义额定电压
cosN=str2num(e);%定义额定功率因数
%凸极同步发电机的V形曲线的绘制
P2=[0.2,0.5,0.8]; %给输出功率P2的标幺值赋值
fi=[linspace(-pi/3,pi/3,100);linspace(-pi/3,pi/3,100);linspace(-pi/3,pi/3,100)];
%确定计算V型曲线的功率因数角范围
for i=1:1:3
    X=cos(fi(i,:)); %采用数组的寻访寻访数组fi的第i行的所有元素
    I(i,:)=P2(i)./(X*(3^(0.5))); %求I的标幺值(采用数组算法)
    Y=sin(fi(i,:))+I(i,:)*Xq;
    Ksai=atan(Y./X); %求内功率因素角
    Theta=Ksai-fi(i,:);%求功角
    E0(i,:)=cos(Theta)+I(i,:).*sin(Ksai)*Xd; %求E0的标幺值
    hold on
end
plot(E0(1,:),I(1,:),'b-',E0(2,:),I(2,:),'b:',E0(3,:),I(3,:),'r-');
xlabel('E0 V');
ylabel('i A');
%P2=0 Ksai=fi=pi/2
fi(4,:)=linspace(pi/2,pi/2,100);
E0(4,:)=linspace(0.4,2,100);
I(4,:)=abs(E0(4,:)-1)./Xd;
plot(E0(4,:),I(4,:),'r:')
title('同步发电机V形图');%加标题
legend('P2=0.2','P2=0.5','P2=0.8','P2=0')
grid on %打开所有网格


计算按钮:
function pushbutton1_Callback(hObject, eventdata, handles)
Xd=get(handles.edit1,'String');
Xq=get(handles.edit2,'String');
PN=get(handles.edit3,'String');
UN=get(handles.edit4,'String');
cosN=get(handles.edit5,'String');
ksai=atan((str2num(Xq)+0.6)/0.8);
pusai=atan((str2num(Xq)+0.6)/0.8)*180/pi;
o=ksai-acos(0.8);
Eo=(1*cos(o)+1*1*sin(ksai))*str2num(UN)/sqrt(3);
a=num2str(pusai);
set(handles.edit6,'String',a);
b=num2str(Eo);
set(handles.edit7,'String',b);


返回菜单按钮:
function pushbutton5_Callback(hObject, eventdata, handles)
close(gcf);%关闭第一个欢迎界面
menu1 % 第二个界面(主界面)————推荐直接输入函数名的这种方式


退出按钮:
function pushbutton4_Callback(hObject, eventdata, handles)
close

下面是正常的m文件,直接复制就可以运行的

clear;
clc;
%并励直流电动机的机械特性曲线及转矩计算
UN=220;PN=22;IN=115;%已知参数
nN=1500;Ra=0.18;
IaN=IN;
CEN=(UN-Ra*IaN)/nN;%电动势常数乘磁通
CTN=9.55*CEN;%转矩常数乘磁通
format compact;
TN=(PN*1000)/(2*pi*nN/60)%输出转矩
Tem=CTN*IaN%电磁转矩
T0=Tem-TN%空载制动转矩
Ia=0:IaN;
n=UN/CEN-Ra/(CEN)*Ia;
Te=CTN*Ia;
P1=UN*Ia;
T2_N=9550*PN/nN;
%计算转速和转矩的关系,不同的电压下的机械特性
figure(1);
plot(Te,n,'rs');
xlabel('电磁转矩 Te/N.m');
ylabel('转速n/rpm');
hold on;
Rc=0;
for coef=1:-0.25:0.25
    U=UN*coef;
    n=U/CEN-(Ra+Rc)/(CEN*CTN)*Te;
    plot(Te,n,'k-');
    str=strcat('U=',num2str(U),'V');
    s_y=1650*coef;
    text(50,s_y,str);
end
%计算转速和转矩的关系,不同的电阻下的机械特性
figure(2);
n=UN/CEN-(Ra+Rc)/(CEN*CTN)*Te;
plot(Te,n,'rs');
xlabel('电磁转矩Te/N.m');
ylabel('转速n/rpm');
hold on;
U=UN;Rc=0.02;
for Rc=0:0.5:1.9
    n=U/CEN-(Ra+Rc)/(CEN*CTN)*Te;
    plot(Te,n,'k-');
    str=strcat('R=',num2str(Rc+Ra),'\Omega');
    s_y=400*(4-Rc*1.8);
    text(120,s_y,str);
end
clear;
clc;
%异步电机的功率及损耗计算及电机map图的绘制
I1=9.16;     %定子电流
U1=380;      %定子电压
P2=7500;     %额定输出功率
COSn=0.824;  %额定功率因数
n2=960;      %额定转速
R1=1.9;      %定子电阻
I2=8;        %转子电流折算值
R2=1.64;     %转子电阻折算值
pad=37.5;    %固定附加损耗
format compact;%缩短行距,节省空间
s=(1000-n2)/1000;%计算转差率
P1=3*I1*U1*COSn  %计算输入功率
Pem=3*I2^2*(R2/s) %计算电磁功率
Pmec=3*I2^2*(1-s)/s*R2%计算总机械功率
pcu1=3*I1^2*R1   %计算定子铜耗
pfe=P1-Pem-pcu1  %计算定子铁耗
pcu2=3*I2^2*R2   %计算转子铜耗
pmec=Pmec-P2-pad %计算机械损耗
%异步电机效率map图的绘制
speed=xlsread('map','sheet1','B2:B16');%读取命名为map的excel数据(sheet1中)
torque=xlsread('map','sheet1','C2:C16');%读取电机外特性(转速,转矩)的数据
[SPEED,TORQUE]=meshgrid(0:500:7500,0:1:100);%绘图背景的m*n矩阵网格
n0=0:500:7500;%限定插值范围
TN=interp1(speed,torque,n0);%将speed,torque按照n0对应插值
p=repmat(TN,101,1);%为筛选采样点区域,将TN数据重排为m*n矩阵
ii=find(TORQUE>p);%搜索采样区域外数据位置
TORQUE(ii)=NaN;%将纵坐标采样区域外网格定义为空值,为了图形的美观
SPEED(ii)=NaN;%将横坐标采样区域外网格定义为空值
plot(n0,TN,'b--','linewidth',1.5);%绘制拟合的转矩曲线
hold on
speed_L=xlsread('map','sheet2','B2:B168');%读取效率试验数据:转速
torque_L=xlsread('map','sheet2','C2:C168');%转矩
efficiency_L=xlsread('map','sheet2','D2:D168');%效率
value_eff=(60:1:100);%限定效率等值曲线显示条数
EFFICIENCY=griddata(speed_L,torque_L,efficiency_L,SPEED,TORQUE,'v4');
%将speed_L,torque_L,efficiency_L三维数据对应二维SPEED,TORQUE插值
[C,h]=contour(SPEED,TORQUE,EFFICIENCY,value_eff);%生成等值曲线图
clabel(C,h,value_eff);%为等值曲线图添加标签
hold on
xlabel('转速/(rpm)');%为x轴加标签
ylabel('转矩/Nm');%为y轴加标签
title('电机map图');%为等值图加标题
legend('外特性曲线','效率等值线');%为曲线加标签
clear;
clc;
%凸极同步发电机的励磁电动势与功角计算和V形曲线的绘制
format compact;
Xd=1; %定义直轴同步电抗
Xq=0.554; %定义交轴同步电抗
PN=50000000;%定义额定输出功率
UN=13800;%定义额定电压
cosN=0.8;%定义额定功率因数
ksai=atan((Xq+0.6)/0.8);
pusai=atan((Xq+0.6)/0.8)*180/pi
o=ksai-acos(0.8);
Eo=(1*cos(o)+1*1*sin(ksai))*UN/sqrt(3)
%凸极同步发电机的V形曲线的绘制
P2=[0.2,0.5,0.8]; %给输出功率P2的标幺值赋值
fi=[linspace(-pi/3,pi/3,100);linspace(-pi/3,pi/3,100);linspace(-pi/3,pi/3,100)];
%确定计算V型曲线的功率因数角范围
for i=1:1:3
    X=cos(fi(i,:)); %采用数组的寻访寻访数组fi的第i行的所有元素
    I(i,:)=P2(i)./(X*(3^(0.5))); %求I的标幺值(采用数组算法)
    Y=sin(fi(i,:))+I(i,:)*Xq;
    Ksai=atan(Y./X); %求内功率因素角
    Theta=Ksai-fi(i,:);%求功角
    E0(i,:)=cos(Theta)+I(i,:).*sin(Ksai)*Xd; %求E0的标幺值
    hold on
end
plot(E0(1,:),I(1,:),'b-',E0(2,:),I(2,:),'b:',E0(3,:),I(3,:),'r-');
%P2=0 Ksai=fi=pi/2
fi(4,:)=linspace(pi/2,pi/2,100);
E0(4,:)=linspace(0.4,2,100);
I(4,:)=abs(E0(4,:)-1)./Xd;
plot(E0(4,:),I(4,:),'r:')
legend('P2=0.2','P2=0.5','P2=0.8','P2=0')
grid on %打开所有网格

结语

总的来说就这些内容,第一次写博客,也不知道会不会有人看,若对你有帮助,请留个言啥的(偷笑)。有不懂的地方也可以留言询问,看到了都会解答。

  • 24
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值