Photo by eberhard 🖐 grossgasteiger / Unsplash

Controla tu motor paso a paso 28BYJ-48 con L298N

Arduino 14 de jun. de 2023

Este artículo será el tercero sobre el tema del control de motores, después de los dos sobre cómo controlar un motor de corriente continua con el L293D y con la placa L298N, la misma que utilizaremos en este artículo.

Y es que es un tema importante, ya que casi siempre necesitaras motores para que tu proyecto pueda interactuar con el mundo físico de una forma interesante.

Así pues, esta vez vamos a echarle un vistazo a cómo controlar un motor paso a paso utilizando nuestra placa amiga, la L298N. ¡Vamos allá!

¿Qué es un motor paso a paso?

Un motor paso a paso es un motor de corriente continua sin escobillas con un estátor (la parte exterior que no gira) con varias bobinas, que actúan de electroimán, y un rotor (la parte móvil) con un sistema (imanes permanentes o construcción laminada) que se ve atraída a las bobinas del estátor.

Activando y desactivando las bobinas del estátor en una secuencia concreta, el rotor se ver forzado a seguir este movimiento, siempre viéndose atraído por la siguiente etapa. Este comportamiento nos otorga un control en lazo abierto bastante bueno, por lo que es un motor muy útil si queremos precisión para tareas sencillas que no requieran de muchos sensores externos.

A continuación podemos ver como un motor paso a paso rota al encender cada una de las bobinas. En este caso el rotor tiene forma de engranaje, de tal forma que al activar un electroimán, el diente más próximo a él se ve atraído y hace girar el rotor, pero deja el diente más cercano al siguiente electroimán un poco por detrás de este, posición idónea para repetir el proceso al encender la siguiente bobina:

StepperMotor.gif

El motor paso a paso que utilizaremos en este tutorial es el motor 28BY-48, que puedes encontrar justo debajo:

💡
En calidad de Afiliado de Amazon, obtengo ingresos por las compras adscritas que cumplen los requisitos aplicables

Motor paso a paso 28BYJ-48

Ver en Amazon

Puente H

Para controlar el encendido y apagado de las bobinas, utilizaremos un puente H, el L298N, que ya hemos cubierto en artículos anteriores:

https://ardumaster.com/modulo-driver-puente-h-l298n-con-arduino/

Aunque en este caso utilizaremos los 2 canales para poder alimentar las 4 fases del motor.

La placa L298N viene con un conector para motores paso a paso, por lo que la instalación es muy sencilla, basta con introducir el conector del motor paso a paso en el enchufe de la placa:

Esquemático

A continuación podemos ver el cableado del proyecto, consiste en la alimentación de la placa mediante el Arduino (consulta la alimentación de la placa a través del Arduino en este artículo) y el conexionado de esta con el motor, se trata de un circuito sencillo:

Esquemático de conexiones.
Si tu motor paso a paso tiene 4 cables, puedes conectarlos a las salidas de los motores A y B

Código

En cuanto al código, existen 2 configuraciones válidas, una que nos otorga un poco más de par a una velocidad un poco más reducida, y otro más sencillo pero más rápido.

Empezaremos probando el ejemplo con más par:

Ver en Github
const unsigned long tiempoCiclo=5;

void setup(){
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
}

void loop(){
  //vamos hacia delante por orden
  //A,AB,B,BC,C,CD,D,DA...

  //A: 2 HIGH
  digitalWrite(2,HIGH);
  delay(tiempoCiclo);

  //AB: 2 HIGH, 3 HIGH
  digitalWrite(3,HIGH);
  delay(tiempoCiclo);

  //B: 3 HIGH
  digitalWrite(2,LOW);
  delay(tiempoCiclo);

  //BC: 3 HIGH, 4 HIGH
  digitalWrite(4,HIGH);
  delay(tiempoCiclo);

  //C: 4 HIGH
  digitalWrite(3,LOW);
  delay(tiempoCiclo);

  //CD: 4 HIGH, 5 HIGH
  digitalWrite(5,HIGH);
  delay(tiempoCiclo);

  //D: 5 HIGH
  digitalWrite(4,LOW);
  delay(tiempoCiclo);

  //DA: 5 HIGH 2 HIGH
  digitalWrite(2,HIGH);
  delay(tiempoCiclo);

  //Bajamos el 5 a low para empezar el ciclo de nuevo con A
  digitalWrite(5,LOW);
}
A,AB,B,BC,C,CD,D,DA...

La idea básica es ir avanzando por las 4 bobinas del motor en 8 fases, por lo que si las bobinas son A, B, C y D, las fases serían las siguientes:

Fase 1 Fase 2 Fase 3 Fase4 Fase 5 Fase 6 Fase 7 Fase 8
A ALTO ALTO bajo bajo bajo bajo bajo ALTO
B bajo ALTO ALTO ALTO bajo bajo bajo bajo
C bajo bajo bajo ALTO ALTO ALTO bajo bajo
D bajo bajo bajo bajo bajo ALTO ALTO ALTO

Esto nos otorga un par y una precisión mejor que la alternativa que veremos más abajo.

Como último comentario, la variable constante que definimos al principio, tiempoCiclo nos indica el tiempo que pasa entre fase y fase y gobierna la velocidad del motor.

Veamos ahora una secuencia más sencilla:

Ver en Github
const unsigned long tiempoCiclo=5;

void setup(){
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
}

void loop(){
  //vamos hacia delante por orden
  //A,B,C,D,D...

  //A: 2 HIGH
  digitalWrite(5,LOW);
  digitalWrite(2,HIGH);
  delay(tiempoCiclo);

  //B: 3 HIGH
  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
  delay(tiempoCiclo);

  //C: 4 HIGH
  digitalWrite(3,LOW);
  digitalWrite(4,HIGH);
  delay(tiempoCiclo);

  //D: 5 HIGH
  digitalWrite(4,LOW);
  digitalWrite(5,HIGH);
  delay(tiempoCiclo);
}
A,B,C,D

Que obedece al siguiente esquema:

Fase 1 Fase 2 Fase 3 Fase4
A ALTO bajo bajo bajo
B bajo ALTO bajo
bajo
C bajo bajo ALTO bajo
D bajo bajo bajo ALTO

Se trata de la misma idea, pero las fases se han simplificado.

Conclusión

La precisión y simplicidad de estos motores los convierte en opciones excelentes a la hora de implementar movimiento sencillo en un proyecto. Ya que la distancia entre pasos está definida, no suelen acumular demasiado error y es fácil controlarlos en lazo abierto, por lo que son ampliamente utilizados en sistemas precisos y sencillos, como las impresoras 3D.

Dicho esto, estoy deseando ver qué proyectos creas con estos motores, espero haberte ayudado a dar el primer paso en el uso de estos componentes ;).


Si estás buscando una alternativa económica a Arduino, sobre todo si es la segunda o tercera placa, recomiendo las alternativas económicas de Elegoo que puedes encontrar en Amazon, tal y como explico en mi guía de compras:

Elegoo compatible Arduino UNO

Ver en Amazon

Etiquetas