平面连杆机构的运动分析.docx
《平面连杆机构的运动分析.docx》由会员分享,可在线阅读,更多相关《平面连杆机构的运动分析.docx(26页珍藏版)》请在冰豆网上搜索。
平面连杆机构的运动分析
大作业
(一)
平面连杆机构的运动分析
(题号:
5—E)
西北农林科技大学
班级:
机制103
学号:
2010012447
姓名:
同组其他人员:
(2010012444)
完成日期:
2011年10月24日
一、题目:
计算平面连杆机构的运动学分析
1。
图a所示的为一平面六杆机构。
假设已知各构件的尺寸如表1所示,原动件1以等角速度ω1=1rad/s沿着逆时针方向回转,试求各从动件的角位移、角速度和角加速度以及E点的位移、速度和加速度的变化情况。
(a)
表1平面六杆机构的尺寸参数(单位:
mm)
,
题号
l1
l2
l3
l4
l5
l6
α
5-E
26。
5
105。
6
67.5
87.5
47.2
37.8
90゜
题目要求:
每两人一组,每组中至少打印出一份源程序,每人计算出原动件从0°~360°时(N=36)各运动变量的大小,并绘出各组对应的运动线图以及E点的轨迹曲线。
二、平面连杆的运动分析方程
(1)位置分析
L1+L2=L4+L3
L1+L2+L2'=AG+L5+L6方程式
(1)
将机构的封闭矢量方程式
(1)写在两坐标上的投影形式:
L1*cosq1+L2*cosq2=L4+L3*cosq3
L1*sinq1+L2*sinq2=L3*sinq3
L1*cosq1+L2*cosq2+L2’*cos(q2-a)=xg+L5*cosq5+L6*cosq6
L1*sinq1+L2*sinq2+L2’*sin(q2-a)=yg+L5*sinq5+L6*sinq6
化简整理后方程左边仅含未知量项的形式,即得:
L2*cosq2—L3*cosq3=L4-L1cosq1………………………………
(1)
L2*sinq2—L3*sinq3=—L1sinq1………………………………
(2)(式2)
L2*cosq2+L2’*cos(q2-a)—L5*cosq5-L6*cosq6=xg—L1*cosq1…(3)
L2*sinq2+L2’*sin(q2—a)—L5*sinq5-L6*sinq6=yg-L1*sinq1………4)
在求解(式2)中各变量时,用牛顿迭代法会比较直观,但由于牛顿迭代法不便于限制L5、L6的位置,在有两种位置均满足上式时,无法限定它得出题中要求的解。
故在计算时改用复述矢量法直接求解q2、q3、q5、q6.
求q2、q3:
L2²=L3²+L4²+L1²-2*L3*L4*cosq3—2*L1*L3*cos(q3—q1)—2*L1*L4*cosq1
经整理后并可简化为:
A*sinq3+B*cosq3+C=0;
式中:
A=2*L1*L3*sinq1
B=2*L3*(L1*cosq1-L4)
B=L2²-L1²—L3²-L4²+2*L1*L4*sinq1
解之可得:
tan(q3/2)=[A±sqrt(A²+B²—C²)]/(B-C)
实际运动中0〈q3〈p,故‘±’适当选择:
tanq2=(L3*sinq3-L1*sinq1)/(L4+L3*cosq3—L1sinq1)
求q5、q6:
先有xe=L4+L3*cosq3+L2’*cos(q2-a)(式3)
ye=L3*sinq3+L2’*sin(q2-a)
tanβ=(yg-ye)/(xg—xe)
cosγ=[(xe—xg)²+(ye—yg)²+L5²—L6]/{2*L5*sqrt[(xe—xg)²+(te-yg)²]}
则q5'=β—γ
q5=q5'
tanq6=(ye+L5*sinq5'—yg)/(xe+L5*cosq5’—xg)
(2)角速度分析
分别将(式2)(式3)对时间求一次导数,可得
-L2*w2*sinq2+L3*w3*sinq3=L1*w1*sinq1
L2*w2*cosq2-L3*w3*cosq3=-L1*w1*cosq1
-w2(L2*sinq2+L2’sin(q2-a))+L5*w5*sinq5+L6*w6*sinq6=L1*w1*sinq1
w2*(L2*cosq2+L2’*cos(q2—a))-L5*w5*cosq5—L6*w6*cosq6=—L1*w1*cosq1
…………………………………………………………(式4)
vex=-L3*w3*sinq3-L2’*w2*sin(q2-a)
vey=L3*w3*cosq3+L2’*w2*cos(q2—a)………………(式5)
解之可得w2,w3。
w5,w6,vex,vey.将(式4)(式5)写成矩阵形式:
—L2*sinq2L3*sinq300w2L1*sinq1
L2*cosq2—L3*cosq300w3=w1—L1*cosq1
—L2*sinq2—L2’*sin(q2—a)0L5*sinq5L6*sinq6w5L1*sinq1L2*cosq2+L2'*cos(q2-a)0L5*cosq5—L6*cosq6w6—L1*cosq1
……………………………………………………………………(式6)
E点速度
vexw3—L3*sinq3-L2*sin(q2—a)
veyw2L3*cosq3L2’cos(q2-a)(式7)
采用高斯消去法可求解(式6)可解得角速度w2,w3,w5,w6;将求解结果带入(式7)可求得vex,vey.
(3)角加速度分析
分别将(式2)(式3)对时间取二次导数,可得加速度关系
-L2*sinq2L3*sinq300a2
L2*cosq2—L3*cosq300a3
—L2*sinq2-L2’*sin(q2-a)0L5*sinq5L6*sinq6a5
L2*cosq2+L2'*cos(q2—a)0-L5*cosq5L6*cosq6a6
—w2*L2*cosq2w3*L3*cosq300w2L1*w1*cosq1
=—w2*L2*sinq2w3*L3*sinq300w3+w1L1*w1*sinq1
w2*L2*cosq2+w2*L2'*cos(q2—a)0w5*L5*cosq5w6*L6*cosq6w5L1*w1*cosq1
w2*L2*sinq2+w2*L2'*sin(q2-a)0w5*L5*sinq5w6*L6*sinq6w6L1*w1*sinq1
……………………………………………………………………(式8)
E点的加速度
aex—L2'*sin(q2-a)—L3*sinq3a2L2'*cos(q2-a)L3*cosq3w2²
AeyL2'*cos(q2—a)L3*cosq3a3L2'*sin(q2-a)L3*sinq3w3²
采用高斯消去法可求解(式8)可解得角加速度α2,α3,α5,α6;将求解结果代入(式9)可求得aEx,aEy.
三、程序流程图
四、计算源程序
#include
#include〈stdlib。
h>
#include〈math.h〉
#definePI3。
1415926
#defineN4
voidSolutionangle(double[18],double);/*矢量法求角位移*/
voidSolutionspeed(double[N][N],double[N],double[18],double);/*角速度求解*/
voidSolutionacceleration(double[N][N],double[N][N],double[N],double[18]);/*角加速度求解*/
voidGaussianE(double[N][N],double[N],double[N]);/*高斯消去*/
voidFoundmatrixA(double[18],double[N][N]);/*创建系数矩阵A*/
voidFoundmatrixB(double[18],double,double[N]);/*创建系数矩阵B*/
voidFoundmatrixDA(double[18],double[N][N]);/*创建矩阵DA*/
voidFoundmatrixDB(double[18],double,double[N]);/*创建矩阵DB*/
/*定义全局变量*/
doublel1=26.5,l2=105。
6,l3=67。
5,l4=87。
5,l5=47.2,l6=37.8;
doublel2g=65.0,xg=153.5,yg=41。
7,inang=90*PI/180,as1=1.0;
/*主函数*/
intmain()
{
inti,j;
FILE*fp;
doubleshuju[36][18];
doublepsvalue[18],a[N][N],da[N][N],b[N],db[N],ang1;
/*建立文件,并制表头*/
if((fp=fopen("数据.txt",”w"))==NULL)
{
printf(”Cann’topenthisfile。
\n");
exit(0);
}
fprintf(fp,”\nTheKinematicParametersofPoint5\n”);
fprintf(fp,”ang2ang3ang5ang6”);
fprintf(fp,”as2as3as5as6”);
fprintf(fp,”aas2aas3aas5aas6");
fprintf(fp,"xeyevexveyaexaey\n");
/*计算数据并写入文件*/
for(i=0;i<36;i++)
{
ang1=i*PI/18;
Solutionangle(psvalue,ang1);
FoundmatrixB(psvalue,ang1,b);
FoundmatrixA(psvalue,a);
Solutionspeed(a,b,psvalue,ang1);
FoundmatrixDA(psvalue,da);
FoundmatrixDB(psvalue,ang1,db);
Solutionacceleration(a,da,db,psvalue);
for(j=0;j<4;j++)
{shuju[i][j]=psvalue[j]*180/PI;}
for(j=4;j<18;j++)
{shuju[i][j]=psvalue[j];}
fprintf(fp,”\n");
for(j=0;j〈18;j++)
fprintf(fp,”%12.3f",shuju[i][j]);
}
fclose(fp);
/*输出数据*/
for(i=0;i<36;i++)
{
ang1=i*PI/18;
printf(”\n输出ang1=%d时的求解\n”,i*10);
printf("angleangspeedangacceleration:
\n”);
for(j=0;j〈4;j++)
printf("%lf\t”,shuju[i][j]);
printf(”\n”);
for(j=4;j<8;j++)
printf("%lf\t",shuju[i][j]);
printf(”\n");
for(j=8;j〈12;j++)
printf(”%lf\t”,shuju[i][j]);
printf("\n");
for(j=12;j〈18;j++)
printf(”%lf\t”,shuju[i][j]);
printf(”\n");
}
return0;
}
/*矢量法求角位移*/
voidSolutionangle(doublevalue[18],doubleang1)
{
doublexe,ye,A,B,C,phi,alpha,csn,ang5g,d2,d,ang2,ang3,ang5,ang6;
A=2*l1*l3*sin(ang1);
B=2*l3*(l1*cos(ang1)-l4);
C=l2*l2-l1*l1-l3*l3—l4*l4+2*l1*l4*cos(ang1);
ang3=2*atan((A+sqrt(A*A+B*B-C*C))/(B—C));
if(ang3<0)/*限定ang3大小*/
{ang3=2*atan((A-sqrt(A*A+B*B—C*C))/(B-C));}
ang2=asin((l3*sin(ang3)-l1*sin(ang1))/l2);
xe=l4+l3*cos(ang3)+l2g*cos(ang2-inang);
ye=l3*sin(ang3)+l2g*sin(ang2—inang);
phi=atan2((yg—ye),(xg-xe));
d2=(yg-ye)*(yg—ye)+(xg—xe)*(xg-xe);
d=sqrt(d2);
csn=(l5*l5+d2—l6*l6)/(2。
0*l5*d);
alpha=atan2(sqrt(1.0-csn*csn),csn);
ang5g=phi—alpha;
ang5=ang5g-PI;
ang6=atan2(ye+l5*sin(ang5g)-yg,xe+l5*cos(ang5g)-xg);
value[0]=ang2;value[1]=ang3;value[2]=ang5;value[3]=ang6;
value[12]=xe;value[13]=ye;
/*限定角度大小*/
inti;
for(i=0;i<4;i++)
{
while(value[i]>2*PI)
value[i]-=2*PI;
while(value[i]〈0)
value[i]+=2*PI;
}
}
/*角速度求解*/
voidSolutionspeed(doublea2[N][N],doubleb2[N],doublevalue[18],doubleang1)
{
doubleang2,ang3;
ang2=value[0];ang3=value[1];
doublep2[N];
GaussianE(a2,b2,p2);
value[4]=p2[0];
value[5]=p2[1];
value[6]=p2[2];
value[7]=p2[3];
value[14]=—l3*value[5]*sin(ang3)—l2g*value[4]*sin(ang2—inang);
value[15]=l3*value[5]*cos(ang3)+l2g*value[4]*cos(ang2-inang);
}
/*角加速度求解*/
voidSolutionacceleration(doublea3[N][N],doubleda3[N][N],doubledb3[N],doublevalue[18])
{
inti,j;
doubleang2,ang3;
ang2=value[0];ang3=value[1];
doublebk[N]={0};
doublep3[N];
for(i=0;i〈N;i++)
{
for(j=0;j{
bk[i]+=-da3[i][j]*value[4+j];
}
bk[i]+=db3[i]*as1;
}
GaussianE(a3,bk,p3);
value[8]=p3[0];
value[9]=p3[1];
value[10]=p3[2];
value[11]=p3[3];
value[16]=—l3*value[9]*sin(ang3)-l3*value[5]*value[5]*cos(ang3)-l2g*value[8]*sin(ang2—inang)-l2g*value[4]*value[4]*cos(ang2—inang);
value[17]=l3*value[9]*cos(ang3)—l3*value[5]*value[5]*sin(ang3)+l2g*value[8]*cos(ang2-inang)-l2g*value[4]*value[4]*sin(ang2—inang);
}
/*高斯消去法解矩阵方程*/
voidGaussianE(doublea4[N][N],doubleb4[N],doublep4[N])
{
inti,j,k;
doublea4g[N][N],b4g[N],t;
for(i=0;ifor(j=0;j〈N;j++)
a4g[i][j]=a4[i][j];
for(i=0;i〈N;i++)
b4g[i]=b4[i];
/*使主对角线上的值尽可能大*/
if(a4g[0][0]〈a4g[1][0]&&a4g[0][1]>a4g[1][1])
{
for(j=0;j〈N;j++)
{t=a4g[0][j];a4g[0][j]=a4g[1][j];a4g[1][j]=t;}
t=b4g[0];b4g[0]=b4g[1];b4g[1]=t;
}
if(a4g[2][2]a4g[3][3])
{
for(j=0;j{t=a4g[2][j];a4g[2][j]=a4g[3][j];a4g[3][j]=t;}
t=b4g[2];b4g[2]=b4g[1];b4g[3]=t;
}
/*初等行变换*/
for(j=0;jfor(i=0;i{
if(i!
=j)
{
for(k=0;kif(k!
=j)
{a4g[i][k]-=a4g[i][j]/a4g[j][j]*a4g[j][k];}
b4g[i]—=b4g[j]*a4g[i][j]/a4g[j][j];
a4g[i][j]=0;
}
}
for(i=0;i〈N;i++)
b4g[i]/=a4g[i][i];
p4[0]=b4g[0];
p4[1]=b4g[1];
p4[2]=b4g[2];
p4[3]=b4g[3];
}
/*创建系数矩阵A*/
voidFoundmatrixA(doublevalue5[18],doublea5[N][N])
{
doubleang2,ang3,ang5,ang6;
ang2=value5[0];ang3=value5[1];ang5=value5[2];ang6=value5[3];
a5[0][0]=-l2*sin(ang2);a5[0][1]=l3*sin(ang3);
a5[1][0]=l2*cos(ang2);a5[1][1]=—l3*cos(ang3);
a5[2][0]=-l2*sin(ang2)-l2g*sin(ang2—inang);
a5[2][2]=l5*sin(ang5);a5[2][3]=l6*sin(ang6);
a5[3][0]=l2*cos(ang2)+l2g*cos(ang2-inang);
a5[3][2]=-l5*cos(ang5);a5[3][3]=-l6*cos(ang6);
a5[0][2]=a5[0][3]=a5[1][2]=a5[1][3]=a5[2][1]=a5[3][1]=0;
}
/*创建系数矩阵B*/
voidFoundmatrixB(doublevalue6[18],doubleang1,doubleb6[N])
{
b6[0]=b6[2]=l1*sin(ang1)*as1;
b6[1]=b6[3]=-l1*cos(ang1)*as1;
}
/*创建矩阵DA*/
voidFoundmatrixDA(doublevalue7[18],doubleda7[N][N])
{
doubleang2,ang3,ang5,ang6,as2,as3,as5,as6;
ang2=value7[0];ang3=value7[1];ang5=value7[2];ang6=value7[3];
as2=value7[4];as3=value7[5];as5=value7[6];as6=value7[7];
da7[0][0]=-l2*as2*cos(ang2);da7[0][1]=l3*as3*cos(ang3);
da7[1][0]=—l2*as2*sin(ang2);da7[1][1]=l3*as3*sin(ang3);
da7[2][0]=as2*(-l2*cos(ang2)-l2g*cos(ang2—inang));
da7[2][2]=as5*l5*cos(ang5);da7[2][3]=as6*l6*cos(ang6);
da7[3][0]=as2*(—l2*sin(ang2)—l2g*sin(ang2-inang));
da7[3][2]=as5*l5*sin(ang5);da7[3][3]=as6*l6*sin(ang6);
da7[0][2]=da7[0][3]=da7[1][2]=da7[1][3]=da7[2][1]=da7[3][1]=0;
}
/*创建矩阵DB*/
voidFoundmatrixDB(doublevalue8[18],doubleang1,doubledb8[N])
{
db8[0]=db8[2]=l1*as1*cos(ang1);
db8[1]=db8[3]=l1*as1*sin(ang1);
}
五、计算结果数据
转角
ang2
ang3
ang5
ang6
as2
as3
0
36.799
69。
573
210。
375
349.905
-0.434
—0。
434
10
32。
709
66。
003
212.118
345。
238
—0.379
—0.276
20
29.278
64。
073
211.589
339.939
-0。
306
-0.111
30
26。
597
63。
731
209.276
334.605
—0。
231
0。
039
40
24.636
64。
755
205。
562
329.184
—0.163
0。
161
50
23。
301
66.865
200。
836
323.398
—0。
106
0。
256
60
22。
49
69。
79
195。
54
317。
027
-0。
058
0。
325
70
22。
113
73.301
190.166
310.051
—0。
019
0.374
80
22。
099
77.209
185.201
302.