Control de motores dc con esp32 y el controlador l298n

Valoración: 4.29 (1548 votos)

Este tutorial te mostrará cómo controlar la dirección y la velocidad de un motor DC usando un ESP32 y el controlador de motor L298N. Primero, veremos rápidamente cómo funciona el controlador de motor L298N. Luego, te mostraremos un ejemplo de cómo controlar la velocidad y la dirección de un motor DC con el controlador de motor L298N usando el ESP32 programado con Arduino IDE.

Prerrequisitos

Antes de continuar, asegúrate de verificar los siguientes requisitos previos:

  • ESP32 con Arduino IDE
  • Controlador de motor L298N
  • Motor DC
  • Cable de conexión

Introducción al controlador de motor L298N

Existen varias formas de controlar un motor DC. El método que usaremos aquí es adecuado para la mayoría de los motores de aficionados, que requieren 6V o 12V para funcionar.

Usaremos el controlador de motor L298N, que puede manejar hasta 3A a 35V. Además, nos permite conducir dos motores DC simultáneamente, lo cual es perfecto para construir un robot.

El controlador de motor L298N se muestra en la siguiente figura:

Pinout del controlador de motor L298N

Echemos un vistazo al pinout del controlador de motor L298N y veamos cómo funciona.

El controlador de motor tiene un bloque de dos terminales en cada lado para cada motor. OUT1 y OUT2 a la izquierda y OUT3 y OUT4 a la derecha.

  • OUT1: terminal + del motor DC A
  • OUT2: terminal - del motor DC A
  • OUT3: terminal + del motor DC B
  • OUT4: terminal - del motor DC B

En la parte inferior, tiene un bloque de tres terminales con +12V, GND y +5V. El bloque de terminales +12V se utiliza para encender los motores. El terminal +5V se utiliza para encender el chip L298N. Sin embargo, si el puente está en su lugar, el chip se alimenta usando la fuente de alimentación del motor y no es necesario suministrar 5V a través del terminal +5V.

Importante: a pesar del nombre del terminal +12V, puede suministrar cualquier voltaje entre 5V y 35V (pero 6V a 12V es el rango recomendado).

Nota: si suministra más de 12V, debe quitar el puente y suministrar 5V al terminal +5V.

En este tutorial, usaremos 4 baterías AA de 5V que combinadas producen aproximadamente 6V, pero puede usar cualquier otra fuente de alimentación adecuada. Por ejemplo, puede usar una fuente de alimentación de banco para probar este tutorial.

En resumen:

  • +12V: El terminal +12V es donde debe conectar la fuente de alimentación del motor.
  • GND: fuente de alimentación GND
  • +5V: proporcionar 5V si se retira el puente. Actúa como una salida de 5V si el puente está en su lugar.
  • Puente: puente en su lugar: utiliza la fuente de alimentación del motor para encender el chip. Puente retirado: debe proporcionar 5V al terminal +5V. Si suministra más de 12V, debe retirar el puente.

En la parte inferior derecha tiene cuatro pines de entrada y dos terminales de habilitación. Los pines de entrada se utilizan para controlar la dirección de sus motores DC, y los pines de habilitación se utilizan para controlar la velocidad de cada motor.

  • IN1: Entrada 1 para el motor A
  • IN2: Entrada 2 para el motor A
  • IN3: Entrada 1 para el motor B
  • IN4: Entrada 2 para el motor B
  • EN1: Pin de habilitación para el motor A
  • EN2: Pin de habilitación para el motor B

Hay tapas de puente en los pines de habilitación de forma predeterminada. Debe quitar esas tapas de puente para controlar la velocidad de sus motores. De lo contrario, se detendrán o girarán a la velocidad máxima.

Controlar motores DC con el controlador L298N

Ahora que está familiarizado con el controlador de motor L298N, veamos cómo usarlo para controlar sus motores DC.

Pines de habilitación

Los pines de habilitación son como un interruptor de ENCENDIDO y APAGADO para sus motores. Por ejemplo:

  • Si envía una señal ALTA al pin de habilitación 1, el motor A está listo para ser controlado y a la velocidad máxima.
  • Si envía una señal BAJA al pin de habilitación 1, el motor A se apaga.
  • Si envía una señal PWM, puede controlar la velocidad del motor. La velocidad del motor es proporcional al ciclo de trabajo. Sin embargo, tenga en cuenta que para ciclos de trabajo pequeños, los motores pueden no girar y producir un zumbido continuo.
SEÑAL EN EL PIN DE HABILITACIÓN ESTADO DEL MOTOR
ALTA Motor habilitado
BAJA Motor no habilitado
PWM Motor habilitado: velocidad proporcional al ciclo de trabajo

Pines de entrada

Los pines de entrada controlan la dirección en la que giran los motores. La entrada 1 y la entrada 2 controlan el motor A, y la entrada 3 y 4 controlan el motor B.

Si aplica BAJA a la entrada 1 y ALTA a la entrada 2, el motor girará hacia adelante.

Si aplica la alimentación al revés: ALTA a la entrada 1 y BAJA a la entrada 2, el motor rotará hacia atrás.

El motor B se puede controlar utilizando el mismo método, pero aplicando ALTA o BAJA a la entrada 3 y la entrada

Por ejemplo, para el motor A, esta es la lógica:

Dirección Entrada 1 Entrada 2 Habilitar 1
Adelante 0 1 1
Atrás 1 0 1
Parar 0 0 0

Controlar 2 motores DC: ideal para construir un robot

Si desea construir un coche robot utilizando 2 motores DC, estos deben girar en direcciones específicas para que el robot vaya a la izquierda, a la derecha, hacia adelante o hacia atrás.

Por ejemplo, si desea que su robot avance, ambos motores deben girar hacia adelante. Para que vaya hacia atrás, ambos deben girar hacia atrás.

Para girar el robot en una dirección, debe girar el motor opuesto más rápido. Por ejemplo, para hacer que el robot gire a la derecha, habilite el motor de la izquierda y deshabilite el motor de la derecha. La siguiente tabla muestra las combinaciones de estado de los pines de entrada para las direcciones del robot.

DIRECCIÓN ENTRADA 1 ENTRADA 2 ENTRADA 3 ENTRADA 4
Adelante 0 1 0 1
Atrás 1 0 1 0
Derecha 0 1 0 0
Izquierda 0 0 0 1
Parar 0 0 0 0

Controlar un motor DC con ESP32: velocidad y dirección

Ahora que sabe cómo controlar un motor DC con el controlador de motor L298N, construyamos un ejemplo simple para controlar la velocidad y la dirección de un motor DC.

Conectar un motor DC al ESP32 (controlador de motor L298N)

El motor que controlaremos está conectado a los pines de salida del motor A, por lo que necesitamos conectar los pines ENABLEA, INPUT1 e INPUT2 del controlador de motor al ESP3Siga el siguiente diagrama esquemático para conectar el motor DC y el controlador de motor L298N al ESP3

LN298N Motor Driver Input 1 Input 2 Enable GND ESP32 GPIO 27 GPIO 26 GPIO 14 GND

Estamos usando los GPIOs de la tabla anterior para conectar al controlador de motor. Puede usar cualquier otro GPIO adecuado siempre que modifique el código en consecuencia. Obtenga más información sobre los GPIOs de ESP32: ESP32 Pinout Reference Guide.

Alimentando el controlador de motor LN298N

El motor DC requiere un gran salto en la corriente para moverse, por lo que los motores deben alimentarse utilizando una fuente de alimentación externa del ESP3Como ejemplo, estamos usando 4 baterías AA, pero puede usar cualquier otra fuente de alimentación adecuada. En esta configuración, puede usar una fuente de alimentación de 6V a 12V.

El interruptor entre el soporte de la batería y el controlador de motor es opcional, pero es muy útil para cortar y aplicar la alimentación. De esta manera, no necesita conectar y luego desconectar constantemente los cables para ahorrar energía.

Recomendamos soldar un condensador cerámico de 0.1uF a los terminales positivo y negativo del motor DC, como se muestra en el diagrama, para ayudar a suavizar cualquier pico de voltaje. (Nota: los motores también funcionan sin el condensador.)

Código: ESP32 con un motor DC: control de velocidad y dirección

El siguiente código controla la velocidad y la dirección del motor DC. Este código puede no tener una aplicación práctica en el entorno real, pero es un gran ejemplo para comprender cómo controlar la velocidad y la dirección de un motor DC con el ESP3

/ Rui Santos & Sara Santos - Random Nerd Tutorials Complete project details at https://RandomNerdTutorials.com/esp32-dc-motor-l298n-motor-driver-control-speed-direction/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. / // Motor A int motor1Pin1 = 27; int motor1Pin2 = 26; int enable1Pin = 14; // Setting PWM properties const int freq = 30000; const int pwmChannel = 0; const int resolution = 8; int dutyCycle = 200; void setup() { // sets the pins as outputs: pinMode(motor1Pin1, OUTPUT); pinMode(motor1Pin2, OUTPUT); pinMode(enable1Pin, OUTPUT); // configure LEDC PWM ledcAttachChannel(enable1Pin, freq, resolution, pwmChannel); Serial.begin(115200); // testing Serial.print("Testing DC Motor..."); } void loop() { // Move the DC motor forward at maximum speed Serial.println("Moving Forward"); digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, HIGH); delay(2000); // Stop the DC motor Serial.println("Motor stopped"); digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, LOW); delay(1000); // Move DC motor backwards at maximum speed Serial.println("Moving Backwards"); digitalWrite(motor1Pin1, HIGH); digitalWrite(motor1Pin2, LOW); delay(2000); // Stop the DC motor Serial.println("Motor stopped"); digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, LOW); delay(1000); // Move DC motor forward with increasing speed digitalWrite(motor1Pin1, HIGH); digitalWrite(motor1Pin2, LOW); while (dutyCycle <= 255){ ledcWrite(enable1Pin, dutyCycle); Serial.print("Forward with duty cycle: "); Serial.println(dutyCycle); dutyCycle = dutyCycle + 5; delay(500); } dutyCycle = 200; }

Sube el código a tu ESP3Asegúrate de tener seleccionada la placa y el puerto COM correctos. Echemos un vistazo a cómo funciona el código.

Declarando los pines del motor

Primero, define los GPIOs a los que están conectados los pines del motor. En este caso, la entrada 1 para el motor A está conectada a GPIO 27, la entrada 2 a GPIO 26 y el pin de habilitación a GPIO 1

int motor1Pin1 = 27; int motor1Pin2 = 26; int enable1Pin = 14;

Configurando las propiedades PWM para controlar la velocidad

Como hemos visto anteriormente, puede controlar la velocidad del motor DC aplicando una señal PWM al pin de habilitación del controlador de motor L298N. La velocidad será proporcional al ciclo de trabajo. Para usar PWM con el ESP32, primero debe configurar las propiedades de la señal PWM.

const int freq = 30000; const int pwmChannel = 0; const int resolution = 8; int dutyCycle = 200;

En este caso, estamos generando una señal de 30000 Hz en el canal 0 con una resolución de 8 bits. Comenzamos con un ciclo de trabajo de 200 (puede establecer un valor de ciclo de trabajo de 0 a 255).

Para la frecuencia que estamos usando, cuando aplica ciclos de trabajo menores que 200, el motor no se moverá y hará un zumbido extraño. Por eso, establecemos un ciclo de trabajo de 200 al principio.

Nota: las propiedades PWM que estamos definiendo aquí son solo un ejemplo. El motor funciona bien con otras frecuencias.

setup()

En el setup(), comienza estableciendo los pines del motor como salidas.

pinMode(motor1Pin1, OUTPUT); pinMode(motor1Pin2, OUTPUT); pinMode(enable1Pin, OUTPUT);

Necesita configurar un pin LEDC con las propiedades PWM que definió anteriormente usando la función ledcAttachChannel(), que acepta como argumentos el pin que desea controlar, la frecuencia, la resolución y el pwmChannel de la siguiente manera:

// configure LEDC PWM ledcAttachChannel(enable1Pin, freq, resolution, pwmChannel);

Moviendo el motor DC hacia adelante

En el loop() es donde se mueve el motor. El código está bien comentado sobre lo que hace cada parte del código. Para mover el motor hacia adelante, establece el pin de entrada 1 en BAJA y el pin de entrada 2 en ALTA. En este ejemplo, el motor acelera hacia adelante durante 2 segundos (2000 milisegundos).

// Move the DC motor forward at maximum speed Serial.println("Moving Forward"); digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, HIGH); delay(2000);

Moviendo el motor DC hacia atrás

Para mover el motor DC hacia atrás, aplica la alimentación a los pines de entrada del motor al revés. ALTA a la entrada 1 y BAJA a la entrada

// Move DC motor backwards at maximum speed Serial.println("Moving Backwards"); digitalWrite(motor1Pin1, HIGH); digitalWrite(motor1Pin2, LOW); delay(2000);

Deteniendo el motor DC

Para detener el motor DC, puede establecer el pin de habilitación en BAJA o establecer ambos pines de entrada 1 y 2 en BAJA. En este ejemplo, estamos estableciendo ambos pines de entrada en BAJA.

// Stop the DC motor Serial.println("Motor stopped"); digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, LOW); delay(1000);

Controlando la velocidad del motor DC

Para controlar la velocidad del motor DC, necesitamos cambiar el ciclo de trabajo de la señal PWM. Para eso, usa la función ledcWrite(), que acepta como argumentos el GPIO que emite la señal y el ciclo de trabajo, de la siguiente manera.

ledcWrite(enable1Pin, dutyCycle);

En nuestro ejemplo, tenemos un bucle while que aumenta el ciclo de trabajo en 5 en cada bucle.

// Move DC motor forward with increasing speed digitalWrite(motor1Pin1, HIGH); digitalWrite(motor1Pin2, LOW); while (dutyCycle <= 255){ ledcWrite(enable1Pin, dutyCycle); Serial.print("Forward with duty cycle: "); Serial.println(dutyCycle); dutyCycle = dutyCycle + 5; delay(500); }

Cuando la condición while ya no es verdadera, establecemos el ciclo de trabajo en 200 nuevamente.

dutyCycle = 200;

En este tutorial, le hemos mostrado cómo controlar la dirección y la velocidad de un motor DC usando un ESP32 y el controlador de motor L298N. En resumen:

  • Para controlar la dirección en la que gira el motor DC, utilice los pines de entrada 1 y
  • Aplique BAJA a la entrada 1 y ALTA a la entrada 2 para hacer girar el motor hacia adelante. Aplique la alimentación al revés para hacer que gire hacia atrás.
  • Para controlar la velocidad del motor DC, envíe una señal PWM al pin de habilitación. La velocidad del motor DC es proporcional al ciclo de trabajo.

Esperamos que este tutorial le haya sido útil.

Si quieres conocer otros artículos parecidos a Control de motores dc con esp32 y el controlador l298n puedes visitar la categoría Motor.

Subir