大作业(二)
凸轮机构设计
(题号:_________)
班级:________________________ 学号:________________________ 姓名:________________________ 同组其他人员:________________________ 完成日期:________________________
凸轮机构大作业题目
目录
1、题目及原始数据;
2、推杆的运动规律及凸轮廓线方程;
3、计算程序框图
4、计算程序;
5、计算结果及分析;
6、凸轮机构图(包括推杆及凸轮理论和实际廓
线,并标出有关尺寸及计算结果
7、体会及建议
8、参考书
利用计算机辅助设计完成下列偏置式直动滚子推杆盘形凸轮机构(推杆的移动副导路位于凸轮盘回转中心的右侧)或摆动滚子推杆盘形凸轮机构的设计,设计已知数据如下表所示,机构中凸轮沿着逆时针方向做匀速转动。
表1 两种凸轮机构的从动件运动规律
直动推杆组题号推程运动规律回程运动规律
5-B 等加速等减速运动五次多项式运动表2 两种凸轮机构的推杆在近休、推程、远休及
回程阶段的凸轮转角
题号近休凸轮转角推程凸轮转角远休凸轮转角回程凸轮转角
B 0゜~45゜45゜~225゜225゜~270゜270゜~360゜
表3 偏置直动滚子推杆盘形凸轮机构的已知参数
题号初选基圆半
径r0/mm 偏距e/mm 滚子半径
r t/mm
推杆行程
h/mm
许用压力角许用最小曲率
半径[ρamin]
[α
1
] [α
2
]
B 20 +10 15 35 30゜ 75゜ 0.3r t
要求:每两人一组,每组中至少打印出一份源程序。每人都要打印:原始数据;凸轮理论轮廓曲线和实际轮廓曲线的坐标值;推程和回程的最大压力角,以及出现最大压力角时凸轮相应的转角,凸轮实际轮廓曲线的最小曲率半径,以及相应的凸轮转角;凸轮的基圆半径。整个设计过程所选取的计算点数N=72~120。利用计算机绘出凸轮的理论轮廓曲线和实际轮廓曲线。
二、推杆运动规律及凸轮轮廓方程
推程: 等加速 2
20
2/s h δ
δ
=
远休:
s h =
等减速
2
2002()/s h h δδδ
=--
回程 : 五次多项式整理得;
345121212s=h[1-10(()/)+15(()/)6(()/)]o o o δδδδδδδδδδδδ-------
理论轮廓廓线方程
00()sin cos ()cos sin x s s e y s s e δδδδ
=++=+-
工作廓线方程
cos sin t t x x r y y r δδ
=-=-
实际廓线方程
222
2sin (/)/(/)(/)
cos (/)/(/)(/)
dx d dx d dy d dy d dx d dy d θδδδθδδδ=+=-+
'cos 'sin r r x x r y y r θθ
=-=-
三、计算程序框图
|α|>[α1]?
开始
读入:r0,Δr0,r t,h或(φ),e或(l AB、l OA)δ1,δ2,δ3,δ4,[α1],[α2],[ρamin],N
计算:s0
I=1
计算:s,x,y,ds/dδ,dx/dδ,dy/dδ,x′,y′
计算:α
r0= r0+Δr0r0= r0=Δr0
是回程?|α|>[α2]?
选出α1max及相应的凸轮转角选出α2max及相应的凸轮转角
计算:ρ
ρ<0?
|ρ|-r t≥[ρamin]?
计算ρa选出|ρamin|及相应的凸轮转角δamin
I=I+1
I≤N?
打印:x,y,x′,y′,ρamin,δamin,α1max,δ1max,α2max,δ2max,r0,δ,
s
结束
四、计算程序
#include
#include
#include
#define PI 3.141592653
double fact[72][2];
double theory[72][2];
int ang1=180,ang2=225,ang3=315; double h=35, rb=20,b=1;
double A1=30*PI/180, A2=75*PI/180; double P=18.2,e=10;
double So,r=15;
double S(int I)
{
double s;
double A;
double B;
if(I<=ang1/2)
{
A=I*PI/180;
B=ang1*PI/180;
s=2*h*pow(A/B,2);
}
else if((I>ang1/2)&&(I<=ang1))
{
A=I*PI/180;
B=ang1*PI/180;
s=h-2*h*pow((B-A)/B,2);
}
else if(I<=ang2)s=h;
else if(I<=ang3)
{
A=(I-ang2)*PI/180;
B=(ang3-ang2)*PI/180;
s=h*(1-10*pow(A/B,3)+15*pow(A/B,4)-6*pow(A/B,5));
}
else s=0;
return(s);
}
double ds(int Q)
{
double A,B,C;
if(Q<=ang1/2)
{
A=Q*PI/180;
B=ang1*PI/180;
C=4*h*A/(B*B);
}
else if((Q>ang1/2)&&(Q<=ang1))
{
A=Q*PI/180;
B=ang1*PI/180;
C=4*h*(B-A)/(B*B);
}
else if(Q<=ang2) C=0;
else if(Q<=ang3)
{
A=(Q-ang2)*PI/180;
B=(ang3-ang2)*PI/180;
C=h*(-30*A*A/pow(B,3)+60*pow(A,3)/pow(B,4)-30*pow(A,4)/pow(B,5));
}
else C=0;
return C;
}
double dss(int B3)
{
double A,B,C;
if(B3<=ang1/2)
{
A=B3*PI/180;
C=ang1*PI/180;
B=4*h/(C*C);
}
else if(B3>ang1/2&&B3<=ang1)
{
A=B3*PI/180;
C=ang1*PI/180;
B=-4*h/(C*C);
}
else if(B3<=ang2)B=0;
else if(B3<=ang3)
{
A=(B3-ang2)*PI/180;
C=(ang3-ang2)*PI/180;
B=h*(-60*A/pow(C,3)+240*A*A/pow(C,4)-120*A*A*A/pow(C,5));
}
else B=0;
return(B);
}
void xy(int ang)
{
double A,B,C,E,F,dx,dy;
A=ang*PI/180;
B=S(ang);
C=ds(ang);
dx=(So+B)*cos(A)+sin(A)*C-e*sin(A);
dy=-sin(A)*(So+B)+C*cos(A)-e*cos(A);
E=r*dy/sqrt(dx*dx+dy*dy);
F=r*dx/sqrt(dx*dx+dy*dy);
theory[ang/5][0]=(So+B)*sin(A)+e*cos(A);
theory[ang/5][1]=(So+B)*cos(A)-e*sin(A);
fact[ang/5][0]=theory[ang/5][0]-E;
fact[ang/5][1]=theory[ang/5][1]+F;
}
double a(int B1)/*****求解压力角****/
{
double A,B;
A=sqrt((ds(B1)-e)*(ds(B1)-e));
B=S(B1);
return atan(A/(B+So));
}
double p(int B2)
{
double dx,dy,dxx,dyy;
double A,B,C,D,E;
A=B2*PI/180;
B=ds(B2);
C=S(B2);
D=dss(B2);
dx=(So+C)*cos(A)+sin(A)*B-e*sin(A);
dy=-sin(A)*(So+C)+B*cos(A)-e*cos(A);
dxx=-(C+So)*sin(A)+cos(A)*B+D*sin(A)-e*cos(A);
dyy=-cos(A)*(So+C)-B*sin(A)+D*cos(A)-sin(A)*B+e*sin(A);
E=sqrt(pow(dx*dx+dy*dy,3))/sqrt(pow((dx*dyy-dxx*dy),2));
return(E);
}
void main()
{ FILE *fp;
int i;
int k,h,l;
double angle1max=0,angle2max=0,pmin=1000;
if((fp=fopen("sanying","w"))==NULL)
{
printf("Cann't open this file.\n");
exit(0);
}
fprintf(fp,"\n The Kinematic Parameters of Point 4\n");
fprintf(fp," x y x' y' ");
//计算数据并写入文件
for(;i!=360;)
{
rb=rb+b;
So=sqrt(rb*rb-e*e);
for(i=0;i<=ang1;i=i+5)
{
if(a(i)>A1||p(i)
break;
}
if(ang1+5-i)continue;
for(i=ang1+5;i<=ang2;i=i+5)
{
if(p(i)
}
if(ang2+5-i)continue;
for(i=ang2+5;i<=ang3;i=i+5)
{
if(a(i)>A2||p(i)
break;
}
if(ang3+5-i)continue;
for(i=ang3+5;i<360;i=i+5)
{
if(p(i)
break;
}
}
for(i=0;i<360;i=i+5)
{
xy(i);
}
for(i=0;i<=ang1;i=i+5)
{
if(angle1max { angle1max=a(i); k=i; } if(pmin>p(i)) { pmin=p(i); h=i; } } for(i=ang2;i<=ang3;i=i+5) {