Buenas, actualmente estoy diseñando un brazo robotico, la interfaz la hice en Matlab y el programa hace los calculos de los movimientos que deben realizar los motores.
Los motores que estoy utilizando son de corriente directa de 12V con encoder, el sentido de giro y velocidad es controlado con ayuda de una placa L298D, todo anda bien cuando los motores hacen el primer movimiento. Sin embargo cuando tienen que hacer un segundo movimiento los motores giran muy rápido y pareciera que no respetan el valor PWM que estoy fijando para el arranque.
Este es el código en Matlab para un motor, básicamente los otros 2 motores funcionan igual.
motor1 = round(q(1) - mq(1)); %%q(1) - angulo deseado mq(1)-angulo anterior
if(motor1>0)
motor1 = abs(motor1);
for x = mq(1):0.5:q(1)
y=x*pi/180;
w.R1.rotation = [0 1 0 y];
vrdrawnow
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pulsos = -1.3491*motor1^1.1978;
conteo = 0;
a.digitalWrite(22,1)
a.digitalWrite(24,0)
while(conteo>pulsos)
vel = round(((pulsos - conteo)/pulsos)*80);
a.analogWrite(4,vel);
conteo = a.encoderRead(0);
end
a.digitalWrite(22,0)
pause(1)
conteo = a.encoderRead(0)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif(motor1<0)
motor1 = abs(motor1);
for x = mq(1):-0.5:q(1)
y=x*pi/180;
w.R1.rotation = [0 1 0 y];
vrdrawnow
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pulsos = 1.3491*motor1^1.1978;
conteo = 0;
a.digitalWrite(22,0)
a.digitalWrite(24,1)
while(conteo<pulsos)
vel = round(((pulsos - conteo)/pulsos)*80);
a.analogWrite(4,vel);
conteo = a.encoderRead(0);
end
a.digitalWrite(24,0)
pause(1)
conteo = a.encoderRead(0)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
mq(1)=q(1);
Si intento hacer un tercer movimiento los motores ya no se mueven, aqui revise que valor en el encoder y la cantidad de pulsos que muestra sobrepasa el deseado por lo cual no se mueve. Pero no se porque me da ese valor si no se ha movido en lo absoluto.
-Martin