机械原理大作业.docx
《机械原理大作业.docx》由会员分享,可在线阅读,更多相关《机械原理大作业.docx(9页珍藏版)》请在冰豆网上搜索。
机械原理大作业
机械原理大作业
姓名:
学号:
2
班级:
14
偏距e=10mm;基圆半径ro=40mm;滚子半径rr=10mm;推程运动角=150°;远休止角=30°
回程运动角=120°;近休止角=60°
/************凸轮轮廓曲线绘制程序**********/
#include
#include
#include
#defineh20.0
#defineW120
#defineK5
#defineA1150
#defineA2180
#defineA3300
#defineA4360
#defineA5240
#defineX00
#defineY00
#definepi3.14159
#definetpi/180
main()
{FILE*fp;
floate,ro,rr,p,so,dx,dy,st,ct;
floats[200],ds[200],dv[200],da[200],x[200],y[200],xp[200],yp[200];
inti=0,w=0;
e=10;
ro=40;
rr=10;
so=sqrt(ro*ro-e*e);
for(p=0;p<=A4;p+=K)
{if(p<=A1)/*余弦加速度推程段*/
{s[i]=h*(1-cos(pi*p/A1))/2;
ds[i]=h*W*pi*sin(pi*p/A1)/2/A1;
dv[i]=pi*pi*h*W*W*cos(pi*p/A1)/A1/A1/2;
}
if(p>A1&&p<=A2)/*远休止段*/
{s[i]=h;
ds[i]=0;
dv[i]=0;}
if(p>A2&&p<=A5)/*等加速回程段*/
{s[i]=h-2*h*(p-A2)*(p-A2)/(A3-A2)/(A3-A2);
ds[i]=-4*h*W*(p-A2)/(A3-A2)/(A3-A2);
dv[i]=-4*h*W*W/(A3-A2)/(A3-A2);
}
if(p>A5&&p<=A3)/*等减速回程段*/
{s[i]=2*h*(300-p)*(300-p)/(A3-A2)/(A3-A2);
ds[i]=-4*h*W*(300-p)/(A3-A2)/(A3-A2);
dv[i]=4*h*W*W/(A3-A2)/(A3-A2);
}
if(p>A3)/*近休止段*/
{s[i]=0;
ds[i]=0;
dv[i]=0;}
da[i]=(atan((ds[i]/(W*t)-e)/(so+s[i])))/(t);/*压力角*/
x[i]=X0+(so+s[i])*sin(p*t)+e*cos(p*t);/*理论廓线坐标*/
y[i]=Y0+(so+s[i])*cos(p*t)-e*sin(p*t);
dx=(ds[i]-e)*sin(p*t)+(so+s[i])*cos(p*t);
dy=(ds[i]-e)*cos(p*t)-(so+s[i])*sin(p*t);
st=dy/sqrt(dx*dx+dy*dy);
ct=dx/sqrt(dx*dx+dy*dy);
xp[i]=x[i]+rr*st;/*外实际廓线坐标*/
yp[i]=y[i]-rr*ct;
i++;
}
printf("角度理x理y实x实y压力角\n");fp=fopen("shuju","w");
printf("=========================================================\n");
for(w=0;w<=A4/K;w=w+1)
{printf("*%4d%10.2f%8.2f%8.2f%10.2f%10.2f*\n",w*K,x[w],y[w],xp[w],yp[w],da[w]);
fprintf(fp,"%4d\t%6.2f\t%6.2f\t%6.2f\t%6.2f\t%6.2f\n",w*K,x[w],y[w],xp[w],yp[w],da[w]);
}
system("pause");
}
/************杆组运动分析编程程序**********/
#include
#include
#include
#include
#definePI3.14159265
voidrrpm(intmodel,intp1,intp2,intp3,intm1,intm2,intm3,doublel1,double*sr,double*vr2,double*ar2,doublet[10],doublew[10],doublee[10],doublep[20][2],doublevp[20][2],doubleap[20][2])
doubledx21,dy21,dx31,dy31,dx32,dy32;
doublessq,ep,fp,co3,si3,co2,si2,q,ev,fv,ea,fa;
t[m2]=t[m3];
dx21=p[p2][0]-p[p1][0];
dy21=p[p2][1]-p[p1][1];
ssq=dx21*dx21+dy21*dy21;
co3=cos(t[m3]);
si3=sin(t[m3]);
ep=2.0*(dx21*co3+dy21*si3);
fp=ssq-l1*l1;
if(ep*ep<=4.0*fp){
printf("\nRRP不能组装.\n");
}
else
{
*sr=fabs(-ep+model*sqrt(ep*ep-4.0*fp))/2.0;
p[p3][0]=p[p2][0]+(*sr)*co3;
p[p3][1]=p[p2][1]+(*sr)*si3;
dx31=p[p3][0]-p[p1][0];
dy31=p[p3][1]-p[p1][1];
dx32=p[p3][0]-p[p2][0];
dy32=p[p3][1]-p[p2][1];
t[m1]=atan2(dy31,dx31);
co2=cos(t[m1]);
si2=sin(t[m1]);
q=dy31*si3+dx31*co3;
ev=vp[p2][0]-vp[p1][0]-(*sr)*w[m3]*si3;
fv=vp[p2][1]-vp[p1][1]+(*sr)*w[m3]*co3;
w[m1]=(-ev*si3+fv*co3)/q;
*vr2=-(ev*dx31+fv*dy31)/q;
vp[p3][0]=vp[p1][0]-l1*w[m1]*si2;
vp[p3][1]=vp[p1][1]+l1*w[m1]*co2;
ea=ap[p2][0]-ap[p1][0]+w[m1]*w[m1]*dx31-w[m3]*w[m3]*(*sr)*co3;
ea=ea-2.0*w[m3]*(*vr2)*si3-e[m3]*dy32;
fa=ap[p2][1]-ap[p1][1]+w[m1]*w[m1]*dy31-w[m3]*w[m3]*(*sr)*si3;
fa=fa+2.0*w[m3]*(*vr2)*co3+e[m3]*dx32;
e[m1]=(-ea*si3+fa*co3)/q;
*ar2=-(ea*dx31+fa*dy31)/q;
ap[p3][0]=ap[p1][0]-l1*w[m1]*w[m1]*co2-l1*e[m1]*si2;
ap[p3][1]=ap[p1][1]-l1*w[m1]*w[m1]*si2+l1*e[m1]*co2;
w[m2]=w[m3];
e[m2]=e[m3];
}
}
voidrprm(intmodel,intp1,intp2,intp3,intm1,intm2,doublek,doublel1,double*sr,double*vr2,double*ar2,doublet[10],doublew[10],doublee[10],doublep[20][2],doublevp[20][2],doubleap[20][2])
{
doubledx21,dy21,test,gam,bta,ct,st,q,ev,fv,ea,fa,dx31,dy31;
dx21=p[p2][0]-p[p1][0];
dy21=p[p2][1]-p[p1][1];
test=dx21*dx21+dy21*dy21-k*k;
if(test<0){
printf("\nRPR不能组装.\n");
}
else
{
*sr=sqrt(test);
gam=atan(k/(*sr));
bta=atan2(dy21,dx21);
t[m1]=bta+model*gam;
t[m2]=t[m1];
ct=cos(t[m1]);
st=sin(t[m1]);
p[p3][0]=p[p1][0]+k*st+l1*ct;
p[p3][1]=p[p1][1]-k*ct+l1*st;
q=dx21*ct+dy21*st;
ev=vp[p2][0]-vp[p1][0];
fv=vp[p2][1]-vp[p1][1];
w[m1]=(fv*ct-ev*st)/q;
w[m2]=w[m1];
*vr2=(fv*dy21+ev*dx21)/q;
dx31=p[p3][0]-p[p1][0];
dy31=p[p3][1]-p[p1][1];
vp[p3][0]=vp[p1][0]-w[m1]*dy31;
vp[p3][1]=vp[p1][1]+w[m1]*dx21;
ea=ap[p2][0]-ap[p1][0]+w[m1]*w[m1]*dx21+2.0*w[m1]*(*vr2)*st;
fa=ap[p2][1]-ap[p1][1]+w[m1]*w[m1]*dy21-2.0*w[m1]*(*vr2)*ct;
e[m1]=-(ea*st-fa*ct)/q;
e[m2]=e[m1];
*ar2=(ea*dx21+fa*dy21)/q;
ap[p3][0]=ap[p1][0]-e[m1]*dy31-w[m1]*w[m1]*dx31;
ap[p3][1]=ap[p1][1]+e[m1]*dx31-w[m1]*w[m1]*dy31;}
}
voidbarm(intp1,intp2,intm1,doublel1,doubleang,doublet[10],doublew[10],doublee[10],doublep[20][2],doublevp[20][2],doubleap[20][2])
{
doublelx2,ly2,co,si;
co=cos(t[m1]+ang);
si=sin(t[m1]+ang);
lx2=l1*co;
ly2=l1*si;
p[p2][0]=p[p1][0]+lx2;
p[p2][1]=p[p1][1]+ly2;
vp[p2][0]=vp[p1][0]-ly2*w[m1];
vp[p2][1]=vp[p1][1]+lx2*w[m1];
ap[p2][0]=ap[p1][0]-ly2*e[m1]-lx2*w[m1]*w[m1];ap[p2][1]=ap[p1][1]+lx2*e[m1]-ly2*w[m1]*w[m1];
}
intmain(intargc,char*argv[])
{
staticdoublep[20][2],vp[20][2],ap[20][2],del=10.0;
staticdoublet[10],w[10],e[10];
staticintic;
doubledr;
doublel2,vr2,ar2;
inti;
dr=PI/180.0;
p[1][0]=0.0;
p[1][1]=0.0;
p[3][0]=0.0;
p[3][1]=-0.98;
vp[1][0]=0.0;
vp[1][1]=0.0;
ap[1][0]=0.0;
ap[1][1]=0.0;
vp[3][0]=0.0;
vp[3][1]=0.0;
ap[3][0]=0.0;
ap[3][1]=0.0;
w[5]=0.0;
e[5]=0.0;
t[5]=0.0;
w[1]=172.0*2.0*PI/60;
e[1]=0.0;
printf("\n运动参数\n\n");
printf("转角位置s速度v加速度aw[3]w[4]a[3]a[4]\n");
printf("。
mm/sm/s/srad/srad/srad/s/srad/s/s\n");
ic=(int)(360.0/del);
for(i=0;i<=ic;i++)
{
t[1]=(i)*del*dr;
barm(1,2,1,0.057,0.0,t,w,e,p,vp,ap);
rprm(1,3,2,4,3,2,0.0,0.6,&l2,&vr2,&ar2,t,w,e,p,vp,ap);
rrpm(1,4,1,5,4,5,0.0,0.6,&l2,&vr2,&ar2,t,w,e,p,vp,ap);printf("\n%2d%8.3f%8.3f%9.3f%10.3f%10.3f%10.3f%10.3f%10.3f",i+1,t[1]/dr,p[5][0],vp[5][0],ap[5][0],w[3],w[4],e[3],e[4]);
printf("\n");
}
getch();
return0;
}