依次计算
计算的
结果分别存入数组或文件中
按格式输出所有计算结果
初始化图形系统
绘制直角坐标系
直角坐标系下分别绘出角位移、角速度、角加速度图象
绘制出机构动画
序设计源程
#include
#include
#include
#define X1 (70.0*0.001)
#define X2 (200.0*0.001)
#define Y (310.0*0.001)
#define PHI3_1 60
#define PHI3_2 120
#define H (210.0*0.001)
#define Lce_Lcd 0.5
#define Lef_Lde 0.25
#define N1 90.0
#define Pi 3.1415926
#define Vs 900
#define DelayTime 1000
#define FaiAngleScale30
#define PosScale 100
#define SpeedScale 10
#define AccelateScale0.02
#define VPX_A 125
#define VPY_A 400
#define VX1 15
#define VY1 100
#define VX2 250
#define VY2 460
#define PosCoorX 300
#define PosCoorY 180
#define SpeedCoorX 300
#define SpeedCoorY 280
#define AccelateCoorX300
#define AccelateCoorY380
float Lab;
float Lbc;
float Lde;
float Lef;
float Lcd;
float Lce;
float Lad;
float Pax,Pbx,Pcx,Pdx,Pex,Pfx,Pay,Pby,Pcy,Pdy,Pey,Pfy;
float Vax,Vbx,Vcx,Vdx,Vex,Vfx,Vay,Vby,Vcy,Vdy,Vey,Vfy;
float Aax,Abx,Acx,Adx,Aex,Afx,Aay,Aby,Acy,Ady,Aey,Afy;
float k1,k2,k3,k11,k21,k31,k12,k22,k32;
float Omig;
float FaiAngle_Degree;
float FaiAngle_Rad;
int VPX_B,VPY_B,VPX_C,VPY_C,VPX_D,VPY_D,VPX_E,VPY_E,VPX_F,VPY_F;
void Init();
void InitView();
void DrawCoor();
void DrawPic();
void DrawMoveCoor();
void GetLength();
void GetpointPos(floatFaiAngle);
void GetPointSpeed(floatFaiAngle);
void GetPointAccelate(floatFaiAngle);
void main()
{ inti,t;
Omig=N1*2*Pi/60;
Init();
InitView();
GetLength();
for(FaiAngle_Degree=0;!
kbhit();FaiAngle_Degree++)
{
FaiAngle_Degree=((int)FaiAngle_Degree)%360;
FaiAngle_Rad=FaiAngle_Degree*Pi/180.0;
Pax=0;
Pay=0;
Pdx=X1;
Pdy=Y;
Pbx=Lab*cos(FaiAngle_Rad);
Pby=Lab*sin(FaiAngle_Rad);
Vbx=-Lab*Omig*sin(FaiAngle_Rad);
Vby=Lab*Omig*cos(FaiAngle_Rad);
Abx=-Lab*pow(Omig,2)*cos(FaiAngle_Rad);
Aby=-Lab*pow(Omig,2)*sin(FaiAngle_Rad);
k1=sqrt(pow(Pdx-Pbx,2)+pow(Pdy-Pby,2));
k2=(pow(k1,2)+pow(Lbc,2)-pow(Lcd,2))/2.0/pow(k1,2);
k3=sqrt(pow((Lbc*1.0/k1),2)-pow(k2,2));
Pcx=Pbx+k2*(Pdx-Pbx)-k3*(Pdy-Pby);
Pcy=Pby+k2*(Pdy-Pby)-k3*(Pdx-Pbx);
Vcx=(Pdx-Pbx)*k21+Vbx-k2*Vbx-k31*(Pdy-Pby)+k3*Vby;
Vcy=(Pdy-Pby)*k21+Vby-k2*Vby-k31*(Pdx-Pbx)+k3*Vbx;
k11=(Vbx*(Pbx-Pdx)+Vby*(Pby-Pdy))/k1;
k21=(pow(Lcd,2)-pow(Lbc,2))*k11/pow(k1,3);
k31=-(Lbc*k11/pow(k1,3)+k2*k21)/k3;
k12=(k1*pow(Vbx,2)+Abx*(Pbx-Pdx)+pow(Vby,2)+Aby*(Pby-Pdy)-k11*((Pbx-Pdx)*Vbx+Vby+(Pby-Pdy)))/pow(k1,2);
k22=(pow(Lcd,2)-pow(Lbc,2))*(k12/pow(k1,2)-3*pow(k11,2))/pow(k1,3);
k32=(k31*(Lbc*k11+k2*pow(k1,4))-k3*(Lbc*(k12*k1-3*pow(k11,2))+pow(k21,2)*pow(k1,3)+k2*k21*pow(k1,3)))/pow(k3,2)/pow(k1,3);
Acx=(Pdx-Pbx)*k22-k21*Vbx+Abx-k2*Abx-k21*Vbx-k32*(Pdy-Pby)+2*k31*Vby+k3*Aby;
Acy=(Pdy-Pby)*k22-k21*Vby+Aby-k2*Aby-k21*Vby+k32*(Pdx-Pbx)-2*k31*Vbx-k3*Abx;
Pex=Lce_Lcd*(Pcx-Pdx)+Pcx;
Pey=Lce_Lcd*(Pcy-Pdy)+Pcy;
Vex=Vcx*Lde/Lcd;
Vey=Vcy*Lde/Lcd;
Aex=Acx*Lde/Lcd;
Aey=Acy*Lde/Lcd;
Pfx=X1-X2;
Pfy=Pey-sqrt(pow(Lef,2)-pow(Pfx-Pex,2));
Vfx=0;
Vfy=Vey+((Pex-Pfx)*Vex)/(Pey-Pfy);
Afx=0;
Afy=Aey+((Pey-Pfy)*((Pex-Pfx)*Aex+pow(Vex,2))-(Pex-Pfx)*Vex*(Vey-Vfy))/pow(Pey-Pfy,2);
DrawPic();
DrawMoveCoor();
delay(DelayTime);
}
closegraph();}
voidGetLength()
{
floattemp1,temp2;
Lad=sqrt(X1*X1+Y*Y);
Lde=H/(cos(PHI3_1*Pi/180)-cos(PHI3_2*Pi/180));
Lce=Lde/(1.0+1.0/Lce_Lcd);
Lcd=Lde-Lce;
temp1=sqrt(pow(Lad,2)+pow(Lcd,2)
-2*Lad*Lcd*cos(PHI3_1*Pi/180-atan(X1/Y)));
temp2=sqrt(pow(Lad,2)+pow(Lcd,2)
-2*Lad*Lcd*cos(PHI3_2*Pi/180-atan(X1/Y)));
Lbc=(temp2+temp1)/2.0;
Lab=(temp2-temp1)/2.0;
Lef=Lde*Lef_Lde;
}
voidInit()
{
intgd=VGA,gm=VGAHI,errorcode;
initgraph(&gd,&gm,"c:
\\turboc2");
}
voidInitView()
{
VPX_D=VPX_A+X1*Vs;
VPY_D=VPY_A-Y*Vs;
VPX_F=VPX_A+(X1-X2)*Vs;
cleardevice();
setfillstyle(SOLID_FILL,BLUE);
bar(0,0,639,479);
setcolor(GREEN);
settextstyle(1,HORIZ_DIR,4);
outtextxy(65,25,"LIANGANJIGOU");
setfillstyle(SOLID_FILL,RED);
bar(0,82,700,84);
bar(0,88,700,90);
setfillstyle(SOLID_FILL,GREEN);
bar(VX1,VY1,VX2,VY2);
DrawCoor();
setcolor(YELLOW);
outtextxy(290,430,"Y");
outtextxy(550,430,"X");
}
voidDrawCoor()
{
int i;
setcolor(YELLOW);
line(300,180,550,180);
line(300,280,550,280);
line(300,380,550,380);
line(300,140,300,220);
line(300,240,300,320);
line(300,340,300,420);
line(300,140,300-3,140+5);
line(300,240,300-3,240+5);
line(300,340,300-3,340+5);
line(300,140,300+3,140+5);
line(300,240,300+3,240+5);
line(300,340,300+3,340+5);
line(550,180,550-5,180+3);
line(550,280,550-5,280+3);
line(550,380,550-5,380+3);
line(550,180,550-5,180-3);
line(550,280,550-5,280-3);
line(550,380,550-5,380-3);
setcolor(YELLOW);
settextstyle(0,HORIZ_DIR,1);
outtextxy(280,140,"Pf");
outtextxy(280,240,"Vf");
outtextxy(280,340,"Af");
}
voidDrawPic()
{
inti;
VPX_B=VPX_A+Vs*(Pbx-Pax);
VPY_B=VPY_A-Vs*(Pby-Pay);
VPX_C=VPX_A+Vs*(Pcx-Pax);
VPY_C=VPY_A-Vs*(Pcy-Pay);
VPX_E=VPX_A+Vs*(Pex-Pax);
VPY_E=VPY_A-Vs*(Pey-Pay);
VPX_F=VPX_A+Vs*(Pfx-Pax);
VPY_F=VPY_A-Vs*(Pfy-Pay);
setbkcolor(BLACK);
setfillstyle(SOLID_FILL,BLUE);
bar(VX1,VY1,VX2,VY2);
setfillstyle(SOLID_FILL,BLACK);
setlinestyle(SOLID_LINE,0,NORM_WIDTH);
pieslice(VPX_A,VPY_A,0,360,3);
line(VPX_A,VPY_A,VPX_A-10,VPY_A+10);
line(VPX_A,VPY_A,VPX_A+10,VPY_A+10);
line(VPX_A-15,VPY_A+10,VPX_A+15,VPY_A+10);
for(i=0;i<30;i+=4)
line(VPX_A-15+i,VPY_A+10,VPX_A-10+i,VPY_A+15);
pieslice(VPX_D,VPY_D,0,360,3);
line(VPX_D,VPY_D,VPX_D-10,VPY_D+10);
line(VPX_D,VPY_D,VPX_D+10,VPY_D+10);
line(VPX_D-15,VPY_D+10,VPX_D+15,VPY_D+10);
outtextxy(VPX_D,VPY_D-15,"D");
outtextxy(VPX_A,VPY_A-15,"A");
outtextxy(VPX_F+10,VPY_F,"F");
for(i=0;i<30;i+=4)
line(VPX_D-15+i,VPY_D+10,VPX_D-10+i,VPY_D+15);
line(VPX_F,130,VPX_F,420);
for(i=130;i<150;i+=6)
line(VPX_F,i,VPX_F-10,i+4);
rectangle(VPX_F-5,VPY_F-10,VPX_F+5,VPY_F+10);
pieslice(VPX_B,VPY_B,0,360,2);
pieslice(VPX_C,VPY_C,0,360,2);
pieslice(VPX_E,VPY_E,0,360,2);
pieslice(VPX_F,VPY_F,0,360,2);
circle(VPX_A,VPY_A,Lab*Vs);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
line(VPX_A,VPY_A,VPX_B,VPY_B);
line(VPX_B,VPY_B,VPX_C,VPY_C);
line(VPX_D,VPY_D,VPX_E,VPY_E);
line(VPX_E,VPY_E,VPX_F,VPY_F);
}
void DrawMoveCoor()
{ floatf,x,y;
f=FaiAngle_Rad*FaiAngleScale;
x=Pfx*PosScale;
y=Pfy*PosScale;
putpixel(PosCoorX+f,PosCoorY-x,BROWN);
putpixel(PosCoorX+f,PosCoorY-y,RED);
x=Vfx*SpeedScale;
y=Vfy*SpeedScale;
putpixel(SpeedCoorX+f,SpeedCoorY-x,BROWN);
putpixel(SpeedCoorX+f,SpeedCoorY-y,RED);
x=Afx*AccelateScale;
y=Afy*AccelateScale;
putpixel(AccelateCoorX+f,AccelateCoorY-x,BROWN);
putpixel(AccelateCoorX+f,AccelateCoorY-y,RED);
}
设计结果
i=1
…….
…….
……...
i=47
sita1[i]=29.530972 ,sita2[i]=0.244314 ,sita3[i]=1.756857 ,omigar2[i]=0.983844 ,omigar3[i]=-3.810642 ,epsl2[i]=-23.53977epsl3[i]=-19.458128
i=48
sita1[i]=30.159290 ,sita2[i]=0.249768 ,sita3[i]=1.464203 ,omigar2[i]=-0.892504 ,omigar3[i]=-4.776515 ,epsl2[i]=-29.605782epsl3[i]=13.256150
i=49
sita1[i]=30.787609 ,sita2[i]=0.311739 ,sita3[i]=1.258883 ,omigar2[i]=-2.397500 ,omigar3[i]=-4.462730 ,epsl2[i]=-14.459468 epsl3[i]=60.537876
i=50
sita1[i]=0.000000 ,sita2[i]=0.000000 ,sita3[i]=0.000000 ,omigar2[i]=0.000000 ,omigar3[i]=0.000000 ,epsl2[i]=0.000000,epsl3[i]=0.000000
位移、加速度、角速度曲线的绘制
总结
这门课程设计是机械原理课程设计,真对的是我们这学期所学的《机械原理》这门课程的,不但是对所学知识的检验,更是对实践能力的考察。
在连杆机构中,构件间的相对运动是平面运动或平行平面运动的成为平面连杆机构。
通常由四个组件组成的连杆机构成为丝杆机构,有五个构件组成的连杆机构成为五杆机构,以此类推。
五杆以上的连杆机构又称为多杆机构。
因三个构件不能组成平面闭式链机构,故平面闭式连机构至少是四杆机构。
四杆机构既是构成和研究平面多杆机构的基础,又是应用最广泛的连杆机构。
平面连杆机构的有点:
1)运动副一般为转动负荷移动副,由于低副是面接触,所以压强小、便于润滑,磨损
2)运动副元素为圆柱面或平面,故制造容易。
3)平面连杆机构结构简单、工作可靠,而能实现多种运动规律和运动轨迹要求。
4)相对于空间连杆机构,其设计也较容易。
因此,他在机床、农业机械、矿业机械、轻工机械、汽车及各种仪表中得到了广泛的应用。
其主要缺点:
1)惯性力和惯性力距不易平衡,因而,不适用于高速传动。
2)对多机构而言,随着构件和运动副的增多,运动运动累积误差增大,从而影响传动精度。
平面连杆机构的类型:
1)祛病摇杆机构
2)双曲柄机构
3)双摇杆机构
参考文献
《机械原理课程设计指导书》徐萃萍 冷兴聚
《机械原理电算课程设计指导书》冷兴聚
《机械原理》孙恒陈作模
《C程序设计》谭浩强
《计算机图形学》 罗笑南王若梅
《机械原理课程设计》,辽宁工程技术大学机械设计基础教研室