Arduino - Controla un motor paso a paso utilizando el controlador L298N
En este tutorial, vamos a aprender:
- Cómo usar el controlador L298N para controlar un motor paso a paso bipolar.
- Cómo controlar la posición de un motor paso a paso.
- Cómo controlar la velocidad del motor paso a paso.
- Cómo controlar la dirección del motor paso a paso.
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.

Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
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 |

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

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

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:

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:
※ 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.
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
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.

- 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
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.