圆柱分度凸轮机构设计计算和运动分析.docx
《圆柱分度凸轮机构设计计算和运动分析.docx》由会员分享,可在线阅读,更多相关《圆柱分度凸轮机构设计计算和运动分析.docx(17页珍藏版)》请在冰点文库上搜索。
圆柱分度凸轮机构设计计算和运动分析
%圆柱分度凸轮机构设计计算和运动分析
%函数文件1:
绘制凸轮机构运动曲线(zxjs_ydxt.m)
%函数文件2:
整理圆柱分度凸轮轮廓曲面三维坐标数据(zxjs_3Dzb.m)
disp'用键盘输入已知条件:
'
n=input('凸轮转速(r/min)n=');
disp'*机构中心距C:
凸轮轴线z1到转盘轴线z2的距离'
C=input('机构中心距(mm)C=');
disp'*机构基距A:
凸轮轴线z1到转盘基准端面O2x2y2的距离'
A=input('机构基距(mm)A=');
disp'*选择凸轮头数H=1、2、3、4:
'
H=input('凸轮头数H=');
disp'*选择凸轮分度期转角theta_f=120~240度:
'
theta_f=input('凸轮分度期转角(度)theta_f=');
disp'*选择转盘分度数(按照工作机械工位要求)'
I=input('转盘分度数I=');
disp'*选择凸轮分度廓线旋向(左旋L、右旋R):
'
LXX=input('凸轮分度廓线旋向LXX=','s');
%1-圆柱分度凸轮机构运动分析
%凸轮角速度
omega_1=pi*n/30;
%转盘滚子数
z=H*I;
%凸轮停歇期转角
theta_d=360-theta_f;
%转盘分度期转位角
phi_f=360/I;
%机构分度期时间t_f和停歇期时间t_d
hd=pi/180.0;%角度转换为弧度的系数
t_f=theta_f*hd/omega_1;
t_d=theta_d*hd/omega_1;
%机构动停比k和运动系数tau
k=t_f/t_d;
tau=t_f/(t_f+t_d);
%凸轮分度廓线旋向系数
ifLXX=='L'
p=1;
elseifLXX=='R'
p=-1;
end
disp'========圆柱分度凸轮机构基本数据========'
fprintf('凸轮转速n=%3.4fr/min\n',n)
fprintf('机构中心距C=%3.4fmm\n',C)
fprintf('机构基距A=%3.4fmm\n',A)
fprintf('凸轮头数H=%3.0f\n',H)
fprintf('凸轮分度廓线旋向LXX=%s\n',LXX)
fprintf('转盘分度数I=%3.0f\n',I)
fprintf('转盘滚子数z=%3.0f\n',z)
fprintf('凸轮角速度omega_1=%3.4f1/s\n',omega_1)
fprintf('凸轮分度期转角theta_f=%3.4f度\n',theta_f)
fprintf('凸轮停歇期转角theta_d=%3.4f度\n',theta_d)
fprintf('转盘分度期转角phi_f=%3.4f度\n',phi_f)
fprintf('机构分度期时间t_f=%3.4fs\n',t_f)
fprintf('机构停歇期时间t_d=%3.4fs\n',t_d)
fprintf('机构动停比k=%3.4f\n',k)
fprintf('机构运动系数tau=%3.4f\n',tau)
%计算凸轮机构运动参数
bc_theta=1;%转角分度步长1~2度
%转盘分度期采用正弦加速运动规律
i_zxjs=0;
fortheta=0:
bc_theta:
theta_f
i_zxjs=i_zxjs+1;
phi_2=phi_f*hd*(theta/theta_f-sin(2*pi*theta/theta_f)/(2*pi));
omega_2=omega_1*phi_f/theta_f*(1-cos(2*pi*theta/theta_f));
epsilon_2=omega_1^2*2*pi*phi_f/theta_f^2*sin(2*pi*theta/theta_f);
zeta_2=omega_1^3*4*pi^2*phi_f/theta_f^3*cos(2*pi*theta/theta_f);
omega_2_1=omega_2/omega_1;
epsilon_2_1=epsilon_2/omega_1^2;
zxjs(i_zxjs,:
)=[thetaphi_2omega_2epsilon_2zeta_2omega_2_1epsilon_2_1];
end
fprintf('正弦加速运动参数数组行数i_zxjs=%3.0f\n',i_zxjs)
%输出圆柱分度凸轮机构运动参数
['凸轮转角','转盘角位移','角速度','角加速度','跃度','角速度比','角加速度比']
[zxjs(:
1),zxjs(:
2)/hd,zxjs(:
3),zxjs(:
4),zxjs(:
5),zxjs(:
6),zxjs(:
7)]
disp'圆柱分度凸轮机构运动参数的最大值'
Vm=2.00;Am=6.28;Jm=39.5;%正弦加速运动加速运动部分的特征值
omega_2_1_max=Vm*phi_f/theta_f;
omega_2_max=Vm*phi_f/theta_f*omega_1;
epsilon_2_max=Am*phi_f/theta_f^2*omega_1^2;
zeta_2_max=Jm*phi_f/theta_f^3*omega_1^3;
fprintf('最大角速度比omega_2_1_max=%3.4f\n',omega_2_1_max);
fprintf('最大角速度omega_2_max=%3.4f\n',omega_2_max);
fprintf('最大角加速度epsilon_2_max=%3.4f\n',epsilon_2_max);
fprintf('最大跃度zeta_2_max=%3.4f\n',zeta_2_max);
%绘制凸轮机构运动曲线(调用正弦加速绘图M文件:
zxjs_ydxt.m)
zxjs_ydxt(zxjs,hd,theta_f)
%导出fig图形命令:
openfig('YZ200-H1-I16-R_ydxt');
%2-圆柱分度凸轮机构几何尺寸计算
disp'圆柱分度凸轮机构许用压力角一般为30~40度'
alpha_p=input('确定许用压力角(度)alpha_p=');
%转盘节圆半径
Rp_2j=2*C/(1+cos(phi_f*hd/2));%转盘节圆半径计算值
Rp_2=round(Rp_2j+0.5);%对转盘节圆半径计算值四舍五入圆整
%凸轮节圆半径
Rp_1j=Vm*Rp_2*phi_f/theta_f/tan(alpha_p*hd);%凸轮节圆半径计算值
fprintf('凸轮节圆半径计算值Rp_1j=%3.4fmm\n',Rp_1j);
Rp_1=input('确定凸轮节圆半径(mm)Rp_1=');
%转盘滚子中心角
phi_z=360/z;
%转盘滚子半径(fix是朝0方向取整函数)
fprintf('转盘滚子半径最小值Rrmin=%3.4fmm\n',fix(0.4*Rp_2*sin(pi/z)));
fprintf('转盘滚子半径最大值Rrmax=%3.4fmm\n',fix(0.6*Rp_2*sin(pi/z)));
Rr=input('确定滚子半径(mm)Rr=');
%转盘滚子宽度
fprintf('转盘滚子宽度最小值bmin=%3.4fmm\n',fix(Rr));
fprintf('转盘滚子宽度最大值bmax=%3.4fmm\n',fix(1.4*Rr));
b=input('确定滚子宽度(mm)b=');
%转盘滚子与凸轮槽底之间的间隙
fprintf('转盘滚子与凸轮槽底间隙的最小值emin=%3.4fmm\n',fix(0.2*b));
fprintf('转盘滚子与凸轮槽底间隙的最大值emax=%3.4fmm\n',fix(0.4*b));
disp'转盘滚子与凸轮槽底至少取间隙值e=5~10mm'
e=input('确定滚子与凸轮槽底的间隙(mm)e=');
%凸轮定位环面的径向深度
h=b+e;
%凸轮定位环面的外圆直径
Do=2*Rp_1+b;
%凸轮定位环面的内圆直径
Di=Do-2*h;
%凸轮宽度
fprintf('凸轮宽度的最小值Lmin=%3.4fmm\n',fix(2*Rp_2*sin(phi_f*hd/2)));
fprintf('凸轮宽度的最大值Lmax=%3.4fmm\n',fix(2*Rp_2*sin(phi_f*hd/2)+2*Rr));
L=input('确定凸轮宽度(mm)L=');
%转盘的外圆直径
fprintf('转盘外圆直径的最小值D_2min=%3.4fmm\n',2*(Rp_2+Rr));
D_2=input('确定转盘外圆直径(mm)D_2=');
%转盘基准端面到滚子宽度中点的轴向距离
rG=A-Rp_1;
%转盘基准端面到滚子上端面的轴向距离
rO=rG-b/2;
%转盘基准端面到滚子下端面的轴向距离
re=rG+b/2;
%输出圆柱分度凸轮机构几何尺寸计算结果
disp'========圆柱分度凸轮机构几何尺寸========'
fprintf('许用压力角alpha_p=%3.4f度\n',alpha_p);
fprintf('凸轮节圆半径Rp_1=%3.4fmm\n',Rp_1);
fprintf('转盘节圆半径Rp_2=%3.4fmm\n',Rp_2);
fprintf('转盘滚子中心角phi_z=%3.4f度\n',phi_z);
fprintf('滚子半径Rr=%3.4fmm\n',Rr);
fprintf('滚子宽度b=%3.4fmm\n',b);
fprintf('转盘滚子与凸轮槽底间隙e=%3.4fmm\n',e);
fprintf('凸轮定位环面的径向深度h=%3.4fmm\n',h);
fprintf('凸轮定位环面的外圆直径Do=%3.4fmm\n',Do);
fprintf('凸轮定位环面的内圆直径Di=%3.4fmm\n',Di);
fprintf('凸轮宽度L=%3.4fmm\n',L);
fprintf('转盘外圆直径D_2=%3.4fmm\n',D_2);
fprintf('转盘基准端面到滚子上端面的轴向距离rO=%3.4fmm\n',rO);
fprintf('转盘基准端面到滚子宽度中点轴向距离rG=%3.4fmm\n',rG);
fprintf('转盘基准端面到滚子上端面的轴向距离re=%3.4fmm\n',re);
%3-圆柱分度凸轮机构压力角的计算
%1#、2#、3#滚子的起始位置角(单位:
度)
phi0_1=-p*0.5*phi_z;
phi0_2=p*0.5*phi_z;
phi0_3=p*1.5*phi_z;
%计算1#、2#、3#滚子位置角(单位:
度)
phi=zeros(i_zxjs,3);%变量初始化
phi1=phi0_1-p.*zxjs(:
2);%zxjs(:
2)存储转盘角位移phi_2
phi2=phi0_2-p.*zxjs(:
2);
phi3=phi0_3-p.*zxjs(:
2);
phi=[phi1phi2phi3];%行-theta,列-滚子位置角
%转盘节圆半径处的压力角
%机构的角速度比(omega_2/omega_1)—数组zxjs(:
6)
alpha_fz=Rp_2.*zxjs(:
6);%计算压力角的分子数组
alpha_fm_1=C-Rp_2.*cos(phi(:
1));%计算1#滚子压力角的分母数组
alpha_1=atan2(alpha_fz,alpha_fm_1);
alpha_fm_2=C-Rp_2.*cos(phi(:
2));%计算2#滚子压力角的分母数组
alpha_2=atan2(alpha_fz,alpha_fm_2);
alpha_fm_3=C-Rp_2.*cos(phi(:
3));%计算3#滚子压力角的分母数组
alpha_3=atan2(alpha_fz,alpha_fm_3);
%绘制转盘节圆半径处与1#、2#、3#滚子相啮合的压力角变化线图
figure
(2);
subplot(3,1,1);
plot(zxjs(:
1),alpha_1/hd);
title('转盘节圆半径处与1号滚子相啮合的压力角变化线图');
grid;
xlabel('凸轮转角\theta(^。
)');
ylabel('机构压力角\alpha(^。
)');
subplot(3,1,2);
plot(zxjs(:
1),alpha_2/hd)
title('转盘节圆半径处与2号滚子相啮合的压力角变化线图');
grid;
xlabel('凸轮转角\theta(^。
)');
ylabel('机构压力角\alpha(^。
)');
subplot(3,1,3);
plot(zxjs(:
1),alpha_3/hd);
title('转盘节圆半径处与3号滚子相啮合的压力角变化线图');
grid;
xlabel('凸轮转角\theta(^。
)');
ylabel('机构压力角\alpha(^。
)');
%保存的fig图形可以用openfig('YZ200-H1-I16-R_ylj123')命令导出
%转盘节圆半径处与1号滚子相啮合的最大压力角
alpha_1_max=max(alpha_1)/hd;
theta_alpha_1=[zxjs(:
1),alpha_1/hd];%合成凸轮转角和对应压力角数组
theta_1m_xh=find(theta_alpha_1(:
2)==alpha_1_max);%查找最大压力角对应凸轮转角数列的序号
theta_1m=theta_alpha_1(theta_1m_xh,1);
fprintf('转盘节圆半径处与1号滚子相啮合的最大压力角alpha_1_max=%3.4f度\n',alpha_1_max);
fprintf('与最大压力角对应的凸轮转角值theta_1m=%3.4f度\n',theta_1m);
ifalpha_1_max<=alpha_p
disp'*转盘节圆半径处与1号滚子相啮合的最大压力角小于许用压力角'
else
disp'*转盘节圆半径处与1号滚子相啮合的最大压力角大于许用压力角'
end
%转盘节圆半径处与2号滚子相啮合的最大压力角
alpha_2_max=max(alpha_2)/hd;
theta_alpha_2=[zxjs(:
1),alpha_2/hd];
theta_2m_xh=find(theta_alpha_2(:
2)==alpha_2_max);
theta_2m=theta_alpha_2(theta_2m_xh,1);
fprintf('转盘节圆半径处与2号滚子相啮合的最大压力角alpha_2_max=%3.4f度\n',alpha_2_max);
fprintf('与最大压力角对应的凸轮转角值theta_2m=%3.4f度\n',theta_2m);
ifalpha_2_max<=alpha_p
disp'*转盘节圆半径处与2号滚子相啮合的最大压力角小于许用压力角'
else
disp'*转盘节圆半径处与2号滚子相啮合的最大压力角大于许用压力角'
end
%转盘节圆半径处与3号滚子相啮合的最大压力角
alpha_3_max=max(alpha_3)/hd;
theta_alpha_3=[zxjs(:
1),alpha_3/hd];
theta_3m_xh=find(theta_alpha_3(:
2)==alpha_3_max);
theta_3m=theta_alpha_3(theta_3m_xh,1);
fprintf('转盘节圆半径处与3号滚子相啮合的最大压力角alpha_3_max=%3.4f度\n',alpha_3_max);
fprintf('与最大压力角对应的凸轮转角值theta_2m=%3.4f度\n',theta_3m);
ifalpha_3_max<=alpha_p
disp'*转盘节圆半径处与3号滚子相啮合的最大压力角小于许用压力角'
else
disp'*转盘节圆半径处与3号滚子相啮合的最大压力角大于许用压力角'
end
%输出与凸轮转角对应的:
转盘角位移,转盘1#、2#、3#滚子位置角,转盘节圆半径处的压力角(单位:
度)
['凸轮转角','转盘角位移','1#位置角','2#位置角','3#位置角','1#压力角','2#压力角','3#压力角']
[zxjs(:
1),zxjs(:
2)/hd,phi(:
1),phi(:
2),phi(:
3),alpha_1/hd,alpha_2/hd,alpha_3/hd]
%4-圆柱分度凸轮轮廓曲面三维坐标计算
%1)计算滚子圆柱面啮合点的三维坐标值(x2,y2,z2)
bc_r=1;%滚子圆柱面参数r的步长1~2mm
r=rO:
bc_r:
re;%r是滚子圆柱面啮合点到转盘基准面的距离
kr=re-rO+1;%单列r数组的行数
%变量初始化—三维数组(凸轮转角0:
i_zxjs,滚子曲面参数1:
kr,滚子序号1:
3)
%第三维数作为数据平面(plane),存储顺序是:
第1个plane,第2个plane,...
Phi=zeros(i_zxjs,kr,3);x2=zeros(i_zxjs,kr,3);y2=zeros(i_zxjs,kr,3);z2=zeros(i_zxjs,kr,3);
%凸轮转角theta=0~theta_f的每一个分度值,对应一系列滚子圆柱面参数r值(r=rO~re)
%根据凸轮与滚子共轭接触方程式计算啮合角Phi
i=0;
fortheta=0:
bc_theta:
theta_f%外循环变量-凸轮转角分度值
i=i+1;
forj=1:
kr%中循环变量-滚子圆柱面参数
fork=1:
3%内循环变量-1#、2#和3#滚子
%1#、2#和3#滚子的啮合角Phi
Phi(i,j,k)=atan2(p*(Rp_2*(zxjs(j,6)*hd)/((A-r(j))*cos(phi(i,k)*hd))-tan(phi(i,k)*hd)),C);
%滚子圆柱面啮合点的三维坐标值(x2,y2,z2)
x2(i,j,k)=Rp_2+Rr*cos(Phi(i,j,k));
y2(i,j,k)=sin(Phi(i,j,k));
z2(i,j,k)=-r(j);
end
end
end
%2)计算圆柱分度凸轮轮廓曲面三维坐标值(x1,y1,z1)
%变量初始化—三维数组(凸轮转角0:
i_zxjs,滚子曲面参数1:
kr,滚子序号1:
3)
x1=zeros(i_zxjs,kr,3);y1=zeros(i_zxjs,kr,3);z1=zeros(i_zxjs,kr,3);
i=0;
fortheta=0:
bc_theta:
theta_f%外循环变量-凸轮转角分度值
i=i+1;
forj=1:
kr%中循环变量-滚子圆柱面参数
fork=1:
3%内循环变量-1#、2#和3#滚子
%凸轮轮廓曲面三维坐标值(x1,y1,z1)
x1(i,j,k)=(x2(i,j,k)*cos(phi(i,k)*hd)+p*y2(i,j,k)*sin(phi(i,k)*hd)-C)*cos(theta*hd)+(z2(i,j,k)+A)*sin(theta*hd);
y1(i,j,k)=(-x2(i,j,k)*cos(phi(i,k)*hd)-p*y2(i,j,k)*sin(phi(i,k)*hd)+C)*cos(theta*hd)+(z2(i,j,k)+A)*sin(theta*hd);
z1(i,j,k)=p*x2(i,j,k)*sin(phi(i,k)*hd)-y2(i,j,k)*cos(phi(i,k)*hd);
end
end
end
'========输出圆柱分度凸轮轮廓曲面三维坐标值(x1,y1,z1)========'
theta=input('*选择需要输出轮廓曲面三维坐标值对应的凸轮转角(度)theta=');
['滚子参数','1#滚子对应的凸轮廓面三维坐标','2#滚子对应的凸轮廓面三维坐标','3#滚子对应的凸轮廓面三维坐标']
['r','1#-x1','1#-y1','1#-z1','2#-x1','2#-y1','2#-z1','3#-x1','3#-y1','3#-z1']
[r',x1(theta,:
1)',y1(theta,:
1)',z1(theta,:
1)',x1(theta,:
2)',y1(theta,:
2)',z1(theta,:
2)',x1(theta,:
3)',y1(theta,:
3)',z1(theta,:
3)']
%3)将圆柱分度凸轮轮廓曲面三维坐标存储为mat数据文件(在work工作空间)
xyz1_1=[x1(:
:
1),y1(:
:
1),z1(:
:
1)];%1#滚子对应的凸轮廓面三维坐标
xyz1_2=[x1(:
:
2),y1(:
:
2),z1(:
:
2)];%2#滚子对应的凸轮廓面三维坐标
xyz1_3=[x1(:
:
3),y1(:
:
3),z1(:
:
3)];%3#滚子对应的凸轮廓面三维坐标
%存储命令save()格式如下(数据文件名和数组名需要用单撇号括起来,中间用逗号分隔)
save('YZ200-H1-I16-R_三维坐标','xyz1_1','xyz1_2','xyz1_3');
%导入mat数据文件命令:
load('YZ200-H1-I16-R_三维坐标','xyz1_1','xyz1_2','xyz1_3');
%在命令窗口:
File/ImportData...,打开数据输入导向窗口ImportWizard中显示数据文件的三个数组xyz1_1,xyz1