برنامه متلب برای تحلیل سرعت و شتاب به روش اعداد مختلط

 

 

 

% velocity & acceleration analysis

 

 

 

clear all; clc; close all; format long

fprintf('velocity & acceleration analysis \n')

fprintf('Results \n\n')

AB = 0.15 ;

AC = 0.10 ;

CD = 0.15 ;

DF = 0.40 ;

AG = 0.30 ;

phi = pi/6 ;

fprintf('phi = phi1 = %g (degrees) \n', phi*180/pi)

fprintf('\n')

fprintf('Position analysis \n\n')

xA = 0; yA = 0; rA = [xA yA 0];

fprintf('rA = [ %g, %g, %g ] (m)\n', rA)

xC = 0; yC = AC; rC = [xC yC 0];

fprintf('rC = [ %g, %g, %g ] (m)\n', rC)

xB = AB*cos(phi); yB = AB*sin(phi); rB = [xB yB 0];

fprintf('rB = [ %g, %g, %g] (m)\n', rB)

eqnD1 = '( xDsol - xC )^2 + ( yDsol - yC )^2 = CD^2';

eqnD2 = '(yB-yC)/(xB-xC)=(yDsol-yC)/(xDsol-xC)';

solD = solve(eqnD1, eqnD2, 'xDsol, yDsol');

xDpositions = eval(solD.xDsol);

yDpositions = eval(solD.yDsol);

xD1 = xDpositions(1); xD2 = xDpositions(2);

yD1 = yDpositions(1); yD2 = yDpositions(2);

if(phi>=0&&phi<=pi/2)||(phi >=3*pi/2&&phi<=2*pi)

if ...

xD1 <= xC , xD=xD1; yD=yD1; else xD=xD2; yD=yD2;end

else

if ...

xD1 >= xC , xD=xD1; yD=yD1; else xD=xD2; yD=yD2;end

end

rD = [xD yD 0];

fprintf('rD = [ %g, %g, %g ] (m)\n', rD)

phi2 = atan((yB-yC)/(xB-xC)); phi3 = phi2;

phi4 = atan((yD-yA)/(xD-xA))+pi; phi5 = phi4;

xF=xD+DF*cos(phi3); yF=yD+DF*sin(phi3);

rF=[xF yF 0];

fprintf('rF = [ %g, %g, %g ] (m)\n', rF)

xG=xA+AG*cos(phi5); yG=yA+AG*sin(phi5);

rG=[xG yG 0];

fprintf('rG = [ %g, %g, %g ] (m)\n', rG)

fprintf('phi2 = phi3 = %g (degrees) \n', phi2*180/pi)

fprintf('phi4 = phi5 = %g (degrees) \n', phi4*180/pi)

fprintf('\n')

xC1 = xB/2; yC1 = yB/2; rC1 = [xC1 yC1 0];

fprintf('rC1 = [ %g, %g, %g ] (m)\n', rC1)

rC2 = rB;

fprintf('rC2 = rB = [ %g, %g, %g ] (m)\n', rC2)

xC3 = (xD+xF)/2; yC3 = (yD+yF)/2; rC3 = [xC3 yC3 0];

fprintf('rC3 = [ %g, %g, %g ] (m)\n', rC3)

rC4 = rD;

fprintf('rC4 = rD = [ %g, %g, %g ] (m)\n', rC4)

xC5 = (xA+xG)/2; yC5 = (yA+yG)/2; rC5 = [xC5 yC5 0];

fprintf('rC5 = [ %g, %g, %g ] (m)\n', rC5)

 

 

 

% Graphic of the mechanism

 

 

plot([0,xB],[0,yB],'r-o',[xD,xF],[yD,yF],...

[xA,xG],[yA,yG],'g-o'),...

xlabel('x (m)'), ylabel('y (m)'),...

title('positions for \phi = 30 (deg)'),...

text(xA,yA,' A'), text(xB,yB,' B=C2'),...

text(xC,yC,' C'), text(xD,yD,' D=C4'),...

text(xF,yF,' F'),text(xG,yG,' G'),...

text(xC1,yC1,' C1'), text(xC3,yC3,' C3'),...

text(xC5,yC5,' C5'), ...

axis([-0.3 0.3 -0.3 0.3]), grid on

fprintf('\n')

 

 

fprintf('Velocity and acceleration analysis \n\n')

 

 

 

 

n = 50.;

omega1 = [ 0 0 pi*n/30 ]; alpha1 = [0 0 0 ];

vA = [0 0 0 ]; aA = [0 0 0 ];

vB1 = vA + cross(omega1,rB); vB2 = vB1;

aB1 = aA + cross(alpha1,rB) - ...

dot(omega1,omega1)*rB;

aB2 = aB1;

fprintf ...

('aB1 = aB2 = [ %g, %g, %g ] (m/s^2)\n', aB1)

omega3z=sym('omega3z','real');

alpha3z=sym('alpha3z','real');

vB32=sym('vB32','real');

aB32=sym('aB32','real');

omega3 = [ 0 0 omega3z ];

vC = [0 0 0 ];

vB3 = vC + cross(omega3,rB-rC);

vB3B2 = vB32*[ cos(phi2) sin(phi2) 0];

eqvB = vB3 - vB2 - vB3B2;

eqvBx = eqvB(1); eqvBy = eqvB(2);

solvB = solve(eqvBx,eqvBy);

omega3zs=eval(solvB.omega3z);

vB32s=eval(solvB.vB32);

Omega3 = [0 0 omega3zs]; Omega2 = Omega3;

v32 = vB32s*[cos(phi2) sin(phi2) 0];

vD3 = vC + cross(Omega3,rD-rC); vD4 = vD3;

aB3B2cor = 2*cross(Omega3,v32);

alpha3 = [ 0 0 alpha3z ];

aC = [0 0 0 ];

aB3 = aC + cross(alpha3,rB-rC) - ...

dot(Omega3,Omega3)*(rB-rC);

aB3B2 = aB32*[ cos(phi2) sin(phi2) 0];

eqaB = aB3 - aB2 - aB3B2 - aB3B2cor;

eqaBx = eqaB(1); eqaBy = eqaB(2);

solaB = solve(eqaBx,eqaBy);

alpha3zs=eval(solaB.alpha3z);

aB32s=eval(solaB.aB32);

Alpha3 = [0 0 alpha3zs]; Alpha2 = Alpha3;

aD3 = aC + cross(Alpha3,rD-rC) - ...

dot(Omega3,Omega3)*(rD-rC);

aD4 = aD3;

fprintf('aD3 = aD4 = [ %g, %g, %g ] (m/s^2)\n', aD3)

omega5z=sym('omega5z','real');

alpha5z=sym('alpha5z','real');

vD54=sym('vD54','real');

aD54=sym('aD54','real');

omega5 = [ 0 0 omega5z ];

vD5 = vA + cross(omega5,rD-rA);

vD5D4 = vD54*[ cos(phi5) sin(phi5) 0];

eqvD = vD5 - vD4 - vD5D4;

eqvDx = eqvD(1); eqvDy = eqvD(2);

solvD = solve(eqvDx,eqvDy);

omega5zs = eval(solvD.omega5z);

vD54s = eval(solvD.vD54);

Omega5 = [0 0 omega5zs];

v54 = vD54s*[cos(phi5) sin(phi5) 0];

Omega4 = Omega5;

aD5D4cor = 2*cross(Omega5,v54);

alpha5 = [ 0 0 alpha5z ];

aD5 = aA + cross(alpha5,rD-rA) - ...

dot(Omega5,Omega5)*(rD-rA);

aD5D4 = aD54*[ cos(phi5) sin(phi5) 0];

eqaD = aD5 - aD4 - aD5D4 - aD5D4cor;

eqaDx = eqaD(1); eqaDy = eqaD(2);

solaD = solve(eqaDx,eqaDy);

alpha5zs = eval(solaD.alpha5z);

aD54s = eval(solaD.aD54);

Alpha5 = [0 0 alpha5zs]; Alpha4 = Alpha5;

aF = aC + cross(Alpha3,rF-rC) - ...

dot(Omega3,Omega3)*(rF-rC);

aG = aA + cross(Alpha5,rG-rA) - ...

dot(Omega5,Omega5)*(rG-rA);

fprintf('aF = [ %g, %g, %g ] (m/s^2)\n', aF)

fprintf('aG = [ %g, %g, %g ] (m/s^2)\n', aG)

fprintf ...

('omega4=omega5 = [%g, %g, %g] (rad/s)\n', Omega5)

fprintf('\n')

fprintf ...

('alpha1 = [%g, %g, %g] (rad/s^2)\n', alpha1)

fprintf ...

('alpha2=alpha3 = [%g, %g, %g](rad/s^2)\n', Alpha3)

fprintf ...

('alpha4=alpha5 = [%g, %g, %g](rad/s^2)\n', Alpha5)

fprintf('\n')

aC1 = aB1/2;

fprintf('aC1 = [ %g, %g, %g ] (m/s^2)\n', aC1)

aC2 = aB2;

fprintf('aC2=aB2 = [ %g, %g, %g ] (m/s^2)\n', aC2)

aC3 = (aD3+aF)/2;

fprintf('aC3 = [ %g, %g, %g ] (m/s^2)\n', aC3)

aC4 = aD3;

fprintf('aC4=aD4 = [ %g, %g, %g ] (m/s^2)\n', aC4)

aC5 = (aA+aG)/2;

fprintf('aC5 = [ %g, %g, %g ] (m/s^2)\n', aC5)

fprintf('\n')

 

 

 

 

 '