资源描述
Harbin Institute of Technology
上机电算设计说明书
课程名称: 机械设计
设计题目: V带传动设计
院 系: 机电工程学院
班 级:
设 计 者: pyx
学 号: *******
指导教师:
设计时间: 2015年10月30日
哈尔滨工业大学
目录
1.设计方案 2
1.1设计要求 2
1.2设计思路 2
1.3设计程序框图 2
2.程序源码 4
2.1开始界面 4
2.2设计界面 5
2.3导入表格 18
2.4清除界面 19
3.变量说明 20
4.程序运行结果 21
4.1不同带型不同直径结果 21
4.2 多组可选的值 26
4.3特殊工作情况 27
4.4容错功能 27
5.参考文献 28
1.设计方案
1.1设计要求
(1)程序中的变量名应尽可能与使用教材或标准相一致。
(2)程序中的变量名应给以适当的注释,如名称、单位等,增加程序易读性和易用性。
(3)程序头部应给出程序的适用范围。
(4)程序输出结果应完整给出机械零部件设计需要的几何及结构参数。
1.2设计思路
考虑到设计中需要许多表格数据,所以采用Matlab进行编程,这样的话将书中的表格键入.mat文件中,方便编程计算的时候调用,大大简化了编程的工作量,同时也提高了软件的计算效率。要让软件智能就要让人的参与度越少越好,软件在内部对数据进行处理,只给出一些存在范围的参数供用户选择输入,比如带的型号,基准直径,预估中心距等等。而其余的相关系数在用户输入相关的原始数据之后便通过程序自动确定了。
输入所要设计的V带的原始数据之后,通过查看选型图确定V带的型号,对于不同的型号V带在满足传动比误差以及带速度的条件的前提下,经计算有若干基准直径可供设计选用,或者没有满足条件的,则说明没有符合条件的设计。假设存在符合条件,选择完基准直径,由于预估中心距满足以下的不等式:,由此预估中心距存在一个范围,用户需要自己选择合适的,这一点很好的体现了人机交互,在这之后以用户确定的参数为基准进行后续的计算,并输出最终的设计结果,至此整个设计过程结束。
当然用户可以通过选择不同的基准直径以及输入合理范围内不同的预估中心距来比较设计的结果,最终选择合适的设计方案。
1.3设计程序框图
开始
输入
选择工作机载荷情况,原动机的类型,一天工作时间
输出设计功率
查看带型图,选择带型号,确定相关系数
查看可选值,选择的值
根据的取值范围:,输入的值
输出设计结果:
结束
N
Y
N
Y
Y
N
Y
Y
2.程序源码
本软件是基于Matlab R2014a编制的,总共有4个.m文件,下面是个文件的源代码,及相关的说明。
2.1开始界面
文件名为V_Belt_Design_Welcome.m,该文件为程序的开始界面。
%--------------------------------------------------
%------机械设计电算V带传动设计--开始界面
%--------------------------------------------------
function varargout = V_Belt_Design_Welcome(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @V_Belt_Design_Welcome_OpeningFcn, ...
'gui_OutputFcn', @V_Belt_Design_Welcome_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% 以上为初始化语句,勿修改!
function V_Belt_Design_Welcome_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = V_Belt_Design_Welcome_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function pushbutton1_Callback(hObject, eventdata, handles)
close(V_Belt_Design_Welcome);
run(V_Belt_Design);
function pushbutton2_Callback(hObject, eventdata, handles)
open( 'Readme.html');
2.2设计界面
文件名为V_Belt_Design.m,该文件为程序的设计计算界面。
%--------------------------------------------------
%------机械设计电算V带传动设计--设计界面
%--------------------------------------------------
function varargout = V_Belt_Design(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @V_Belt_Design_OpeningFcn, ...
'gui_OutputFcn', @V_Belt_Design_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% 以上为初始化语句,勿修改!
function V_Belt_Design_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = V_Belt_Design_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
%--------------------------------------------------
%--------------------------------------------------
function PrimeMotor_Callback(hObject, eventdata, handles)
function PrimeMotor_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function WorkingHours_Callback(hObject, eventdata, handles)
function WorkingHours_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
%-------------------设计计算按钮-----------------------
function pushbutton1_Callback(hObject, eventdata, handles)
clc;
Load_Table; %导入相关表格
global Pd;
global dd1;
global dd2;
global a0min;
global a0max;
i=str2double(get(handles.edit3,'String'));%传动比
n1=str2double(get(handles.edit2,'String'));%小带轮转速(r/min)
a0=str2double(get(handles.edit17,'String'));
%--------------------------------------------------
%------------图5.17带型选取表,5.1查m(kg/m)---------
%--------------------------------------------------
TYPE=get(handles.BeltType,'value');
switch TYPE
case 2
BeltType=2;%'Z';
m=0.06;%质量
ddMIN=dd_for_Z;%重新统一命名
rang_dd=length(ddMIN);%可供选择直径的数目
case 3
BeltType=3;%'A';
m=0.1;
ddMIN=dd_for_A;
rang_dd=length(ddMIN);
case 4
BeltType=4;%'B';
m=0.17;
ddMIN=dd_for_B;
rang_dd=length(ddMIN)-3;%去掉表格中的0
case 5
BeltType=5;%'C';
m=0.3;
ddMIN=dd_for_C;
rang_dd=length(ddMIN)-7;
case 6
BeltType=6;%'D';
m=0.6;
ddMIN=dd_for_D;
rang_dd=length(ddMIN)-10;
case 7
BeltType=7;%'E';
m=0.9;
ddMIN=dd_for_E;
rang_dd=length(ddMIN)-13;
otherwise
errordlg(' 请查图选择带型','错误提示');
end
%--------------------------------------------------
%--------------表5.4带轮基准直径的确定--------------
%--------------------------------------------------
num_of_dd1=0;
dd_choice=Table5_4P0(:,1);%将表5.4中的dd作为供选择的基准直径dd2
for index_for_dd=1:1:rang_dd
dd2_temp=i*ddMIN(index_for_dd);
delta_dd2=abs(dd_choice-dd2_temp);
[dd2_m,index_dd2]=min(delta_dd2);
dd2_middle=dd_choice(index_dd2);%dd2_middle为选择dd2的一个国标中间变量
error=abs(((dd2_middle-dd2_temp)/ddMIN(index_for_dd))/i);%误差
if (error<=0.05)
num_of_dd1=num_of_dd1+1;
dd1(num_of_dd1)=ddMIN(index_for_dd);
dd2(num_of_dd1)=dd2_middle;
end
end
%为用户提供可选择的值
dd1=num2str(dd1');
set(handles.dd1_user_selection,'string',dd1);
%由用户选择的dd1的值计算dd2
user_selection_value=get(handles.dd1_user_selection,'value');
dd1=str2num(dd1);
dd1=dd1(user_selection_value)
dd2=dd2(user_selection_value)
%容错性,提示没有符合设计者要求dd1
if num_of_dd1==0&&index_for_dd==rang_dd
errordlg(' 没有满足设计要求dd1','错误提示');
str_0='没有满足设计要求dd1'
set(handles.dd1_user_selection,'String',str_0);%避免出现不符合要求的dd1
end
%--------------------------------------------------
%-----------------速度验算-------------------------
%--------------------------------------------------
V=(pi*dd1*n1)/60000;
VMAX=25;
if V>= VMAX
Clear_All;
errordlg(' 带速不符合要求,请重新输入','错误提示');
end
%判断用户是否已经输入a0
if (a0==0||a0<a0min||a0>a0max)&&user_selection_value~=1
errordlg(' 请输入正确的a0','错误提示');
end
%由表5.2选择基准长度Ld
LdBasic=2*a0+pi*(dd1+dd2)/2+(dd2-dd1)^2/(4*a0);
delta_Ld=abs(Table5_2KL(:,1)-LdBasic);
[Ld_m,index_Ld]=min(delta_Ld);
Ld=Table5_2KL(index_Ld,1);
a=a0+(Ld-LdBasic)/2;%实际中心距
%小轮包角计算(度)
ALF1=180-((dd2-dd1)/a)*57.3;
%--------------------------------------------------
%-------------------V带根数确定---------------------
%--------------------------------------------------
Kb=Table5_5Kb(BeltType);
if i>=1 && i<1.02
i_serial=1;
else if i>=1.02 &&i<1.05
i_serial=2;
else if i>=1.05 && i<1.09
i_serial=3;
else if i>=1.09 && i<1.13
i_serial=4;
else if i>=1.13 && i<1.19
i_serial=5;
else if i>=1.19 && i<1.25
i_serial=6;
else if i>=1.25 && i<1.35
i_serial=7;
else if i>=1.35 && i<1.52
i_serial=8;
else if i>=1.52 && i<2
i_serial=9;
else
i_serial=10;
end
end
end
end
end
end
end
end
end
%由大作业指导书P39表5.6计算P0
K1=Table_P0factor(1,BeltType-1);
K2=Table_P0factor(2,BeltType-1);
K3=Table_P0factor(3,BeltType-1);
P0=(K1*V^(-0.09)-K2/dd1-K3*V^2)*V;
Kb=Table5_5Kb(BeltType);%由表5.5查得
Ki=Table5_6Ki(i_serial);%由表5.6查得
DIFP0=Kb*n1*(1-1/Ki);%功率增量
%由表5.9确定包角修正系数KALF
delta_ALF1=abs(Table5_9Kalpha(1,:)-ALF1);
[ALF1_m,index_ALF1]=min(delta_ALF1);
KALF=Table5_9Kalpha(2,index_ALF1);
%由表5.2确定长度系KL
Ld_row=Table5_2KL(:,1);
Ld_serial=find(Ld_row==Ld);
KL=Table5_2KL(Ld_serial,BeltType+1);%暂不考虑Y型带
%计算带的根数
Z=round(Pd/((P0+DIFP0)*KALF*KL))
%--------------------------------------------------
%----------初拉力的计算,作用在轴上的力计算-----------
%--------------------------------------------------
F0=500*Pd*(2.5-KALF)/(Z*V*KALF)+m*V^2;
FQ=2*Z*F0*sin(ALF1*pi/360);%ALF1得先转成弧度制
%--------------------------------------------------
%------------------数据输出------------------------
%--------------------------------------------------
Pdstr=num2str(Pd);
dd1str=num2str(dd1);
dd2str=num2str(dd2);
Ldstr=num2str(Ld);
astr=num2str(a);
ALF1str=num2str(ALF1);
Zstr=num2str(Z);
F0str=num2str(F0);
FQstr=num2str(FQ);
set(handles.edit4,'String',Pdstr);
set(handles.edit5,'String',dd1str);
set(handles.edit6,'String',dd2str);
set(handles.edit7,'String',Ldstr);
set(handles.edit8,'String',astr);
set(handles.edit9,'String',ALF1str);
set(handles.edit10,'String',Zstr);
set(handles.edit11,'String',F0str);
set(handles.edit12,'String',FQstr);
%--------------------------------------------------
%--------选择工作机,表5.7工作情况系数KA的确定-----
%--------------------------------------------------
function LoadChoose_SelectionChangeFcn(hObject, eventdata, handles)
global loading;
loading=0;
Load_State=get(eventdata.NewValue,'Tag');
switch Load_State
case 'steady'%载荷平稳
loading=1;
set(handles.WokingExample,'String','液体搅拌机;离心式水泵;通风机和鼓风机(P≤7.5kW);离心式压缩机;轻型输送机');
case 'smallchange'%载荷变动小
loading=2;
set(handles.WokingExample,'String','带式运输机;发电机;旋转式水泵;金属切削机床;剪床;压力机;印刷机;振动筛通风机(≥7.5kW)');
case 'bigchange'%载荷变动较大
loading=3;
set(handles.WokingExample,'String','螺旋式运输机;斗式提升机;往复式水泵和压缩机;锻锤;磨粉机;锯木机和木工机械;纺织机械');
case 'superchange'%载荷变动很大
loading=4;
set(handles.WokingExample,'String','破碎机(旋转式、鄂式等);球磨机;棒磨机;起重机;挖掘机;橡胶辊压机');
otherwise
errordlg(' 请选择工作机工作情况','错误提示');
end
function pushbutton2_Callback(hObject, eventdata, handles)
global loading;
global Pd;
Load_Table;
P=str2double(get(handles.edit1,'String'));%额定功率(kW)
%--------------------------------------------------
%-----------表5.7工作情况系数KA的确定---------------
%---------------设计功率的确定----------------------
%--------------------------------------------------
%选择一天工作时间
Hours=get(handles.WorkingHours,'value');
switch Hours
case 2
TimeLength=1;% <10
case 3
TimeLength=2;% 10~16
case 4
TimeLength=3;% >16
otherwise
errordlg(' 请选择一天工作时间','错误提示');
end
%选择原动机工作类型
MotorType=get(handles.PrimeMotor,'value');
switch MotorType %表5.7工作情况系数KA的确定
case 2
KA=Table5_7KA(loading,TimeLength);
case 3
KA=Table5_7KA(loading,TimeLength+3);
otherwise
errordlg(' 请选择原动机工作类型','错误提示');
end
%反复启动、正反转频繁、工作条件恶劣
if get(handles.special_situation,'Value')==1
KA=1.1*KA;
End
%设计功率确定
Pd=KA*P;
Pdstr=num2str(Pd);
set(handles.edit4,'String',Pdstr); %输出设计功率
V_type=imread('V_Type.jpg');
axes(handles.axes1);
imshow(V_type); %选型图显示
%--------------------------------------------------
%-------------------V带中心距和长度确定------------
%--------------------------------------------------
function dd1_user_selection_Callback(hObject, eventdata, handles)
global dd1;
global dd2;
global a0min;
global a0max;
a0min=0.7*(dd1+dd2);
a0max=2*(dd1+dd2);
a0minstr=num2str(a0min);
a0maxstr=num2str(a0max);
set(handles.edit15,'String',a0minstr);
set(handles.edit16,'String',a0maxstr);
user_selection_value=get(handles.dd1_user_selection,'value')
pushbtstr1='查看设计值';
if user_selection_value~=1
set(handles.pushbutton1,'String',pushbtstr1);
end
function BeltType_Callback(hObject, eventdata, handles)
TYPE=get(handles.BeltType,'value')
pushbtstr='查看dd1的值';
if TYPE~=1
set(handles.pushbutton1,'String',pushbtstr);
end
function pushbutton3_Callback(hObject, eventdata, handles)
Clear_All; %清除界面
function pushbutton4_Callback(hObject, eventdata, handles)
%跳转至开始界面
close(V_Belt_Design);
run(V_Belt_Design_Welcome);
%--------------------------------------------------
%-------------------相关控件的库函数---------------
%--------------------------------------------------
function BeltType_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit1_Callback(hObject, eventdata, handles)
function edit1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit2_Callback(hObject, eventdata, handles)
function edit2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit3_Callback(hObject, eventdata, handles)
function edit3_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit4_Callback(hObject, eventdata, handles)
function edit4_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit5_Callback(hObject, eventdata, handles)
function edit5_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObj
展开阅读全文