Vamos a desmontar uno de los motores paso a paso
y a controlarlo con un driver de los que se usan en las impresoras 3D, conocidos como POLOLU. Más concretamente es el modelo A4988
Este tipo de driver tiene el siguiente esquema de funcionamiento:
Nuestros motores paso a paso tienen 5 cables y por lo tanto tienen un esquema como este:
Aquí nos surgieron las primeras dudas, ¿Cómo conectar un controlador para motores paso a paso de 4 hilos a un motor con 5 hilos?
Lo primero que hicimos fue identificar los hilos de cada bobina y el hilo "común" con un polímetro. Nos damos cuenta de que el conector del motor tiene 4 hilos y uno rojo, separado, que se une al hilo rojo del resto de los motores del brazo (este hilo es el común). Decidimos dejar el cable rojo (común) sin conectar e intentar controlar el motor con los otros 4 hilos.
Usamos la fuente de alimentación original del brazo para alimentar una placa Arduino UNO a 5V y el POLOLU a 12V.
Vamos a realizar una sencilla programación que nos permita dar impulsos desde una salida de Arduino a la entrada "step" del POLOLU. Las bobinas del motor las conectamos al 1B y 1A (primera bobina) y 2B y 2A (segunda bobina), VMOT y GND a 12V, VDD y GND a 5V, RESET y SLEEP puenteados y todos los demás pines sin conectar.
Es importante conectar el Arduino y el POLOLU a la misma fuente de alimentación para evitar interferencias en la señal de control.
Este es un ejemplo del código que se puede cargar en Arduino para mover el motor paso a paso del "hombro" o de la "cintura":
/* Control del movimiento de un motor paso a paso en bucle
*
* by Juan Primo Huerta
*
*/
// Declaración de los pines de entrada y salida
const int stepPin1 = 7;
const int dirPin1 = 4;
int vel = 7000; //velocidad del motor (a mayor valor menor velocidad) Velocidad de referencia con MS1,MS2 y MS3 en LOW -> Máximo valor 3500; Mínimo valor: 8000
int pulsosM1 = 700; //pulsos para mover el motor 1. Valor de referencia -> 300
void setup() {
// Fijar cada pin como entrada o salida
pinMode(stepPin1,OUTPUT);
pinMode(dirPin1,OUTPUT);
}
void loop() {
digitalWrite(dirPin1,HIGH); //Cambia la dirección de la rotación
delay(1000);
// Avanza "pulsosM1" en dirección horaria
for(int x = 0; x < pulsosM1; x++) {
digitalWrite(stepPin1,HIGH);
delayMicroseconds(vel);
digitalWrite(stepPin1,LOW);
delayMicroseconds(vel);
}
digitalWrite(dirPin1,LOW); //Cambia la dirección de la rotación
delay(1000);
// Avanza "pulsosM1" en dirección antihoraria
for(int j = 0; j < pulsosM1; j++) {
digitalWrite(stepPin1,HIGH);
delayMicroseconds(vel);
digitalWrite(stepPin1,LOW);
delayMicroseconds(vel);
}
}
Mediante este código el motor se movería primero en una dirección, esperaría un segundo, se movería en la dirección contraria, esperaría otro segundo y repetiría esta secuencia por siempre.
Y aquí tenemos los resultados:
Y aquí tenemos los resultados:
Hemos conseguido mover el primer motor mediante un POLOLU A4988 y un Arduino UNO, ¡¡esto va bien!!





Comentarios
Publicar un comentario