ESP8266 - Motor paso a paso

Este tutorial le enseña cómo usar el ESP8266 para controlar un motor paso a paso mediante el controlador L298N. En detalle, aprenderemos:

El tutorial es aplicable a todo tipo de motores paso a paso bipolares con cuatro cables. Tomará como ejemplo un motor paso a paso NEMA 17.

Controlador ESP8266 NodeMCU para motor paso a paso L298N

Si quieres controlar otro tipo de motor paso a paso, consulta este ESP8266 - 28BYJ-48 Stepper Motor tutorial.

Hardware Requerido

1×ESP8266 NodeMCU
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 ESP8266
1×(Recomendado) Divisor de Alimentación para ESP8266 Tipo-C

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

Existen dos tipos comunes de motores paso a paso:

  • bipolar: este motor tiene 4 cables
  • unipolar: este motor tiene entre 5 y 6 cables

Para un motor paso a paso unipolar de 6 hilos, podemos utilizar cuatro de sus seis cables y controlarlo como si fuera un motor paso a paso bipolar.

Para motores paso a paso unipolares de 5 hilos, consulte ESP8266 - control del motor paso a paso 28BYJ-48 usando el controlador ULN2003.

El énfasis de este tutorial está exclusivamente en el motor paso a paso bipolar.

Esquema de pines del motor paso a paso bipolar

El pinout del motor paso a paso bipolar tiene 4 pines. Diferentes fabricantes utilizan varios nombres para los pines del motor. La siguiente tabla proporciona algunos de los nombres de pines más 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
Diagrama de pines del motor paso a paso bipolar

La secuencia de pines, la rotulación de los cables y los colores de los cables pueden variar entre fabricantes. Es necesario leer la hoja de datos o el manual para comprender la correlación entre el color del cable y el nombre del pin. La imagen de arriba también muestra los detalles de dos motores distintos con un etiquetado de cables diferente y colores de cables distintos.

Pasos por Revolución

La especificación del motor indica DEG_PER_STEP. Dependiendo del tipo de control, STEP_PER_REVOLUTION se puede determinar utilizando la tabla que se muestra a continuación:

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 indica que tiene 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 aumentar la velocidad de un ventilador turco?

ESP8266 puede generar señales para hacer funcionar el motor paso a paso. Sin embargo, las señales del ESP8266 carecen del voltaje y/o la corriente necesarias que requiere el motor paso a paso. En consecuencia, se requiere un controlador de hardware entre el ESP8266 y el motor paso a paso. Este controlador tiene dos funciones:

  • Aumentar las señales de control del ESP8266 (corriente y voltaje)
  • Proteger al ESP8266 de las altas corrientes y del voltaje utilizados para alimentar el motor paso a paso

Existen varios tipos de controladores de hardware que pueden usarse para gestionar motores paso a paso. Uno de los controladores de hardware más utilizados para controlar motores paso a paso es el controlador L298N.

Acerca del controlador L298N

Un controlador L298N puede utilizarse para controlar dos motores de CC o un motor paso a paso. Este tutorial le enseña cómo utilizarlo para controlar un motor paso a paso.

Pinout del controlador L298N

Disposición de pines del controlador L298N

El controlador L298N tiene 11 pines y tres puentes:

  • VCC pin: Este pin suministra energía al motor y puede estar entre 5 y 35 V.
  • GND pin: Este es un pin de tierra común y debe conectarse a GND (0 V).
  • 5V pin: Este pin suministra energía para el módulo L298N y puede alimentarse con 5V desde ESP8266.
  • IN1, IN2, IN3, IN4 pins: Estos están conectados a los pines del ESP8266 para recibir la señal de control que controla el motor paso a paso.
  • OUT1, OUT2, OUT3, OUT4 pins: Estos están conectados al motor paso a paso.
  • ENA, ENB jumpers: Estos se utilizan para habilitar el motor paso a paso y tanto el jumper ENA como el ENB deben permanecer en su lugar.
  • 5V-EN jumper: Si se mantiene en su lugar, la alimentación para el módulo L298N proviene de VCC y no es necesario conectar nada al pin de 5V. Si se retira, la alimentación debe suministrarse al módulo L298N a través de un pin de 5V.

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 voltios.
  • Uno para el funcionamiento interno del módulo L298N (pines 5V y GND): de 5 a 7 voltios. Si el jumper 5V-EN se deja puesto, no es necesario este suministro de energía.

Diagrama de Cableado

Diagrama de cableado del controlador L298N para motor paso a paso con ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Para obtener m\u00e1s informaci\u00f3n, consulte Pines del ESP8266 y c\u00f3mo alimentar ESP8266 y otros componentes.

※ Nota:

  • Mantenga los tres jumpers en el módulo L298N en su lugar si la fuente de alimentación del motor es de 12 V o menos.
  • La disposición de los pines en los motores paso a paso puede diferir entre fabricantes. Consulte la tabla a continuación para garantizar el cableado correcto.

Tabla de cableado entre ESP8266 y el controlador L298N

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

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

Important!: No preste atención al orden de los cables del motor paso a paso en la imagen del diagrama de cableado. Es solo una ilustración. La disposición de los pines en los motores paso a paso puede variar según el fabricante. Asegúrese de que su cableado siga la tabla 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 sugerimos que revise la hoja de datos, la especificación o el manual del motor paso a paso. Asegúrese de que incluya la correlación entre el color y el nombre de los pines. Por ejemplo, este motor paso a paso proporciona la asignación tal como se ve en la siguiente imagen:

Asignación de colores de las bobinas del motor paso a paso

Usando el mapeo, la tabla de cableado es:

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 las tablas de cableado presentadas arriba, OUT1 y OUT2, así como OUT3 y OUT4, pueden intercambiarse. Esto aumenta el número de configuraciones de cableado posibles. Sin embargo, esto también puede hacer que el motor cambie su dirección de rotación (hacia el sentido horario o antihorario, o viceversa).

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

Controlar un motor paso a paso puede ser un desafío, especialmente cuando necesitamos hacerlo sin interrupciones. Afortunadamente, la biblioteca AccelStepper lo facilita muchísimo.

El IDE de Arduino incluye una biblioteca Stepper integrada. Sin embargo, no recomendamos utilizar esta biblioteca como:

  • Contiene una función bloqueante que impide que el ESP8266 realice otras tareas mientras controla el motor paso a paso.
  • Carece de características suficientes.

En su lugar, sugerimos que utilice la biblioteca AccelStepper. Esta biblioteca proporciona:

  • Aceleración
  • Desaceleración
  • Conducción en pasos completos y a medio paso
  • La capacidad de controlar varios motores paso a paso a la vez, con cada motor capaz de moverse de forma independiente
  • Desventaja: No admite el accionamiento por micro-pasos

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

Podemos lograr la posición deseada del motor paso a paso mediante:

  1. Establecer la posición actual como punto de referencia
  2. Establecer el punto de referencia como la posición actual
stepper.moveTo(desiredPosition); // move motor one revolution

※ Nota:

La función stepper.moveTo() no bloquea, lo que es una gran ventaja de la biblioteca. Sin embargo, al usarla, debemos tener cuidado:

  • Asegúrate de que 'stepper.run()' se llame lo más a menudo posible, preferiblemente dentro de la función void loop().
  • Evita usar la función delay() mientras el motor está en movimiento.
  • No uses las funciones Serial.print() o Serial.println() mientras el motor esté en funcionamiento, ya que esto ralentizará su movimiento.

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

Podemos regular tanto la velocidad como 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 conecta el motor como se indica, girará en una dirección:

  • Dirección horaria: cuando el motor se mueve de una posición más baja a una posición más alta (Incremento de posición)
  • Dirección antihoraria: cuando el motor se desplaza de una posición más alta a una posición más baja (Decremento de posición)
  • Si la posición actual es 100 y le damos la orden al motor de ir a 200, girará en dirección horaria.
  • Cuando la posición actual es -200 y se le indica al motor que vaya a -100, girará en dirección horaria.
  • Si la posición actual es 200 y se le ordena al motor ir a 100, girará en dirección antihoraria.
  • Si la posición actual es -100 y se le indica al motor ir a -200, girará en dirección antihoraria.

※ Nota:

Como se ha señalado anteriormente, si intercambias OUT1 con OUT2, o OUT3 con OUT4, el aumento en la posición puede ser en sentido antihorario y la disminución en la posición puede ser en sentido horario.

Cómo detener un motor paso a paso

  • El motor paso a paso se detendrá cuando alcance la posición deseada.
  • Si se desea una detención inmediata, se puede usar la función stepper.stop().

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

El código a continuación:

  • Hace que el motor gire una revolución en sentido horario
  • Pausa el motor durante 5 segundos
  • Hace que el motor gire una revolución en sentido antihorario
  • Detiene el motor durante 5 segundos
  • Repite este proceso continuamente
/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp8266/esp8266-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, D1, D2, D5, D6); 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 ESP8266 en el IDE de Arduino, siga estos pasos:

  • Consulta el tutorial cómo configurar el entorno para ESP8266 en el IDE de Arduino si es la primera vez que usas ESP8266.
  • Conecta los componentes tal como se muestran en el diagrama.
  • Conecta la placa ESP8266 a tu computadora con un cable USB.
  • Abre el IDE de Arduino en tu computadora.
  • Elige la placa ESP8266 correcta, como (p. ej. NodeMCU 1.0 (Módulo ESP-12E)), y su respectivo puerto COM.
  • Haz clic en el icono Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca “AccelStepper”, luego localiza la biblioteca AccelStepper creada por Mike McCauley.
  • Haz clic en el botón Instalar para instalar la biblioteca AccelStepper.
Biblioteca AccelStepper para ESP8266 NodeMCU

Copie el código y ábralo con el IDE de Arduino.

Haz clic en el botón Subir en el IDE de Arduino para subir el código al ESP8266.

Observará que el motor paso a paso realiza una revolución en sentido horario, se detiene durante 5 segundos, luego realiza una revolución en sentido antihorario y se detiene de nuevo durante otros 5 segundos. Este proceso se repite continuamente.

Verifique los resultados en el Monitor Serial.

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

Consulta la explicación línea por línea contenida en los 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!