Cómo controlar la velocidad de un motor DC con un módulo ESP32 y L298N

Cómo controlar la velocidad de un motor DC con un módulo ESP32 y L298N

Controlar motores de corriente continua puede ser una tarea sencilla con los componentes y el entendimiento adecuados. En este tutorial, exploraremos cómo controlar dos motores de corriente continua utilizando el microcontrolador ESP32 y el módulo controlador de motor L298N. Al final de esta guía, podrás ajustar la velocidad y la dirección de tus motores en función de las señales PWM del ESP32, permitiendo aplicaciones versátiles en robótica y automatización.

ESP32_L298N_DC_principal

El video que acompaña a este tutorial ofrece una demostración visual de todo el proceso, incluyendo el cableado y la programación (en el video a las 00:00).

Hardware explicado

Módulo de controlador de motor L298N
Módulo controlador de motor L298N

Para lograr el control del motor, utilizaremos el ESP32 y el módulo controlador de motor L298N. El ESP32 es un microcontrolador potente con capacidades de Wi-Fi y Bluetooth, lo que lo hace ideal para proyectos de IoT. El L298N es un controlador de motor en puente H que nos permite controlar la dirección y la velocidad de los motores utilizando señales PWM. El módulo L298N cuenta con dos circuitos en puente H, lo que significa que podemos controlar dos motores de manera independiente. Cada puente H permite controlar la dirección del motor (en sentido horario o antihorario) y la velocidad variando la señal PWM. Al conectar los pines de habilitación y entrada del L298N al ESP32, podemos manipular los motores de manera efectiva.

Detalles de la hoja de datos

Fabricante STMicroelectronics
Número de parte L298N
Tensión de lógica/entrada/salida 5 V
Tensión de suministro 5-46 V (VS)
Corriente de salida (por canal) 2 A máx/canal (máx. abs.)
Corriente de pico (por canal) 2.5 A
Guía de frecuencia PWM 1 kHz - 15 kHz
Umbrales de lógica de entrada 2.5 V (alto), 1.5 V (bajo)
Caída de tensión / RDS(on)/ saturación 1.8 V a 2 A
Límites térmicos 150 °C
Paquete Multiwatt de 15 pines
Notas / variantes Controlador de motor de puente H dual

  • Asegúrate de que la clasificación de voltaje del motor coincida con la tensión de alimentación del L298N.
  • Utilice un enfriamiento adecuado para la operación continua a altas corrientes.
  • Conecta las tierras de todos los componentes para evitar referencias flotantes.
  • Utiliza una frecuencia PWM adecuada para la aplicación (1-15 kHz).
  • Ten cuidado con las clasificaciones de corriente máxima para evitar el sobrecalentamiento.
  • Prueba la dirección del motor antes de finalizar el cableado para evitar daños.
  • Considere capacitores de desacoplamiento en la fuente de alimentación para estabilidad.

Instrucciones de cableado

ESP32_L298N_wiring

Para conectar el L298N al ESP32, comienza conectando los dos motores de corriente continua a los terminales de salida del L298N. Conecta el Motor 1 a los terminales etiquetados comoOUT1yOUT2, y Motor 2 aOUT3yOUT4. La polaridad de los motores no importa ya que el L298N manejará la dirección. A continuación, conecta tu fuente de alimentación externa alVMSyGNDterminales en el L298N. Asegúrese de que la tensión sea adecuada para sus motores, típicamente entre 5V y 46V. El5Vel terminal en el L298N se puede utilizar para alimentar el ESP32 si es necesario, pero asegúrese de que se cumplan los requisitos de corriente. Para los pines de control, conecteENAa GPIO 19,IN1a GPIO 18, yIN2a GPIO 5 para el Motor 1. Para el Motor 2, conectaIN3a GPIO 17,IN4a GPIO 16, yENBa GPIO 4. Finalmente, conecta las tierras del ESP32 y del L298N juntas para asegurar una referencia común.

Ejemplos de código y tutorial

Los siguientes fragmentos de código ilustran cómo controlar los motores utilizando la biblioteca L298N diseñada para el ESP32. La biblioteca simplifica el proceso de envío de comandos a los motores. Primero, se incluye la biblioteca necesaria y se definen los parámetros del motor:


#include 
#define ENA 19
#define IN1 18
#define IN2 5
#define IN3 17
#define IN4 16
#define ENB 4
Robojax_L298N_DC_motor robot(IN1, IN2, ENA, CHA, IN3, IN4, ENB, CHB);

En este fragmento, definimos los pines de control para ambos motores. La instancia de la bibliotecarobotse crea, que se utilizará para controlar los motores a lo largo del programa. A continuación, configuramos la comunicación serial e inicializamos la instancia del robot en elsetup()función:


void setup() {
  Serial.begin(115200);
  robot.begin();
}

Esto inicializa la comunicación serial para depuración y prepara la biblioteca de control del motor para su funcionamiento. Finalmente, la lógica de control principal se coloca en elloop()función, donde podemos rotar los motores y ajustar su velocidad:


void loop() {
  robot.rotate(motor1, 80, CW); // run motor1 at 80% speed in CW direction
  delay(3000); // wait for 3 seconds
  robot.brake(1); // brake motor1
  delay(2000); // wait for 2 seconds
}

Este extracto demuestra cómo rotar el Motor 1 al 80% de velocidad en dirección de las agujas del reloj durante tres segundos antes de frenar. El código completo incluye lógica adicional para el Motor 2 y velocidades variables, que se pueden ver en el programa completo cargado debajo del artículo.

Demostración / Qué Esperar

Al ejecutarse, los motores deberían responder a las señales PWM enviadas desde el ESP32. Verás el Motor 1 girando en sentido horario a un 80% de velocidad, seguido de una acción de frenado. El programa también incluye lógica para gestionar variaciones de velocidad de forma gradual, que se puede probar observando la aceleración del motor del 0% al 100% (en el video a las 05:00). Los errores comunes incluyen no conectar adecuadamente las tierras, lo que puede llevar a un comportamiento errático, y exceder las calificaciones de corriente del L298N, causando que se sobrecaliente. Asegúrate de monitorizar el comportamiento del motor y ajustar los parámetros según sea necesario.

Marcas de tiempo del video

  • 00:46 Introducción
  • 04:07 Cableado ESP32 con L298N
  • 06:10 Preparando el IDE de Arduino para trabajar con placas ESP32
  • 08:15 Código de Arduino explicado
  • 15:00 Demostración del control de un solo motor
  • 16:00 Demostración del control de 2 motores de CC
  • 17:00 Demostración de alimentación del ESP32 desde L298N y alimentación externa

Imágenes

Módulo de controlador de motor L298N
Módulo de controlador de motor L298N
ESP32_L298N_DC_main
ESP32_L298N_DC_main
ESP32_L298N_wiring
ESP32_L298N_wiring
278-Library Example for L298N Module to control DC motors
Idioma: C++
¡Copiado!

Cosas que podrías necesitar

Recursos y referencias

Archivos📁

Bibliotecas de Arduino (zip)

Archivo de Fritzing