Arduino - Controla un motor paso a paso utilizando el controlador L298N

En este tutorial, vamos a aprender:

El tutorial puede aplicarse a cualquier tipo de motor paso a paso bipolar (cuatro cables). El tutorial tomará como ejemplo un motor paso a paso NEMA 17.

Controlador de motor paso a paso para Arduino L298N

Acerca del motor paso a paso

Hay dos tipos populares de motores paso a paso:

  • bipolar: este tipo de motor tiene 4 cables.
  • unipolar: este tipo de motor tiene 5 cables o 6 cables.

Para un motor paso a paso unipolar de 6 hilos, podemos usar cuatro de los seis hilos y controlarlo como un motor paso a paso bipolar.

Para un motor paso a paso unipolar de 5 hilos, vea Arduino - control 28BYJ-48 stepper motor using ULN2003 driver

Este tutorial se centra únicamente en el motor paso a paso bipolar.

Disposición de pines del motor paso a paso bipolar

La asignación de pines del motor paso a paso bipolar tiene 4 pines. Dependiendo de los fabricantes, los pines del motor tienen varios nombres. La tabla a continuación muestra algunos nombres de pines ampliamente utilizados.

PIN NO Naming 1 Naming 2 Naming 3
1 A+ A A
2 A- A C
3 B+ B B
4 B- B D
Pinout del motor paso a paso bipolar

El orden de los pines, la nomenclatura de los cables y el color de los cables pueden variar entre fabricantes. Debe leer la hoja de datos o el manual para ver la correspondencia entre el color del cable y el nombre del pin. La imagen anterior también muestra las especificaciones de dos motores diferentes, con diferentes nomenclaturas de cables y colores de cables.

Pasos por revolución

La especificación del motor especifica el grado por paso (llamémoslo DEG_PER_STEP). Dependiendo del método de control, los pasos por revolución (llamemos STEP_PER_REVOLUTION) se calculan según la tabla siguiente:

Control method Steps per Revolution Real degree per step
Full-step STEP_PER_REVOLUTION = 360 / DEG_PER_STEP DEG_PER_STEP
Half-step STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * 2 DEG_PER_STEP / 2
Micro-step (1/n) STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * n DEG_PER_STEP / n

Por ejemplo, si la hoja de datos del motor especifica 1,8 grados por paso:

Control method Steps per Revolution Real degree per step
Full-step 200 steps/revolution 1.8°
Half-step 400 steps/revolution 0.9°
Micro-step (1/n) (200 * n) steps/revolution (1.8 / n)°

Cómo controlar un motor paso a paso usando Arduino

Arduino puede generar señales para controlar el motor paso a paso. Sin embargo, las señales de Arduino no tienen suficiente voltaje y/o corriente que requiere el motor paso a paso. Por lo tanto, necesitamos un controlador de hardware entre Arduino y el motor paso a paso. El controlador realiza dos funciones:

  • Amplificar las señales de control del Arduino (corriente y voltaje)
  • Proteger al Arduino de las corrientes y voltajes altos que se utilizan para alimentar el motor paso a paso.

Existen muchos tipos de controladores de hardware que se pueden usar para controlar motores paso a paso. El controlador L298N es uno de los controladores de hardware más utilizados para el control de motores paso a paso.

Acerca del controlador L298N

Un único controlador L298N puede usarse para controlar dos motores de corriente continua o un motor paso a paso. En este tutorial, aprendemos a usarlo para controlar el motor paso a paso.

Pinout del controlador L298N

Pinout del controlador L298N

El controlador L298N tiene 11 pines y tres jumpers:

  • Pin VCC: suministra energía al motor. Puede estar entre 5 y 35 V.
  • Pin GND: es un pin de tierra común; debe conectarse a GND (0 V).
  • Pin de 5V: suministra energía para el módulo L298N. Puede ser alimentado por 5V desde Arduino.
  • Pines IN1, IN2, IN3, IN4: están conectados a los pines de Arduino para recibir la señal de control que controla el motor paso a paso.
  • Pines OUT1, OUT2, OUT3, OUT4: están conectados al motor paso a paso.
  • Jumpers ENA, ENB: se utilizan para habilitar el motor paso a paso. Debes mantener en su lugar ambos jumpers ENA y ENB.
  • Puente 5V-EN: si mantenemos colocado el puente 5V-EN, la alimentación para el módulo L298N proviene de VCC; no necesitamos conectar nada al pin de 5V. Si quitamos el puente 5V-EN, debemos alimentar el módulo L298N a través de un pin de 5V.

Como se describió arriba, el controlador L298N tiene dos fuentes de alimentación de entrada:

  • Uno para el motor paso a paso (pines VCC y GND): de 5 a 35 V.
  • Uno para el funcionamiento interno del módulo L298N (pines de 5V y GND): de 5 a 7 V. Si el jumper 5V-EN se mantiene en su lugar, no es necesario conectar este pin a nada.

Diagrama de Cableado

Diagrama de cableado del motor paso a paso para Arduino con el controlador L298N

This image is created using Fritzing. Click to enlarge image

※ Nota:

  • Por favor, mantenga los tres puentes (jumpers) en el módulo L298N en su lugar (en caso de que la fuente de alimentación del motor sea menor o igual que 12 V)
  • El orden de los pines en los motores paso a paso puede variar entre fabricantes. Por favor, consulte la tabla que aparece a continuación para el cableado correcto.

Tabla de cableado entre Arduino y el controlador L298N

Arduino pins L298N pins
7 IN1
6 IN2
5 IN3
4 IN4

Tabla de cableado entre el controlador L298N y el motor paso a paso

¡Importante!: Por favor, no te preocupes por el orden de los cables del motor paso a paso en la imagen del diagrama de cableado de arriba. Es solo un ejemplo. El orden de los pines en los motores paso a paso puede variar entre fabricantes. Asegúrate de que tu cableado siga la tabla que se muestra a continuación.

L298N pins Stepper motor pins Or Or
OUT1 A+ A A
OUT2 A- A C
OUT3 B+ B B
OUT4 B- B D

Antes de comprar un motor paso a paso, le recomendamos revisar la hoja de datos, las especificaciones o el manual del motor paso a paso. Asegúrese de que incluyan la asignación entre el color y el nombre de los pines. Por ejemplo, este motor paso a paso proporciona la asignación como se muestra en la imagen a continuación:

Mapeo de colores de las bobinas del motor paso a paso

A partir de ese mapeo, la tabla de cableado se convierte en:

L298N pins stepper motor pins wire color
OUT1 A black wire
OUT2 C green wire
OUT3 B red wire
OUT4 D blue wire

※ Nota:

En todas las tablas de cableado anteriores entre el motor paso a paso y el controlador L298N, podemos intercambiar OUT1 con OUT2, OUT3 con OUT4. Por lo tanto, hay más formas de realizar el cableado. Sin embargo, si los intercambiamos, la dirección de giro de los motores podría cambiar (de sentido horario a sentido antihorario, y viceversa).

Cómo controlar un motor paso a paso usando un controlador L298N.

Controlar un motor paso a paso no es una tarea sencilla, especialmente cuando queremos controlarlo de forma no bloqueante. Afortunadamente, gracias a la biblioteca AccelStepper, controlar el motor paso a paso se vuelve pan comido.

El IDE de Arduino también tiene una biblioteca Stepper integrada. Sin embargo, no recomendamos usar esta biblioteca porque:

  • La biblioteca proporciona la función de bloqueo. Eso significa que impide que Arduino haga otras tareas mientras controla el motor paso a paso.
  • No tiene funciones suficientes.

En su lugar, le recomendamos que use la biblioteca AccelStepper. Esta biblioteca soporta:

  • Aceleración
  • Desaceleración.
  • Conducción en pasos completos y en medio paso.
  • Varios motores paso a paso simultáneos, con accionamiento concurrente independiente en cada motor.
  • Desventaja: NO admite el accionamiento por micro-pasos

Cómo controlar la posición de un motor paso a paso mediante el controlador L298N

Podemos mover el motor paso a paso a la posición deseada utilizando:

stepper.moveTo(desiredPosition); // move motor one revolution

※ Nota:

La función stepper.moveTo() no es bloqueante. Este es un gran punto de la biblioteca. Sin embargo, debemos prestar atención al usar esta función:

  • Llama a stepper.run() tan a menudo como sea posible. Debe llamarse en la función void loop().
  • No utilices la función delay() cuando el motor esté moviéndose.
  • No deben utilizarse las funciones Serial.print() y Serial.println() cuando el motor esté moviéndose. Estas funciones hacen que el motor paso a paso se mueva más lentamente.

Cómo controlar la velocidad de un motor paso a paso mediante el controlador L298N

No solo podemos controlar la velocidad, sino también la aceleración y la desaceleración utilizando algunas funciones simples.

stepper.setAcceleration(50.0); // set acceleration/deceleration stepper.setSpeed(200); // set desired speed

Cómo controlar la dirección del motor paso a paso mediante el controlador L298N

Si haces el cableado como se indica arriba, el motor girará en:

  • Dirección horaria: si controlamos el motor desde una posición a una posición superior (Incremento de posición)
  • Dirección antihoraria: si controlamos el motor desde una posición a una posición inferior (Decremento de posición)

Por ejemplo:

  • Si la posición actual es 100 y controlamos el motor a 200, el motor gira en sentido horario
  • Si la posición actual es -200 y controlamos el motor a -100, el motor gira en sentido horario
  • Si la posición actual es 200 y controlamos el motor a 100, el motor gira en sentido antihorario
  • Si la posición actual es -100 y controlamos el motor a -200, el motor gira en sentido antihorario

※ Nota:

Como se mencionó anteriormente, si intercambias OUT1 con OUT2, o OUT3 con OUT4, el incremento de la posición puede ser en sentido antihorario y la disminución de la posición puede ser en sentido horario.

Cómo detener un motor paso a paso

  • El motor paso a paso se detendrá automáticamente una vez que alcance la posición deseada.
  • El motor paso a paso puede forzarse a detenerse de inmediato en cualquier momento utilizando la función stepper.stop().

Código de Arduino - Código de motor paso a paso

El código de abajo hace:

  • Gira el motor una revolución en sentido horario
  • Detén el motor durante 5 segundos
  • Gira el motor una revolución en sentido antihorario
  • Detén el motor durante 5 segundos
  • Ese proceso se repite una y otra vez
/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, 7, 6, 5, 4); long moveToPosition = STEP_PER_REVOLUTION; void setup() { Serial.begin(9600); stepper.setAcceleration(200.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position to 0 stepper.moveTo(STEP_PER_REVOLUTION); // move motor one revolution, in clockwise direction Serial.println("Motor moving in clockwise direction"); } void loop() { if (stepper.distanceToGo() == 0) { Serial.println("Motor is stopped"); delay(5000); // stop 5 seconds stepper.setCurrentPosition(0); // reset position to 0 moveToPosition = -1 * moveToPosition; // reverse direction stepper.moveTo(moveToPosition); // move motor one revolution if (stepper.distanceToGo() > 0) Serial.println("Motor moving in clockwise direction"); else if (stepper.distanceToGo() < 0) Serial.println("Motor moving in anticlockwise direction"); } // Serial.print(F("position: ")); // Serial.println(stepper.currentPosition()); stepper.run(); // MUST be called as frequently as possible }

Pasos R\u00e1pidos

  • Ve al icono de Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca “AccelStepper”, luego encuentra la librería AccelStepper de Mike McCauley
  • Haz clic en el botón Instalar para instalar la librería AccelStepper.
Librería AccelStepper para Arduino
  • Copia el código anterior y ábrelo con Arduino IDE
  • Haz clic en el botón Subir en Arduino IDE para subir el código a Arduino
  • Verás:
    • El motor paso a paso gira una revolución en sentido horario
    • El motor paso a paso se detiene durante 5 segundos
    • El motor paso a paso gira una revolución en sentido antihorario
    • El motor paso a paso se detiene durante 5 segundos
    • El proceso anterior se ejecuta de forma repetida.
  • Ver el resultado en el Monitor serie
COM6
Send
Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Explicación del código

¡Lee la explicación línea por línea en las líneas de comentarios del código fuente!

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!