En este proyecto aprenderemos a usar la placa L298N que nos permite controlar motores de corriente continua. Podemos puede controlar velocidad y dirección de giro
Dificultad: intermedia
A continuación, presentaremos unos conceptos básicos para poder entender el funcionamiento de la placa driver, y los motores DC.
Controlar un motor de corriente continua (DC).
Para controlar completamente un motor DC, necesitamos poder variar la velocidad y rotación del mismo. Esto puede ser logrado combinando estas dos técnicas:
- PWM: pulse width modulation o modulación por ancho de pulsos en español, para controlar velocidad.
- Puente H: para controlar sentido de rotación.
PWM para controlar velocidad
La velocidad de un motor DC puede ser controlada variando su voltaje de entrada. Una técnica común es usar PWM o modulación por ancho de pulsos.
PWM es una técnica en donde el promedio del valor del voltaje de entrada es ajustado enviando una serie de pulsos de ON-OFF.
El voltaje promedio es proporcional al ancho de los pulsos conocido como Duty Cycle o ciclo de trabajo.
Mientras más alto el ciclo de trabajo, más grande será el voltaje promedio que se aplica al motor DC, lo que se traduce a alta velocidad, si el ciclo de trabajo es bajo, el promedio del voltaje aplicado al motor será menor, por lo que será menor velocidad.
Debajo mostraremos unas imágenes que ilustran el PWM con varios ciclos de trabajo.
Puente H, para controlar sentido de rotación.
En un motor DC el sentido de rotación puede ser controlado cambiando la polaridad de su voltaje de entrada. Una forma de realizar esto de forma electrónica es con un puente H.
Un puente H es un circuito que contiene cuatro interruptores con el motore al centro formando una H.
Cerrando dos interruptores específicos al mismo tiempo invierte la polaridad del voltaje aplicado al motor. Esto cambia el sentido de giro del motor.
A continuación, pasamos una imagen ilustrando el circuito:
Driver de motor L298N
En el corazón del modulo esta el chip L298 con un disipador de aluminio.
El L298N es un puente H dual que puede controlar un par de motores DC. Esto significa que puede controlar hasta dos motores DC individualmente haciéndolo ideal para robots de dos ruedas.
Alimentación
El modulo L298N se alimenta a través de la bornera (Power supply pins) Consiste de pines para la alimentación de los motores (Vs), masa y alimentación lógica de 5v (Vss)
El L298N tiene dos entradas de alimentación Vss y Vs. Desde Vs el puente H obtiene alimentación para los motores, que puede ser de 5 a 35v. Vss es usado para alimentar la parte lógica que puede ser 5 a 7v. Ambos tienen una masa común llamada GND.
El módulo también tiene un regulador de 5v integrado. Que puede ser habilitado o deshabilitado a través de un Jumper.
Cuando el jumper esta colocado, el regulador de 5v esta activado, suministrando alimentación lógica (Vss) desde la alimentación del motor (Vs). En este caso, el terminal de 5v actua como un pin de salida y puede entregar 5v y un máximo de 0,5 amperes. Estos 5v se pueden utilizar para alimentar el Arduino u otro circuito que requiera 5v.
Cuando el Jumper esta removido, el regulador de 5v esta deshabilitado y tenemos que suministrar 5v por separado a través del terminal de 5 voltios.
ADVERTENCIA:
Puede colocarse el jumper si la alimentación del motor es igual o menor a 12v. Si es mayor a 12v, se debería quitar el jumper para evitar que el regulador de 5v de la placa se dañe.
Tampoco se debe suministrar alimentación en ambas entradas: la alimentación de motor y 5v cuando el jumper esta colocado.
CAÍDA DE VOLTAJE:
El modulo L298N tiene una caída de voltaje de aproximadamente 2 voltios. Esto es debido a la caída interna de voltaje en los transistores de conmutación en el circuito del puente H.
Por lo tanto, si conectamos 12voltios en el terminal de alimentación de motor, los motores recibirán un voltaje de aproximadamente 10 voltios. Esto significa que un motor de 12v DC nunca girara a su máxima velocidad.
Para obtener máxima velocidad de un motor, la alimentación del mismo deberá se un poco mas alta (2v) que el voltaje requerido real. Por ejemplo, si tenemos un motor de 12v, deberíamos tener una fuente de alimentación de 14v.
PINES DE SALIDA:
El modulo L298N posee 2 canales de salida para un Motor A y un Motor B en los extremos izquierdo y derecho de la placa, con un terminal de 2 pines.
Puedes conectar dos motores de corriente continua con voltajes entre 5 a 35v a estos terminales.
Cada canal en el modulo puede suministrar hasta 2 amperes a su motor de corriente continua. Sin embargo, la cantidad de corriente suministrada al motor dependerá de la fuente de alimentación.
PINES DE CONTROL:
Para cada uno de los canales del L298N, hay dos tipos de pines de control que nos permiten controlar velocidad y dirección de movimiento de los motores DC al mismo tiempo.
PINES DE CONTROL DE DIRECCIÓN:
Usando los pines de control de dirección, podemos controlar el sentido de giro de motor. Estos pines en realidad controlan los interruptores del circuito de puente H adentro del L298N.
El módulo tiene dos pines de dirección por cada canal. Los pines IN1 y IN2 controlan la dirección de giro del motor A mientras que IN3 y IN4 controlan el motor B.
La dirección de giro del motor puede ser controlada aplicando los voltajes lógicos de ALTO (5v) o BAJO (masa) a estos pines. La siguiente tabla ilustra como se realiza:
IN1 | IN2 | DIRECCION DE GIRO |
Bajo (0v) | Bajo (0v) | Motor APAGADO |
Alto (5v) | Bajo (0v) | Adelante |
Bajo (0v) | Alto (5v) | Atrás |
Alto (5v) | Alto (5v) | Motor APAGADO |
PINES DE CONTROL DE VELOCIDAD
Los pines de controles de velocidad son los pines ENA y ENB, los mismos son usados para encender y apagar los motores y controlar su velocidad.
Poniendo estos pines en estado lógico ALTO (5v) hará que los motores giren, poniéndolo en estado BAJO, los hará parar. Adicionalmente, con una señal PWM podemos controlar la velocidad de los motores.
El modulo usualmente viene con un jumper en estos pines. Cuando Este jumper está colocado, el motor esta activado y girara a máxima velocidad. Si se desea controlar la velocidad de los motores por medio de programación, se necesita remover los jumpers y conectar el pin a una salida PWM en el Arduino.
PINOUT DE MODULO L298N
Antes de hacer las conexiones y de programar un código de ejemplo, observemos los pines (pinout) del mismo:
VCC: Suministra alimentación para el motor. Puede ser entre 5 a 35v. Recordar, si el jumper de 5V-EN esta colocado, se necesita calcular 2 voltios extra que el requerimiento real del motor para poder obtener la máxima velocidad del motor.
GND: Pin común de masa.
5V: Suministra alimentación al circuito lógico adentro del CI L298N. SI el jumper de 5V EN esta colocado, este pin actuara como una salida y puede alimentar a tu Arduino. Si el jumper de 5V-EN esta removido, se necesita se necesita conectar al pin de 5v del Arduino.
ENA: Este pin es usado para controlar la velocidad del motor A. Colocando este pin en estado Alto (5v), es decir dejando el jumper en su lugar, hará que el motor A gire, y colocándolo en estado Bajo, hará que el motor pare. Quitando el jumper y conectando este pin a una señal PWM nos permitirá controlar la velocidad del motor A.
IN1 y IN2: Estos pines son usados para controlar la dirección del motor A. Siguiendo la tabla anteriormente diagramada, se podrá controlar la dirección de giro del motor.
IN1 y IN2: Estos pines son usados para controlar la dirección del motor B. Siguiendo la tabla anteriormente diagramada, se podrá controlar la dirección de giro del motor.
ENB: Este pin es usado para controlar la velocidad del motor B. Colocando este pin en estado Alto (5v), es decir dejando el jumper en su lugar, hará que el motor A gire, y colocándolo en estado Bajo, hará que el motor pare. Quitando el jumper y conectando este pin a una señal PWM nos permitirá controlar la velocidad del motor B.
OUT1 y OUT2: Estos pines van conectados al motor A.
OUT3 y OUT4: Estos pines van conectados al motor B.
CONECTANDO EL MODULO L28N CON UN ARDUINO UNO:
Ahora que conocemos todo acerca del módulo, podemos comenzar a conectarlo a nuestro Arduino.
Comenzaremos conectando alimentación a los motores. Conectaremos una fuente externa de 12v al terminal VCC. Considerando la caída de voltaje del L298N, los motores recibirán 10v.
Paso siguiente, necesitaremos conectar 5v para el circuito Logico del L298N. Usaremos el regulador de 5v integrado, por lo que dejaremos el jumper de 5V-EN en lugar.
Ahora, los pines de INPUT y ENABLE (ENA,IN1,IN2,IN3,IN4, y ENB) del L298N serán conectados a seis salidas digitales del Arduino (9,8,7,5,4 y 3). Notar que los pines de salida 9 y 3 son ambos PWM.
Finalmente, conectar un motor al terminal A (OUT1 y OUT2) y el otro motor al terminal B (OUT3 y OUT4). Se puede intercambiar la conexión del motor, ya que técnicamente no hay forma correcta o incorrecta.
Cuando hayas finalizado deberías tener algo similar a la siguiente ilustración:
CODIGO ARDUINO – CONTROLANDO UN MOTOR DC
El siguiente sketch nos permitirá controlar velocidad y sentido de giro de un motor DC con el modulo L298N y puede servir como la base de experimentos y proyectos futuros.
// Conexiones de motor A
int enA = 9;
int in1 = 8;
int in2 = 7;
// Conexiones de motor B
int enB = 3;
int in3 = 5;
int in4 = 4;
void setup() {
// Setear todos los pines de control como salidas
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Apagar todos los motores – Estado inicial
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void loop() {
directionControl();
delay(1000);
speedControl();
delay(1000);
}
// Esta funcion permite controlar el sentido de giro de motores
void directionControl() {
// Setear motores a maxima velocidad
// Para PWM, los valores van de 0 a 255
analogWrite(enA, 255);
analogWrite(enB, 255);
// Encender motor A & B
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(2000);
// Ahora cambia direccion de motor
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// Apagar motores
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
// Esta funcion permite controlar la velocidad de los motores
void speedControl() {
// Apagar motores
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// Acelerar de cero a máxima velocidad
for (int i = 0; i < 256; i++) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Desacelerar de maxima velocidad a cero
for (int i = 255; i >= 0; –i) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Apagar motores
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
Este código se puede copiar en nuestro Arduino Uno y podremos controlar los motores DC. No requiere instalar librerías extras.
Fuentes: