Type something to search...
Controlador L298N DC Motor para Arduino

Controlador L298N DC Motor para Arduino

Introduccion

Si bien eventualmente necesitarás aprender a controlar motores de CC para construir tu propio robot, probablemente necesitarás algo un poco más fácil para comenzar, y ahí es donde entra en juego el controlador de motor L298N. Puede controlar la velocidad y la dirección de giro de dos motores de CC.

Control de un motor de corriente continua

Solo podemos tener un control total sobre un motor de corriente continua si podemos controlar su velocidad y dirección de giro. Esto es posible combinando estas dos técnicas.

  • PWM – para controlar la velocidad
  • Puente H : para controlar la dirección de hilado

PWM – para controlar la velocidad

La velocidad de un motor de corriente continua se puede controlar modificando su voltaje de entrada. Una técnica muy utilizada para lograrlo es la modulación por ancho de pulso (PWM).

PWM es una técnica en la que el valor medio del voltaje de entrada se ajusta mediante el envío de una serie de pulsos ON-OFF. Este voltaje medio es proporcional al ancho de los pulsos, lo que se denomina ciclo de trabajo .

Cuanto mayor sea el ciclo de trabajo, mayor será el voltaje promedio aplicado al motor de CC, lo que dará como resultado un aumento en la velocidad del motor. Cuanto más corto sea el ciclo de trabajo, menor será el voltaje promedio aplicado al motor de CC, lo que dará como resultado una disminución en la velocidad del motor.

La siguiente imagen muestra la técnica PWM con varios ciclos de trabajo y voltajes promedio.

pwm

Puente H: para controlar la dirección

La dirección de giro de un motor de corriente continua se puede controlar modificando la polaridad de su voltaje de entrada. Una técnica muy utilizada para lograrlo es utilizar un puente en H.

Un circuito de puente H está formado por cuatro interruptores dispuestos en forma de H, con el motor en el centro.

Al cerrar dos interruptores específicos al mismo tiempo se invierte la polaridad del voltaje aplicado al motor, lo que provoca un cambio en la dirección de giro del motor.

La siguiente animación muestra el funcionamiento del circuito del puente H.

ejemplo puente h

Chip controlador de motor L298N

En el centro del módulo hay un gran chip negro con un disipador de calor grueso: el L298N.

l298

El chip L298N contiene dos puentes H estándar capaces de impulsar un par de motores de CC, lo que lo hace ideal para construir una plataforma robótica de dos ruedas.

El controlador de motor L298N tiene un rango de suministro de 5 V a 35 V y es capaz de suministrar una corriente continua de 2 A por canal, por lo que funciona muy bien con la mayoría de nuestros motores de CC.

Especificaciones técnicas

DESCRIPCIONVOLTAJE
Voltaje de salida del motor5 V – 35 V
Voltaje de salida del motor (recomendado)7 V – 12 V
Voltaje de entrada lógica5 V – 7 V
Corriente continua por canal2A
Disipación de potencia máxima25 W

Para mas detalles consulta la hoja de datos

Distribución de pines del módulo del controlador del motor L298N

El módulo L298N tiene 11 pines que le permiten comunicarse con el mundo exterior. La distribución de pines es la siguiente:

pines

Conozcamos cada pin uno por uno.

Pines de alimentación

El módulo del controlador del motor L298N recibe energía de un terminal de tornillo de 3 pines con paso de 3,5 mm.

pines individual

El controlador de motor L298N tiene dos pines de alimentación de entrada: VS y VSS.

VS: El pin alimenta el puente H interno del CI, que impulsa los motores. Este pin acepta voltajes de entrada que van desde 5 a 12 V.

VSSSe utiliza para alimentar los circuitos lógicos dentro del IC L298N y puede variar entre 5 V y 7 V. Tierraes el pin de tierra común.

Pines de salida Los canales de salida del controlador de motor L298N,SALIDA1 y SALIDA2para el motor A yOUT3 y OUT4Para el motor B, se separan hasta el borde del módulo con dos terminales de tornillo con un paso de 3,5 mm. Puede conectar dos motores de CC de 5 a 12 V a estos terminales.

pines salida

Cada canal del módulo puede suministrar hasta 2 A al motor de CC. Sin embargo, la cantidad de corriente suministrada al motor depende de la capacidad de la fuente de alimentación del motor.

Pines de control de dirección

Los pines de control de dirección permiten controlar si el motor gira hacia adelante o hacia atrás. Estos pines controlan los interruptores del circuito del puente H dentro del chip L298N.

pines direccion

El módulo tiene dos pines de control de dirección.IN1 y IN2Los pines controlan la dirección de giro del motor A; mientrasIN3 y IN4controlar la dirección de giro del motor B.

La dirección de giro del motor se puede controlar aplicando lógica ALTA (5 V) o lógica BAJA (Tierra) a estas entradas. El siguiente gráfico muestra varias combinaciones y sus resultados.

ENTRADA 1ENTRADA 2DIRECCION DE GIRO
Bajo(0)Bajo(0)Motor apagado
Alto(1)Bajo(0)Adelante
Bajo(0)Alto(1)Hacia atrás
Alto(1)Alto(1)Motor apagado

Pasadores de control de velocidad Los pines de control de velocidad EN y ENB Se utilizan para encender/apagar los motores y controlar su velocidad.

Si se colocan estos pines en posición ALTA, los motores girarán, mientras que si se colocan en posición BAJA, se detendrán. Sin embargo, con la modulación por ancho de pulso (PWM), se puede controlar la velocidad de los motores.

El módulo suele venir con un puente en estos pines. Cuando este puente está colocado, el motor gira a toda velocidad. Si desea controlar la velocidad de los motores mediante programación, retire los puentes y conéctelos a los pines habilitados para PWM del Arduino.

Regulador y puente de 5 V integrado

El módulo incluye un regulador 78M05 de 5 V que se puede habilitar o deshabilitar mediante un puente.

REGULADOR

Cuando este puente está en su lugar, el regulador de 5 V está habilitado y la fuente de alimentación lógica (VSS) se deriva de la fuente de alimentación del motor (VS). En este caso, el terminal de entrada de 5 V actúa como pin de salida y proporciona 5 V 0,5 A. Puede usarlo para alimentar un Arduino u otro circuito que necesite alimentación de 5 V.

Cuando se quita el puente, el regulador de 5 V se desactiva y tenemos que suministrar 5 V por separado a través del pin VSS.

Advertencia

Si la alimentación del motor es inferior a 12 V, puede dejar el puente en su lugar. Si es superior a 12 V, debe quitar el puente para evitar dañar el regulador de 5 V integrado.

Además, no suministre energía a los pines VSS y VS mientras el puente esté en su lugar.

Caída de tensión de L298N

El L298N tiene una caída de voltaje de aproximadamente 2 V. Esto se debe a que los transistores de conmutación internos tienen una caída de voltaje de aproximadamente 1 V cuando están polarizados en directa y, debido a que un puente H requiere que la corriente pase a través de dos transistores, la caída de voltaje total es de 2 V.

Por lo tanto, si conectas 12 V al terminal de alimentación del motor, los motores recibirán aproximadamente 10 V. Esto significa que un motor de 12 V CC nunca girará a máxima velocidad.

img1

Para que el motor funcione a su velocidad máxima, la fuente de alimentación del motor debe tener un voltaje ligeramente superior (+2 V) al requisito de voltaje real del motor.

Teniendo en cuenta una caída de tensión de 2 V, si utiliza motores de 5 V, deberá suministrar 7 V al terminal de alimentación del motor. Si tiene motores de 12 V, la tensión de alimentación del motor debe ser de 14 V.

Conexión de un módulo controlador de motor L298N a un Arduino

Ahora que sabemos todo sobre el módulo, ¡podemos empezar a conectarlo a nuestro Arduino!

Comencemos conectando la fuente de alimentación del motor. En nuestro experimento, estamos usando motores de caja de cambios de CC, también llamados motores “TT”, que suelen encontrarse en robots con tracción en dos ruedas. Tienen una capacidad nominal de 3 a 12 V. Por lo tanto, conectaremos una fuente de alimentación externa de 12 V al terminal VS. Debido a que L298N tiene una caída de voltaje de aproximadamente 2 V, los motores recibirán 10 V y girarán a unas RPM ligeramente inferiores. Pero eso está bien.

A continuación, debemos suministrar 5 V al circuito lógico del L298N. Usaremos el regulador de 5 V integrado para extraer 5 V de la fuente de alimentación del motor, así que mantenga el puente 5V-EN en su lugar.

Ahora, conecta los pines de entrada y habilitación del módulo L298N (ENA, IN1, IN2, IN3, IN4 y ENB) a los seis pines de salida digital de Arduino (9, 8, 7, 5, 4 y 3). Ten en cuenta que ambos pines de salida de Arduino, 9 y 3, están habilitados para PWM.

Por último, conecta un motor al terminal A (OUT1 y OUT2) y el otro al terminal B (OUT3 y OUT4). Puedes intercambiar las conexiones del motor. Técnicamente, no hay una forma correcta o incorrecta.

img2

Código de ejemplo de Arduino

El siguiente boceto le mostrará cómo controlar la velocidad y la dirección de giro de un motor de CC utilizando el controlador de motor L298N y puede servir como base para experimentos y proyectos más prácticos.

El esquema muestra el movimiento del motor en una dirección durante una revolución y luego en la dirección opuesta. También hay cierta aceleración y desaceleración involucradas.

Info

Al acelerar o desacelerar el motor, es posible que escuche un zumbido, especialmente con valores PWM bajos. Esto es normal; no hay nada de qué preocuparse. Esto sucede porque el motor de CC requiere una cantidad mínima de voltaje para funcionar.

// Motor A connections
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B connections
int enB = 3;
int in3 = 5;
int in4 = 4;

void setup() {
	// Set all the motor control pins to outputs
	pinMode(enA, OUTPUT);
	pinMode(enB, OUTPUT);
	pinMode(in1, OUTPUT);
	pinMode(in2, OUTPUT);
	pinMode(in3, OUTPUT);
	pinMode(in4, OUTPUT);
	
	// Turn off motors - Initial state
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
}

void loop() {
	directionControl();
	delay(1000);
	speedControl();
	delay(1000);
}

// This function lets you control spinning direction of motors
void directionControl() {
	// Set motors to maximum speed
	// For PWM maximum possible values are 0 to 255
	analogWrite(enA, 255);
	analogWrite(enB, 255);

	// Turn on motor A & B
	digitalWrite(in1, HIGH);
	digitalWrite(in2, LOW);
	digitalWrite(in3, HIGH);
	digitalWrite(in4, LOW);
	delay(2000);
	
	// Now change motor directions
	digitalWrite(in1, LOW);
	digitalWrite(in2, HIGH);
	digitalWrite(in3, LOW);
	digitalWrite(in4, HIGH);
	delay(2000);
	
	// Turn off motors
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
}

// This function lets you control speed of the motors
void speedControl() {
	// Turn on motors
	digitalWrite(in1, LOW);
	digitalWrite(in2, HIGH);
	digitalWrite(in3, LOW);
	digitalWrite(in4, HIGH);
	
	// Accelerate from zero to maximum speed
	for (int i = 0; i < 256; i++) {
		analogWrite(enA, i);
		analogWrite(enB, i);
		delay(20);
	}
	
	// Decelerate from maximum speed to zero
	for (int i = 255; i >= 0; --i) {
		analogWrite(enA, i);
		analogWrite(enB, i);
		delay(20);
	}
	
	// Now turn off motors
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
}

Explicación del código:

El código de Arduino es bastante simple. No requiere ninguna biblioteca para funcionar. El boceto comienza declarando los pines de Arduino que están conectados a los pines de control del L298N.

// Motor A connections
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B connections
int enB = 3;
int in3 = 5;
int in4 = 4;

En la sección de configuración del código, todos los pines de control del motor, incluidos los pines de control de dirección y velocidad, se configuran como SALIDA digital. Y los pines de control de dirección se ponen en BAJO para deshabilitar inicialmente ambos motores.

void setup() {
	// Set all the motor control pins to outputs
	pinMode(enA, OUTPUT);
	pinMode(enB, OUTPUT);
	pinMode(in1, OUTPUT);
	pinMode(in2, OUTPUT);
	pinMode(in3, OUTPUT);
	pinMode(in4, OUTPUT);
	
	// Turn off motors - Initial state
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
}

En la sección de bucle del código, llamamos a dos funciones definidas por el usuario con un retraso de un segundo.

void loop() {
	directionControl();
	delay(1000);
	speedControl();
	delay(1000);
}

Estas funciones son:

  • directionControl() – Esta función hace que ambos motores giren a máxima velocidad durante dos segundos. A continuación, invierte la dirección de giro de los motores y gira durante dos segundos. Por último, detiene los motores.
void directionControl() {
	// Set motors to maximum speed
	// For PWM maximum possible values are 0 to 255
	analogWrite(enA, 255);
	analogWrite(enB, 255);

	// Turn on motor A & B
	digitalWrite(in1, HIGH);
	digitalWrite(in2, LOW);
	digitalWrite(in3, HIGH);
	digitalWrite(in4, LOW);
	delay(2000);
	
	// Now change motor directions
	digitalWrite(in1, LOW);
	digitalWrite(in2, HIGH);
	digitalWrite(in3, LOW);
	digitalWrite(in4, HIGH);
	delay(2000);
	
	// Turn off motors
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
}

speedControl()– Esta función utiliza la función analogWrite() para generar una señal PWM que acelera ambos motores desde cero hasta la velocidad máxima antes de desacelerarlos nuevamente hasta cero. Finalmente, detiene los motores.

void speedControl() {
	// Turn on motors
	digitalWrite(in1, LOW);
	digitalWrite(in2, HIGH);
	digitalWrite(in3, LOW);
	digitalWrite(in4, HIGH);
	
	// Accelerate from zero to maximum speed
	for (int i = 0; i < 256; i++) {
		analogWrite(enA, i);
		analogWrite(enB, i);
		delay(20);
	}
	
	// Decelerate from maximum speed to zero
	for (int i = 255; i >= 0; --i) {
		analogWrite(enA, i);
		analogWrite(enB, i);
		delay(20);
	}
	
	// Now turn off motors
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
}

En el siguiente enlace puedes consultar el blog original: link referencia.

Publicaciones relacionadas

Semáforo sencillo

Semáforo sencillo

// C++ code //// Pines de los LEDs del semáforo sencillo const int LED_VERDE = 2; const int LED_AMARILLO = 3; const int LED_ROJO = 4;void setup() { // Configuración de los pines OUTPUT

read more
Web climatológica con hora

Web climatológica con hora

ÍndiceÍndice ¿Qué es una página web? Ejemplos de páginas web: [¿Cómo se construye una página web?](#cómo-se-construye-u

read more
Semáforos Coordinados

Semáforos Coordinados

Semáforos coordinados Introducción En este proyecto, vamos a crear un sistema de semáforos coordinados utilizando Arduino.

read more
Markdown Style Guide

Markdown Style Guide

Here is a sample of some basic Markdown syntax that can be used when writing Markdown content in Astro. Headings The following HTML <h1>—<h6> elements represent six levels of section headings

read more
Pantallas LCD

Pantallas LCD

Introducción a las Pantallas LCD Las pantallas LCD (Liquid Crystal Display) son dispositivos electrónicos utilizados para mostrar información de manera clara y eficiente. Estas pantallas son muy co

read more
Personalizar caracteres en LCD

Personalizar caracteres en LCD

ÍndiceExplicación del Código Componentes Clave del Código Librería LiquidCrystal_I2C [In

read more
Semáforo Doble

Semáforo Doble

Descripción del código Este programa controla el funcionamiento de dos semáforos simulados utilizando un Arduino. Cada semáforo cuenta con tres luces LED: verde, amarillo y rojo. El programa altern

read more
Galería Web

Galería Web

Introducción Este proyecto está diseñado para comprender las bases del desarrollo web, comenzando con HTML y CSS básicos y progresando a JavaScript interactivo. Se divide en **cuatro etapas evoluti

read more
Componentes HTML

Componentes HTML

import YouTubeEmbed from '../../layouts/components/YouTubeEmbed.astro'; Componentes HTML y Estilos CSS En este blog explicativo se muestran los componentes principales de HTML y estilos CSS para

read more
Portafolio web

Portafolio web

Proyecto: Página Personal o Portafolio Web Objetivo Crear una página web personal en la que se muestre:Una cabecera con tu nombre y un menú de navegación. Una sección "Sobre Mí" co

read more
Juego de adivinar el número

Juego de adivinar el número

Proyecto: Juego de Adivinar el Número Objetivo Crear un juego interactivo en el que el usuario debe adivinar un número aleatorio entre 1 y 100. El juego brindará retroalimentación indicando si

read more
Introducción a Javascript

Introducción a Javascript

Test Código<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <title>Introducción a JavaScript</title> <style> /* E

read more
Examen Práctico: Mi Página Personal

Examen Práctico: Mi Página Personal

Examen Práctico: Objetivo Crear una página web personal con diseño moderno en la que se muestre:Una cabecera fija con tu nombre y un menú de navegación interactivo. **Una sección "Sob

read more
Bases para la Elaboración del Reporte Breve del Proyecto

Bases para la Elaboración del Reporte Breve del Proyecto

📝 Bases para la Elaboración del Reporte Breve del ProyectoFormato: Documento Word (máximo 4 páginas)Entrega: En formato digital (PDF), cargar en el apartado de Archivos.

read more
Mascota virtual

Mascota virtual

🐾 Proyecto: Mascota Virtual en Escritorio con Python Este proyecto te guiará paso a paso para crear una mascota virtual que se mueva por tu pantalla de Windows y muestre mensajes motivadores c

read more
Mascota virtual

Mascota virtual

🐾 Proyecto: Mascota Virtual en Escritorio con Python Este proyecto te guiará paso a paso para crear una mascota virtual que se mueva por tu pantalla de Windows y muestre mensajes motivadores c

read more