IV. Matlab: Torque Calculation

IV. Matlab: Torque Calculation

To calculate the torques required at the motor, we use the method of calculating instant centers of links 2 and 3. Below is our matlab code to implement this calculation and visualization. The results can be found at the bottom of the page or by using the table of contents to navigate there faster. 

Methodology

Dino Bank Code
clc clear all close all % Motor Max Operatable Torque polulu_T_stall = 5; %oz-in polulu_rpm = 11000; %RPM polulu_T_op = polulu_T_stall/2; polulu_gearbox = 131; polulu_T_op_geared = polulu_T_op * polulu_gearbox % Our Gearbox teamGbox = 40/16; T_op = polulu_T_op_geared * teamGbox; % Convert to N-m Nm_over_Ozin = 141.6119; T_op_Nm = T_op/Nm_over_Ozin; % Lenghts in inches a = 3.15; b= 6.89; c = 6.89; d = 8.94; f = c + 6.89; % inches to meters i_to_m = 0.0254; % L is in meters L1 = a * i_to_m; L2 = c * i_to_m; L3 = b * i_to_m; L4 = d * i_to_m; LP = f * i_to_m; qP = degtorad(0);%*pi/180; xaxis_max = 0.46%0.2; xaxis_min = -0.46; yaxis_max = 0.48; yaxis_min = -0.2; m = 1; %1kg g = 9.81; %Force Exerted by load N-m alpha = degtorad(45)%1* pi/180; % Rotation Matrix R = [cos(alpha) -sin(alpha); sin(alpha) cos(alpha)] dir = -1 % +1 or -1 % in degrees qstart = -80; qend = qstart+360; w2 = dir*100*2*pi/60; %RPM to rad/s %video writerObj = VideoWriter('4barAnim.avi'); open(writerObj); for index = qstart:1:qend i = (index-qstart)+1; q2 = dir*index; % Degree q2 = dir*index*pi/180; % Radian q2_i(i) = q2; K1 = L4 / L1; K2 = L4 / L3; K3 = (L1^2 - L2^2 + L3^2 +L4^2) / (2*L1*L3); K4 = L4 / L2; K5 = (L3^2 - L4^2 - L1^2 - L2^2) / (2*L1*L2); A = cos(q2) - K1 - K2*cos(q2) + K3; B = -2*sin(q2); C = K1 - (K2 + 1)*cos(q2) + K3; D = cos(q2) - K1 + K4*cos(q2) + K5; E = -2*sin(q2); F = K1 + (K4 - 1)*cos(q2) + K5; q4 = 2*atan((-B - sqrt(B^2 - 4*A*C)) / (2*A)); q3 = 2*atan((-E - sqrt(E^2 - 4*D*F)) / (2*D)); w3 = a/b*w2*sin(q4-q2)/sin(q3-q4); w3_i(i) = w3; % Calculate Instant Center w3_w1; I = [cos(q2), -cos(q4); sin(q2), -sin(q4)]; LI = inv(I)*[L4;0]; origin = [0; 0]; L_A = [L1*cos(q2); L1*sin(q2)]; L_B = L_A + [L2*cos(q3); L2*sin(q3)]; L_D = [L4*cos(0); L4*sin(0)]; L_C = L_D + [L3*cos(q4); L3*sin(q4)]; P = L_A + [LP*cos(q3 - qP); LP*sin(q3 - qP)]; L_AI = [LI(1)*cos(q2); LI(1)*sin(q2)]; L_DI = L_D + [LI(2)*cos(q4); LI(2)*sin(q4)]; % Plot Point P vA = L1*w2*[-sin(q2); cos(q2)]; vPA = LP*w3*[-sin(q3-qP); cos(q3-qP)]; vP = vA+vPA; % Force Direction F_load = [0;-m*g;0]; % Arm Vector From Point I to Point P R_load = P-L_AI; L_A = R*L_A; L_B = R*L_B; L_C = R*L_C; L_D = R*L_D; P = R*P; vP = R*vP; L_AI = R*L_AI; L_DI = R*L_DI; R_load = R*R_load; % Torque of Load on Point B T_Load = cross([R_load(1), R_load(2),0], F_load); T_Load_i(i) = T_Load(3); vP_i(i) = -vP(1);%norm(vP,2); vP_unit = vP/norm(vP,2); Px(i) = P(1); Py(i) = P(2); figure(1) plot(origin(1),origin(2),'ro','linewidth',3) hold on plot(-L_A(1),L_A(2),'ro','linewidth',2) plot(-L_B(1),L_B(2),'ro','linewidth',2) plot(-L_D(1),L_D(2),'ro','linewidth',3) %plot(L_C(1),L_C(2),'bx','linewidth',2) plot(-P(1),P(2),'ro','linewidth',4) % Plot Instant Center I1,3 plot(-L_AI(1),L_AI(2),'kx','linewidth',3) plot(-L_DI(1),L_DI(2),'co','linewidth',2) plot(-Px, Py,'rx') % Visualize Line of Instant Center line([-L_D(1) -L_DI(1)], [L_D(2) L_DI(2)],'color','y','linewidth',1) line([-L_A(1) -L_AI(1)], [L_A(2) L_AI(2)],'color','y','linewidth',1) line([origin(1) -L_A(1)], [origin(2) L_A(2)],'linewidth',2.5) line([-L_A(1) -L_B(1)], [L_A(2) L_B(2)],'linewidth',2.5) line([-L_D(1) -L_C(1)], [L_D(2) L_C(2)], 'linewidth',2.5) line([-L_A(1) -P(1)], [L_A(2) P(2)],'linewidth',2.5) line([-L_B(1) -P(1)], [L_B(2) P(2)],'linewidth',2.5) %Visualize R-vector %line( [-L_AI(1), -L_AI(1)-R_load(1)], [L_AI(2),L_AI(2)+R_load(2)], 'color','k'); %Scaled Velocity vPs = vP/10; quiver( -P(1), P(2), -vPs(1), vPs(2),'g'); % R vector quiver( -L_AI(1), L_AI(2), -R_load(1), R_load(2),'k'); % Torque Visualization quiver( -P(1), P(2), 0, (T_Load(3)/10),'m'); % Force Visualization quiver( -P(1), P(2), 0, F_load(2)/75,'k'); title('DinoBank','fontsize',15) xlabel('x','fontsize',15) ylabel('y','fontsize',15) %axis equal axis([xaxis_min, xaxis_max, yaxis_min, yaxis_max]) %pause(0.01) hold off frame = getframe; writeVideo(writerObj,frame); end close(writerObj); %Save video hold on h1 = figure(1) saveas(h1, '4Bar_path_plot.pdf'); plot(-Px,Py,'rx') hold off h2 = figure(2) plot(radtodeg(q2_i), fliplr(vP_i)) title('velP in x direction') xlabel('theta 2 deg') ylabel('vel P m/s') saveas(h2, 'xVelofP'); h3 = figure(3) plot(radtodeg(q2_i), T_Load_i); xlabel('theta 2 deg'); ylabel('Torque on theta 3'); saveas(h3, 'torqueOn3.pdf'); h4 = figure(4) MA = w2*(1./w3_i); plot(radtodeg(q2_i), MA); xlabel('theta 2 deg'); ylabel('Mechanical Advantage w2/w3'); saveas(h4, 'Ma.pdf'); h5 = figure(5) hold on plot(radtodeg(q2_i), T_Load_i./MA); plot(radtodeg(q2_i), T_op_Nm*ones(1,size(q2_i,2)),'r'); plot(radtodeg(q2_i), -T_op_Nm*ones(1,size(q2_i,2)),'r'); title('Torque Seen by Motor (Nm)') xlabel('theta 2 deg'); ylabel('Torque Nm'); legend ('Torque Required', 'Operating Torque Available'); saveas(h5, 'TorqueAtMotor.pdf');

Visualization and Torque and Force Simulation

 

Results

Mechanical Advantage

Motor Torque Required