Arduino Nano ESP32 - Motor paso a paso

En este tutorial, vamos a aprender cómo usar Arduino Nano ESP32 para controlar el motor paso a paso:

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

Arduino Nano ESP32 motor paso a paso

Hardware Requerido

1×Arduino Nano ESP32
1×Cable USB Tipo-A a Tipo-C (para PC USB-A)
1×Cable USB Tipo-C a Tipo-C (para PC USB-C)
1×Stepper Motor Nema 17
1×Módulo Controlador de Motor L298N
1×Adaptador de Corriente 12V
1×Conector de Alimentación DC
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para Arduino Nano
1×(Recomendado) Placa de Expansión Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentación para Arduino Nano ESP32

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca del motor paso a paso

Hay dos tipos comunes de motores paso a paso:

  • Bipolar: Estos motores vienen con 4 cables.
  • Unipolar: Los motores unipolares pueden tener 5 o 6 cables. En el caso de un motor paso a paso unipolar de 6 cables, puedes usar efectivamente cuatro de los seis cables para controlarlo como si fuera un motor paso a paso bipolar.

Si estás interesado específicamente en un motor paso a paso unipolar de 5 hilos, puedes consultar el tutorial titulado Arduino Nano ESP32 - Control del motor paso a paso 28BYJ-48 usando el controlador ULN2003.

Sin embargo, este tutorial está exclusivamente dedicado a los motores paso a paso bipolares.

Disposición de pines del motor paso a paso bipolar

Un motor paso a paso bipolar tiene cuatro pines, y estos pines pueden llamarse de manera diferente dependiendo del fabricante. A continuación, encontrarás una tabla con algunos nombres de pines comunes:

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 de motor paso a paso bipolar

La disposición de los pines, los nombres de los cables y los colores de los cables pueden diferir de un fabricante a otro. Para entender cómo se corresponden los colores de los cables con los nombres de los pines, es esencial consultar la hoja de datos o el manual del usuario proporcionado por el fabricante. La imagen de arriba ilustra las especificaciones de dos motores distintos, cada uno con su propia nomenclatura de cables y sus convenciones de color de los cables.

Pasos por revolución

La especificación del motor indica el grado por paso (llamémoslo DEG_PER_STEP). Dependiendo del método de control, los pasos por revolución (llamémoslos STEP_PER_REVOLUTION) se calculan como se muestra en 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 con Arduino Nano ESP32

El Arduino Nano ESP32 puede generar señales para controlar el motor paso a paso, pero estas señales pueden carecer de los niveles de tensión y corriente necesarios que exige el motor paso a paso. Por ello, se necesita un controlador de hardware intermedio para cerrar la brecha entre el Arduino Nano ESP32 y el motor paso a paso. Este controlador realiza dos funciones principales:

  • Amplificando señales de control: Aumenta la corriente y el voltaje de las señales de control que provienen del ESP32, asegurando que cumplan con los requisitos del motor paso a paso.
  • Protegiendo el ESP32: Al mismo tiempo, protege al Arduino Nano ESP32 de los niveles de corriente y voltaje más altos que se utilizan para alimentar el motor paso a paso, evitando daños potenciales.

Existen varios controladores de hardware disponibles para controlar motores paso a paso, y una opción comúnmente utilizada es el controlador L298N.

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, aprenderemos a usarlo para controlar el motor paso a paso.

Pinout del controlador L298N

Esquema de pines del controlador L298N

El controlador L298N tiene 11 pines y tres jumpers:

  • Pin VCC: suministra energía para el 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 Nano ESP32.
  • Pines IN1, IN2, IN3, IN4: están conectados a los pines del ESP32 para recibir la señal de control para controlar 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 dejar puestos ambos jumpers ENA y ENB.
  • Puente 5V-EN: si mantenemos el puente 5V-EN en su lugar, la alimentación para el módulo L298N proviene de VCC, no necesitamos conectar nada al pin de 5V. Si retiramos el puente 5V-EN, debemos suministrar energía al módulo L298N a través de un pin de 5V.

Como se describe anteriormente, 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 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 de Arduino Nano ESP32 para motor paso a paso con el controlador L298N

This image is created using Fritzing. Click to enlarge image

※ Nota:

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

Tabla de cableado entre Arduino Nano ESP32 y el controlador L298N

Arduino Nano ESP32 pins L298N pins
D5 IN1
D4 IN2
D3 IN3
D2 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 anterior. 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 de abajo.

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 que consulte la hoja de datos, las especificaciones o el manual del motor paso a paso. Asegúrese de que proporcionen la asignación entre el color del pin y su nombre. 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

Basado en 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 puede cambiar (de sentido horario a sentido antihorario, y viceversa).

Cómo controlar un motor paso a paso utilizando 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 incorporada Stepper. Sin embargo, no recomendamos usar esta biblioteca porque:

  • La biblioteca proporciona la función bloqueante. Esto significa que bloquea al Arduino Nano ESP32 para que no pueda realizar otras tareas mientras controla el motor paso a paso.
  • No tiene funciones suficientes.

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

  • Aceleración
  • Desaceleración.
  • Conducción en pasos completos y medio paso.
  • Varios motores paso a paso simultáneos, con accionamiento concurrente independiente en cada motor paso a paso.
  • Desventaja: No admite conducción de micropasos

Cómo controlar la posición del 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 bloquea. Este es un gran punto de la biblioteca. Sin embargo, debemos prestar atención al usar esta función:

  • Llama a 'stepper.run()' con la mayor frecuencia posible. Debe llamarse en la función void loop().
  • No utilice la función delay() cuando el motor esté moviéndose.
  • No utilice 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 despacio.

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

No solo podemos controlar la velocidad, sino también la aceleración y la desaceleración mediante el uso de 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 en sentido horario: si controlamos el motor desde una posición a una posición más alta (Incremento de posición)
  • Dirección en sentido antihorario: si controlamos el motor desde una posición a una posición más baja (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 ser forzado a detenerse de inmediato en cualquier momento utilizando la función stepper.stop().

Código para Arduino Nano ESP32 - Código de motor paso a paso

Lo que hace el código a continuación:

  • Rotar el motor en sentido horario una revolución
  • Detener el motor durante 5 segundos
  • Rotar de vuelta el motor una revolución en sentido antihorario
  • Detener el motor durante 5 segundos
  • Ese proceso se repite una y otra vez
/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) // The Arduino Nano ESP32 pin entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper(AccelStepper::FULL4WIRE, D5, D3, D4, D2); 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

Para empezar con Arduino Nano ESP32, siga estos pasos:

  • Si eres nuevo en Arduino Nano ESP32, consulta el tutorial sobre cómo configurar el entorno para Arduino Nano ESP32 en el IDE de Arduino.
  • Conecte los componentes según el diagrama proporcionado.
  • Conecte la placa Arduino Nano ESP32 a su computadora usando un cable USB.
  • Inicie el IDE de Arduino en su computadora.
  • Seleccione la placa Arduino Nano ESP32 y su puerto COM correspondiente.
  • Abra el Administrador de Bibliotecas haciendo clic en el icono Administrador de Bibliotecas en la barra de navegación izquierda del IDE de Arduino.
  • Busque “AccelStepper”, luego localice la biblioteca AccelStepper de Mike McCauley.
  • Haga clic en el botón Instalar para instalar la biblioteca AccelStepper.
Biblioteca AccelStepper para Arduino Nano ESP32
  • Copia el código anterior y ábrelo con el IDE de Arduino
  • Haz clic en el botón Subir en el IDE de Arduino para subir el código al Arduino Nano ESP32
  • Verás:
    • El motor paso a paso realiza una revolución en sentido horario
    • El motor paso a paso se detiene durante 5 segundos
    • El motor paso a paso realiza una revolución en sentido antihorario
    • El motor paso a paso se detiene durante 5 segundos
    • El proceso anterior se ejecuta repetidamente.
  • 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 comentario 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!