Conectar Motor Nema 17, Controlador DV4988 y Arduino Nano

Creo que todos los que estamos en este mundillo de Arduino y los circuitos hemos soñado con construir nuestro propio robot uno con brazos, piernas, cara, ojos etc.. (o como a cada uno se lo imagine), el tema que en todas ideas existe un punto en común, “LOS MOTORES” existen muchos modelos, motores DC, motores bipolares, unipolares, etc…
Para cada necesidad puedes elegir el motor que mas te acomode y claro todo queda a tu criterio.

Para este caso explicaremos como controlar un motor paso a paso bipolar Nema 17, este es un motor súper utilizado por su costo versus calidad en las tan famosas impresoras 3D o CNC.

En este pequeño tutorial explicaremos el manejo de este motor con un controlador A4988 y usaremos un Arduino Nano para controlar el conjunto total.

Diagrama en Fritzing
nema17 A4988 Arduino Nano.fzz

nema17 A4988 Arduino Nano_bb

En el Diagrama podemos ver como conectamos el controlador A4988 al arduino
Detalle del controlador A4988 y sus conexiones.

pololuA4988

Por otra parte podemos ver el detalle de los cables del motor los cuales están identificados por color.

Negro A+
Verde A-
Rojo B+
Azul B-

nema1

Estos colores pueden cambiar en otros motores incluso en otro mismo Nema 17. Por lo general esta información esta disponible por quien lo venda.

Un punto importante es que en la conexión de tierra y voltaje que alimenta al motor debe ir un condensador de al menos 10mf, nótese que el condensador tiene polaridad lo cual debe respetarse ya que si se conecta al revés literalmente el condensador explotara. La función del condensador en este caso es la de estabilizar el voltaje entregado al motor para evitar cambios en la línea de alimentación ya que como el motor tiene un consumo alto esto podría producir perdidas de señales digitales entregadas al motor de paso a paso, Para este caso el condensador tendría la tarea de mantener esta pequeña corriente almacenada disponible todo eltiempo.

El código lo que hace es girar en un sentido y otro en forma de loop declarando pin 12 como controlador de Step, pin 13 como dirección y velocidad la cual se declara en 1700, mientras mas alta se declare la variable la velocidad del motor será mas lenta y mientras mas baja la velocidad del motor será mas rápida(claramente).
Motor2.ino

#define VELOCIDAD 1700
 
int steps = 8;
int direccion = 7;
int reset = 5;
int pasos = 3500;
 
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(steps, OUTPUT);
pinMode(direccion, OUTPUT);
pinMode(reset, OUTPUT);
}
 
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(reset, LOW); //Mientras reset este en LOW el motor permanecerá apagado y no sufrirá. El chip apagará todos los puertos y no leerá comandos.
delay(100);
digitalWrite(reset, HIGH); //Cuando reset se encuentre en HIGH el motor arrancará y leerá los comandos enviados.
digitalWrite(direccion, HIGH);
 
for (int i = 0; i<pasos; i++) //Equivale al numero de vueltas (200 es 360º grados) o micropasos
{
digitalWrite(steps, HIGH); // This LOW to HIGH change is what creates the
digitalWrite(steps, LOW); // al A4988 de avanzar una vez por cada pulso de energia.
delayMicroseconds(VELOCIDAD); // Regula la velocidad, cuanto mas bajo mas velocidad.
 
}
 
digitalWrite(reset, LOW); //Mientras reset este en LOW el motor permanecerá apagado y no sufrirá. El chip apagará todos los puertos y no leerá comandos.
delay(100);
digitalWrite(reset, HIGH); //Cuando reset se encuentre en HIGH el motor arrancará y leerá los comandos enviados.
digitalWrite(direccion, LOW);
 
for (int i = 0; i<pasos; i++) //Equivale al numero de vueltas (200 es 360º grados) o micropasos
{
 
digitalWrite(steps, LOW); // LOW to HIGH hace que el motor avance ya que da la orden
digitalWrite(steps, HIGH); // al A4988 de avanzar una vez por cada pulso de energia.
delayMicroseconds(VELOCIDAD); // Regula la velocidad, cuanto mas bajo mas velocidad.
}
}