Я разрабатываю компактный механизм для развертывания мачты. Идея состоит в том, что линейный привод для развертывания находится на другой стороне оси, и ползунок увеличивает рычаг рычага, чтобы привод мог развернуть мачту.
Я пробежал математику (подробно показано ниже) и написал код для симуляции. Я хочу знать, как связаны сила привода и длина рычага, и как сила изменяется в зависимости от угла.
Однако, когда я запускаю код, я получаю огромные пики в силе (см. Ниже, я ограничил силу до 10 ^ 6, чтобы лучше увидеть шаблон), но, например, я не понимаю, почему механизм заклинивает между 40 и 80 °. По какой-то причине перекрестное произведение HP с OP (то, что я называю рычагом со знаком F) проходит через ноль, но я не вижу причин, почему бы оно дало текущие размеры и установленный диапазон углов. Как я могу это исправить?
Оригинал:
С усилием, ограниченным в 200N:
И знаменатель F:
Приложение
Код:
close all
clear all
%See diagram for description of variables, units are metres
a = (2+10)*10^-3;
b = a;
c = 165*10^-3;
d = 70*10^-3;
h = 180*10^-3;
m = 8; %Mass of the mast in kg
g = 9.81; %Acceleration of gravity in m/s²
%Range of the input variables
thetaMin = 0*pi/180;
thetaMax = 100*pi/180;
tMin = 10*10^-3;
tMax = 100*10^-3;
%Vectors
theta = thetaMin:(thetaMax-thetaMin)/100:thetaMax;
t = tMin:(tMax-tMin)/100:tMax;
%Solve for F
F = zeros(length(t), length(theta)); %Actuator force
L = F; %Length of linear actuator
denominator = F; %Denominator of F, or "signed lever arm"
for i = 1:length(t)
for j = 1:length(theta)
M = [cos(theta(j)) sin(theta(j)) 0;
-sin(theta(j)) cos(theta(j)) 0;
0 0 1];
HP = M*[-t(i);
a;
0];
OP = [-b;
h;
0]+HP;
L(j,i) = norm(OP);
HG = M*[c;
-d;
0];
W = [0;
-m*g;
0];
weightMoment = HG(1)*W(2)-HG(2)*W(1); %cross(HG,W)
forceLever = 1/norm(OP)*(HP(1)*OP(2)-HP(2)*OP(1)); %1/norm(OP)*cross(HP,OP)
denominator(j,i) = forceLever;
F(j,i) = -weightMoment/forceLever;
end
end
%Plot results
[T,THETA] = meshgrid(t,theta);
figure(1)
surface(T*1000,THETA*180/pi,F)
ylabel('Angle (deg)')
xlabel('Slide length (mm)')
zlabel('Force (N)')
title('Actuator force')
figure(2)
surface(T*1000,THETA*180/pi,L*1000)
ylabel('Angle (deg)')
xlabel('Slide length (mm)')
zlabel('Actuator length (mm)')
figure(3)
surface(T*1000,THETA*180/pi,denominator*1000)
ylabel('Angle (deg)')
xlabel('Slide length (mm)')
zlabel('Signed lever arm')
источник
Ответы:
Если вы построите значения x OP и HP, они пересекают ноль, что кажется нефизическим.
Если присмотреться поближе, вы делаете свои вращения в обратном направлении, то есть вы делаете наши вращения в + тета, тогда как вы хотите войти в -тета.
Это то, что я часто делаю тоже. Чтобы исправить, просто замените theta на -theta в M.
Вот фигура F, когда вы делаете это, которая выглядит гораздо более разумной.
источник