Power transmission with Hook joint

(c) 2005 - Roberto Lot

[Maple Metafile]

> restart: mylib :="C:/libs": libname := mylib,libname: with(MBsymba):

 

Kinematic Model

rotating axis intersection

> A := make_POINT(ground,0,0,0): show(A);

A = POINT(frame = matrix([[1, 0, 0, 0], [0, 1, 0, 0...

driving shaft

> u1 := make_VECTOR(ground,1,0,0): show(u1);

> v1 := make_VECTOR(ground,0,vy1,vz1): show(v1);
#w1 := cross_prod(u1,v1): show(w1);

u1 = VECTOR(frame = matrix([[1, 0, 0, 0], [0, 1, 0,...

v1 = VECTOR(frame = matrix([[1, 0, 0, 0], [0, 1, 0,...

leading shaft

> u2 := make_VECTOR(rotate('Y',epsilon),1,0,0):
u2 := project(u2,ground): show(u2);

> w2 := make_VECTOR(ground,wx2,wy2,wz2): show(w2);
#v2 := cross_prod(w2,u2): show(u2);

u2 = VECTOR(frame = matrix([[1, 0, 0, 0], [0, 1, 0,...

w2 = VECTOR(frame = matrix([[1, 0, 0, 0], [0, 1, 0,...

variables

> q := { vy1,vz1,wx2,wy2,wz2 }; nq := nops(q);

Since the single-degree-of-freedom mechanism is described by means of 5 variables, 4 constraint equations must be written!

q := {vy1, vz1, wx2, wy2, wz2}

nq := 5

magnitude of the vector v1

> phi1 := dot_prod(v1,v1)-1;

phi1 := vy1^2+vz1^2-1

magnitude of the vector w2

> phi2 := dot_prod(w2,w2)-1;

phi2 := wx2^2+wy2^2+wz2^2-1

orthogonality of vectors u2 and w2

> phi3 := dot_prod(u2,w2);

phi3 := cos(epsilon)*wx2-sin(epsilon)*wz2

hook joint constraint

orthogonality of vectors v1 and w2

> phi4 := dot_prod(v1,w2);

phi4 := vy1*wy2+vz1*wz2

collect constraints

> constraints:= [seq(phi||i, i=1..4)]:

conversion to angular coordinates

> theta1; rotation of the moving shaft

> rotate('X',theta1); transformation matrix

theta1

matrix([[1, 0, 0, 0], [0, cos(theta1), -sin(theta1)...

the second colum of transformation matrix correspond to the vecor v1, thus

> a1 := theta1 = arctan( Zcomp(v1) , Ycomp(v1));
where the utilization of two-arguments function makes it possible to compute the angle in the full domain [0, 2 Pi ]

a1 := theta1 = arctan(vz1,vy1)

> theta2; r otation of the driving shaft

> rotate('Y',epsilon)*rotate('X',theta1); transformation matrix

theta2

matrix([[cos(epsilon), sin(epsilon)*sin(theta1), si...

The 3rd column of the matrix corresponds to the w2 vector, similarely to the previous case the shaft angle is:

> a2 := theta2 = arctan( -Ycomp(w2) , Zcomp(w2)/cos(epsilon));

a2 := theta2 = arctan(-wy2,wz2/cos(epsilon))

Kinematic Model 2

frame fixed to the driving shaft

> w1 := cross_prod(u1,v1): show(w1);

> T1 := linalg[transpose] (matrix(4,4, [ [Comps(u1),0] , [Comps(v1),0] , [Comps(w1),0] , [Comps(A),1] ]));

w1 = VECTOR(frame = matrix([[1, 0, 0, 0], [0, 1, 0,...

T1 := matrix([[1, 0, 0, 0], [0, vy1, -vz1, 0], [0, ...

frame fixed to the leading shaft

> v2 := cross_prod(w2,u2): show(v2);

> T2 := linalg[transpose] (matrix(4,4, [ [Comps(u2),0] , [Comps(v2),0] , [Comps(w2),0] , [Comps(A),1] ]));

v2 = VECTOR(frame = matrix([[1, 0, 0, 0], [0, 1, 0,...

T2 := matrix([[cos(epsilon), -wy2*sin(epsilon), wx2...

constraints

> map( simplify,evalm(inv_frame(T1) &* T1 - 1),trig);

matrix([[0, 0, 0, 0], [0, vy1^2+vz1^2-1, 0, 0], [0,...

> map( simplify,evalm(inv_frame(T2) &* T2 - 1),trig);

matrix([[0, 0, cos(epsilon)*wx2-sin(epsilon)*wz2, 0...

> dot_prod(u2,w2);

cos(epsilon)*wx2-sin(epsilon)*wz2

>

Numerical solution

mechanims characteristics

> data := epsilon=0.3;

data := epsilon = .3

definition of the independent variable

None of the natural coordinates may be profitably chosen as the independent coordinate, because it would be impossible to descrive a complete revolute.
In this case it is better to introduce an additional angular parameter, such as the rotation of the moving shaft

> a3 := vz1-tan(theta1)*vy1;

a3 := vz1-tan(theta1)*vy1

numerical equations

> eqns := convert(subs(data, constraints union {a2,a3}),set);

eqns := {vz1-tan(theta1)*vy1, cos(.3)*wx2-sin(.3)*w...

independent variable and unknowns

> theta1;
unks := q union {theta2};

theta1

unks := {vy1, vz1, theta2, wx2, wy2, wz2}

numerical solution

> np:=12: solz:=array[np]:
for i from 1 to np do
x[i] := 1e-5 + 2.*Pi*(i-1)/np:
solz[i] := fsolve(subs(theta1=x[i],eqns),unks) union {theta1=x[i]}:
end do:

tabbed results - natural coordinates and shaft angles

> printf(" | vy1 vz1 | wx2 wy2 wz2 | theta1 theta2 |");
for i from 1 to np do
printf("%6.0f | %+06.3f %+06.3f | %+06.3f %+06.3f %+06.3f | %+06.3f %+06.3f |",
i ,op( subs(solz[i], [vy1, vz1, wx2, wy2, wz2, theta1, theta2 ])));
writeline(default):
end do:

       |    vy1     vz1   |    wx2     wy2     wz2   |  theta1  theta2  |

     1 |  +1.000  +0.000  |  -0.296  +0.000  -0.955  |  +0.000  -3.142  |

     2 |  +0.866  +0.500  |  -0.259  +0.483  -0.837  |  +0.524  -2.638  |

     3 |  +0.500  +0.866  |  -0.153  +0.856  -0.494  |  +1.047  -2.114  |

     4 |  +0.000  -1.000  |  -0.000  -1.000  -0.000  |  +1.571  +1.571  |

     5 |  +0.500  -0.866  |  -0.153  -0.856  -0.494  |  +2.094  +2.114  |

     6 |  +0.866  -0.500  |  -0.259  -0.483  -0.837  |  +2.618  +2.638  |

     7 |  +1.000  +0.000  |  -0.296  +0.000  -0.955  |  +3.142  -3.142  |

     8 |  +0.866  +0.500  |  -0.259  +0.483  -0.837  |  +3.665  -2.638  |

     9 |  +0.500  +0.866  |  -0.153  +0.856  -0.494  |  +4.189  -2.114  |

    10 |  +0.000  -1.000  |  -0.000  -1.000  -0.000  |  +4.712  +1.571  |

    11 |  +0.500  -0.866  |  -0.153  -0.856  -0.494  |  +5.236  +2.114  |

    12 |  +0.866  -0.500  |  -0.259  -0.483  -0.837  |  +5.760  +2.638  |

animation

> with(plots): with(plottools):

Warning, the name changecoords has been redefined

Warning, the name arrow has been redefined

Warning, the previous bindings of the names project rotate, and translate have been removed and they now have an assigned value

definiton of the mechanism drawing

line definition

> arc2D :=op(arc([0,0], 0.1, Pi/2..3/2*Pi)): arc in 2D space

> arc3D := [seq([op(arc2D[i]),0],i=1..nops(arc2D))]: arc in 3D space

driving shaft

> ss1 := line([-0.1,0,0],[-0.4,0,0], color=red,thickness=5):

> st1 := CURVES(arc3D,COLOUR(RGB,1.,0.,0.), THICKNESS(5)):

leading shaft

> ss2 := line([0.1,0,0.0],[0.4,0,0], color=blue,thickness=5):

> st2 := CURVES(arc3D,COLOUR(RGB,0.,0.,1.), THICKNESS(5)):
st2 := rotate(st2,Pi/2,Pi,0):

cross

> cr1 := line([0.0,-0.1, 0.0],[0.0,0.1,0.0], color=green,thickness=5):
cr2 := line([0.0, 0.0,-0.1],[0.0,0.0,0.1], color=green,thickness=5):

transmission

> draw_transmission := proc(epsilon,theta1,theta2)
local mov_shaft,lead_shaft,cross:
mov_shaft := map(rotate,[ss1,st1] , theta1,0,0):
lead_shaft := map(rotate,map(rotate,[ss2,st2], theta2,0,0), 0,epsilon,0) :
cross := rotate(cr1, theta1,0,0), rotate(rotate(cr2,theta2,0,0), 0,epsilon,0):
display(mov_shaft,lead_shaft,cross, axes=normal, scaling=constrained):
end:

single configuration

> #nn:=5: draw_transmission(op(subs(a1,a2,data,solz[nn],[epsilon,theta1,theta2])));

animation

> display([seq( draw_transmission(op(subs(a1,a2,data,solz[i],[epsilon,theta1,theta2]))),i=1..np)], insequence=true, scaling=constrained);

[Maple Plot]