其中:E3 = u’’ + 2A3l’1θ’1 + A5θ’1+ A6θ’’1–2A4l’2θ’2–A7θ’2– A8θ’’2 ,
2 2
F3 = v’’ - 2A1l’1θ’1 + A6θ’1- A5θ’’1 +2A2l’2θ’2–A8θ’2+ A7θ’’2 。 解(28)式得:
l’’1=(F3 cosθ2 – E3sinθ2) / D8
l’’2=(F3 cosθ1 – E3sinθ1) / D8 (29)
P3点的加速度为对式(27)求导得:
2
x’’3 = x’’1 + A1l’’1 - 2A3l’1θ’1 - A5θ’1- A6θ’’1
2
y’’3 = y’’1 + A3l’’1 - 2A1l’1θ’1 - A6θ’1- A5θ’’1 (30) 由上述式子可设计出 PRP杆组运动分析子程序(见程序单)。
6.RPP杆组运动分析子程序
图6所示RPPⅡ级杆组中,已知导路1参考点P1和外转动副P2的运动,h为外副P2至导路2的垂直距离,导路1的方位角、角速度、角加速度(θ1,θ’1,θ’’1)已知,导路1与导路2间的夹角为?。要求确定导路1,2移动的位移、速度及加速度(l1,l2,l’1,l’2,l’’1,l’’2)以及导路中心P3,P4点的运动(x3,x4,x’3,x’4,x’’3,x’’4,y3,y4,y’3,y’4,y’’3, y’’4)。
1)位置分析
推导l1,及l2的方程式:
x1+l1cosθ1+l2cos(θ1+?)= x2+hsin(θ1+?) y1+l1sinθ1+l2sin(θ1+?)= y2-hcos(θ1+?)
整理得:
l1cosθ1 + l2cos(θ1+?)= E1
l1sinθ1 + l2sin(θ1+?)= F1 (31) 其中:E1 = u + A1h,F1 = v –A2h,
A1 =sin(θ1+?),A2 =cos(θ1+?)。 由于θ1 ,? 均已知,由此解得: l1 =(E1 sin(θ1+?)- F1 cos(θ1+?))/ D8 l2 =(F1 cosθ1 - E1sinθ1)/ D8 (32)
其中:D8 =A1A4-A2A3=sin?,A3 =sinθ1 ,A4 =cosθ1 图6
P3、P4点的位置为:
x3 = x1 + l1 cosθ1 ,y3 = y1 + l1 sinθ1 x4 = x2 + h sin(θ1+?),y4 = y2 - hcos(θ1+?) (33) 当给定P1、P2点的位置,杆长h的大小和导路的方向角θ1、? 后,RPP杆组可能有两种形式,即图6中的实线和虚线两种形式,这可用h为“+”(实线机构)和h为“-”(虚线机构)来确定。
此外,从式(32)可以看出,为保证机构能够正常运动,两导路之间的夹角? 不能为0,再考虑到加工和装配等因素以及摩擦的存在,工程实际中,一般要求?sin??? 0.1。
2
2
5
2)速度分析
对式(31)求导一次,整理得: l’1cosθ1 + l’2cos(θ1+?)= E2
l’1sinθ1 + l’2sin(θ1+?)= F2 (34)
其中:E2 =u’ +θ’1(A2h + A3l1 + A1l2),F2 = v’ -θ’1(A1h - A4l1 - A2l2)。 由式(34)解得:
l’1 =(E2 sin (θ1+?)- F2 cos(θ1+?))/ D8
l’2 =(F2 cosθ1- E2 sinθ1 ) / D8 (35)
P3、P4点的速度为对式(33)求导得:
x’3 = x’1 + A4l’1 – A3l1θ’1,y’3 = y’1 + A3l’1 + A4l1θ’1
x’4 = x’2 + A2 hθ’1 ,y’4 = y’2 + A1 hθ’1 (36)
3) 加速度分析
对式(34)求导一次,整理得: l’’1cosθ1 + l’’2cosθ2 = E3
l’’1sinθ1 + l’’2sinθ2 = F3 (37)
2
其中:E3 = u’’ +θ’’1(A2h +A3l1 +A1l2)-θ’1(A1h -A4l1 - A2l2)+ 2θ’1(A3l’1 +A1l’2)
2
F3 = v’’ +θ’’1(A1h -A4l1 -A2l2)+θ’1(A2h –A3l1 – A1l2)- 2θ’1(A4l’1 +A2l’2) 解(37)式得:
l’’1 =(E3 sin (θ1+?)- F3 cos(θ1+?))/ D8
l’’2 =(F3 cosθ1 – E3sinθ1)/ D8 (38) P3、P4点的加速度为对式(36)求导得:
2
x’’3 = x’’1 + A4l’’1 - A3l1θ’’1 - 2A3l’1θ’1–A4l1θ’1
2
y’’3 = y’’1 + A3l’’1 + A4l1θ’’1 + 2A4l’1θ’1–A3l1θ’1
2
x’’4 = x’’2 + A2 hθ’’1–A1 hθ’1
2
y’’4 = y’’2 + A1 hθ’’1 + A2 hθ’1 (39) 由上述式子可设计出 RPP杆组运动分析子程序(见程序单)。
6
/* 机械原理平面机构运动分析子程序 */
/*(含单杆,RRR,RRP,RPR,PRP, RPP杆组) */
#define PI 3.1415926 #include
double l, l 1, l 2, l v1, l v2, l a1, l a2, r, af, ct, cv, ca, ct1, cv1, ca1, ct2, cv2, ca2; double u, v, u1, v1, u2, v2, x1, y11, xv1, yv1, xa1, ya1, x2, y2, xv2, yv2, xa2, ya2; double x3, y3, xv3, yv3, xa3, ya3, x4, y4, xv4, yv4, xa4, ya4, a1, a2, a3, a4, a5, a6, a7, a8; double c, d, d7, d8, dt, e, e1, e2, e3, f, f1, f2, f3, g, h, h1, h2, i1, k, k1, k2, n, n7, w; int m;
/* 各公共子程序 */
/* 单杆运动分析子程序 */
void SSL() {
x2 = x1 + l * cos(ct); y2 = y11 + l * sin(ct); x3 = x1 + r * cos(ct + af ); y3 = y11 + r * cos(ct + af ); xv2 = xv1 - l * sin(ct) * cv; yv2 = yv1 + l * cos(ct) * cv;
xa2 = xa1 - l * sin(ct) * ca - l * cos(ct) * cv * cv; ya2 = ya1 + l * cos(ct) * ca - l * sin(ct) * cv * cv; xv3 = xv1 - (y3 - y1) * cv; yv3 = yv1 + (x3 - x1) * cv;
xa3 = xa1 - (y3 - y11) * ca - (x3 - x1) * cv * cv; ya3 = ya1 + (x3 - x1) * ca - (y3 - y11) * cv * cv; }
7
/* RRR杆组运动分析子程序 */
void RRR() {
u = x2 - x1; v = y2 - y11; u1 = xv2 - xv1; v1 = yv2 - yv1; u2 = xa2 - xa1; v2 = ya2 - ya1;
c = (u * u + v * v + l 2 * l 2 – l 1 * l 1) / 2 / l 2; k = v * v + u * u - c * c; if ( k < 0 )
Cout<<( \else
{ n7 = v + m * sqrt(k); d7 = u – c;
ct2 = 2 * atan ( n7 / d7 );
if ( d7 < 0 && n7 > 0 ) ct2 += 2 * PI; else if ( d7 < 0 && n7 < 0 ) ct2 -= 2 * PI; { n = v + l 2 * sin ( ct2 ); d = u + l 2 * cos ( ct2 ); ct1 = atan ( n / d );
}
if ( d < 0 && n > 0 ) ct1 += PI; else if ( d < 0 && n < 0 ) ct1 -= PI; a1 = -l 1 * sin(ct1); a2 = l 1 * cos(ct1); a3 = l 2 * sin(ct2); a4 = -l 2 * cos(ct2); d = a1 * a4 - a2 * a3; if ( fabs ( d ) < 1e-9 ) cout<<( \ else
{ cv1 = (a4 * u1 - a3 * v1) / d; cv2 = (a1 * v1 - a2 * u1) / d;
e = u2 + a2 * cv1 * cv1 + a4 * cv2 * cv2; f = v2 - a1 * cv1 * cv1 - a3 * cv2 * cv2;
ca1 = (a4 * e - a3 * f) / d;
ca2 = (a1 * f - a2 * e) / d;
}
} }
8
/* RRP杆组运动分析子程序 */
void RRP() {
u = x2 - x1; v = y2 - y11; u1 = xv2 - xv1; v1 = yv2 - yv1; u2 = xa2 - xa1; v2 = ya2 - ya1;
k1 = l 1 * l 1 - pow ( ( u * sin ( ct2 ) - v * cos ( ct2 ) ) , 2 ); if (k1 < 0)
cout<<(\else
{ k2 = u * cos(ct2) + v * sin(ct2); l 2 = -k2 + m * sqrt(k1); n = v + l 2 * sin(ct2); d = u + l 2 * cos(ct2); ct1 = atan ( n / d );
if ( d < 0 && n > 0 ) ct1 += PI; else if ( d < 0 && n < 0 ) ct1 -= PI; a1 = -l 1 * sin(ct1); a2 = l 1 * cos(ct1); a5 = -cos(ct2); a6 = -sin(ct2);
g = u1 + l 2 * a6 * cv2; h = v1 – l 2 * a5 * cv2; d8 = a1 * a6 - a2 * a5; If ( fabs(d8) <=1e-9)
cout<<(\ else
{ cv1 = (a6 * g - a5 * h) / d8; l v2 = (a1 * h - a2 * g) / d8;
e1 = u2 + a2*cv1*cv1 + 2*a6*l v2*cv2 + l 2*a5*cv2*cv2 + l 2*a6*ca2; f1 = v2 - a1*cv1*cv1 - 2*a5* l v2*cv2 + l 2*a6*cv2*cv2 – l 2*a5*ca2; ca1 = (a6 * e1 - a5 * f1) / d8;
l a2 = (a1 * f1 - a2 * e1) / d8;
} } }
9