Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Controlador de motor L298N:interfaz Arduino, cómo funciona, códigos, esquemas

En este Tutorial de Arduino aprenderemos a controlar motores DC usando Arduino. Echaremos un vistazo a algunas técnicas básicas para controlar motores de CC y haremos dos ejemplos a través de los cuales aprenderemos a controlar motores de CC utilizando el controlador de motor L298N y la placa Arduino.

Puede ver el siguiente video o leer el tutorial escrito a continuación.

 

Podemos controlar la velocidad del motor de CC simplemente controlando el voltaje de entrada al motor y el método más común para hacerlo es usando la señal PWM.

Control de motores de CC PWM

PWM, o modulación de ancho de pulso, es una técnica que nos permite ajustar el valor promedio del voltaje que va al dispositivo electrónico encendiendo y apagando la energía a un ritmo rápido. El voltaje promedio depende del ciclo de trabajo, o la cantidad de tiempo que la señal está ENCENDIDA versus la cantidad de tiempo que la señal está APAGADA en un solo período de tiempo.

Entonces, dependiendo del tamaño del motor, podemos simplemente conectar una salida Arduino PWM a la base del transistor o la puerta de un MOSFET y controlar la velocidad del motor controlando la salida PWM. La señal Arduino PWM de baja potencia enciende y apaga la puerta en el MOSFET a través del cual se acciona el motor de alta potencia.

Control de motor de CC H-Bridge

Por otro lado, para controlar la dirección de rotación, solo necesitamos invertir la dirección del flujo de corriente a través del motor, y el método más común para hacerlo es usando un puente H. Un circuito H-Bridge contiene cuatro elementos de conmutación, transistores o MOSFET, con el motor en el centro formando una configuración tipo H. Al activar dos interruptores particulares al mismo tiempo, podemos cambiar la dirección del flujo de corriente, por lo tanto, cambiar la dirección de rotación del motor.

Entonces, si combinamos estos dos métodos, el PWM y el H-Bridge, podemos tener un control completo sobre el motor de CC. Hay muchos controladores de motor de CC que tienen estas características y el L298N es uno de ellos.

Controlador L298N

El L298N es un controlador de motor dual H-Bridge que permite controlar la velocidad y la dirección de dos motores de CC al mismo tiempo. El módulo puede impulsar motores de CC que tengan voltajes entre 5 y 35 V, con una corriente máxima de hasta 2 A.

Echemos un vistazo más de cerca al pinout del módulo L298N y expliquemos cómo funciona. El módulo tiene dos bloques de terminales con tornillos para el motor A y B, y otro bloque de terminales con tornillos para el pin de tierra, el VCC para el motor y un pin de 5 V que puede ser una entrada o una salida.

Esto depende del voltaje utilizado en los motores VCC. El módulo tiene un regulador de 5 V integrado que se activa o desactiva mediante un puente. Si el voltaje de alimentación del motor es de hasta 12V, podemos habilitar el regulador de 5V y el pin de 5V se puede usar como salida, por ejemplo, para alimentar nuestra placa Arduino. Pero si el voltaje del motor es superior a 12V, debemos desconectar el puente porque esos voltajes dañarán el regulador de 5V incorporado. En este caso, el pin de 5 V se usará como entrada, ya que necesitamos conectarlo a una fuente de alimentación de 5 V para que el IC funcione correctamente.

Podemos notar aquí que este IC produce una caída de voltaje de aproximadamente 2V. Entonces, por ejemplo, si usamos una fuente de alimentación de 12 V, el voltaje en los terminales de los motores será de aproximadamente 10 V, lo que significa que no podremos obtener la velocidad máxima de nuestro motor de 12 V CC.

A continuación están las entradas de control lógico. Los pines Habilitar A y Habilitar B se utilizan para habilitar y controlar la velocidad del motor. Si hay un puente en este pin, el motor se habilitará y funcionará a la máxima velocidad, y si quitamos el puente podemos conectar una entrada PWM a este pin y de esa manera controlar la velocidad del motor. Si conectamos este pin a Tierra, el motor se desactivará.

A continuación, los pines de Entrada 1 y Entrada 2 se usan para controlar la dirección de rotación del motor A, y las entradas 3 y 4 para el motor B. Usando estos pines, en realidad controlamos los interruptores del H-Bridge dentro del IC L298N. Si la entrada 1 es BAJA y la entrada 2 es ALTA, el motor se moverá hacia adelante y viceversa, si la entrada 1 es ALTA y la entrada 2 es BAJA, el motor se moverá hacia atrás. En caso de que ambas entradas sean iguales, BAJA o ALTA, el motor se detendrá. Lo mismo se aplica a las entradas 3 y 4 y al motor B.

Controlador de motor Arduino y L298N

Ahora hagamos algunas aplicaciones prácticas. En el primer ejemplo controlaremos la velocidad del motor mediante un potenciómetro y cambiaremos el sentido de giro mediante un pulsador. Aquí está el esquema del circuito.

Entonces, necesitamos un controlador de motor L298N, un motor de CC, un potenciómetro, un botón pulsador y una placa Arduino.

Puede obtener los componentes necesarios para este tutorial de Arduino desde los siguientes enlaces:

  • Conductor L298N ……………………………….. 
  • Motor de CC de alto par de 12 V ………….. 
  • Motor CC con rueda de plástico …….
  • Placa Arduino ………………………………
  • Protoboard y cables de salto ………… 

Código Arduino

Aquí está el código de Arduino:

/*  Arduino DC Motor Control - PWM | H-Bridge | L298N  -  Example 01

    by Dejan Nedelkovski, www.HowToMechatronics.com
*/

#define enA 9
#define in1 6
#define in2 7
#define button 4

int rotDirection = 0;
int pressed = false;

void setup() {
  pinMode(enA, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(button, INPUT);
  // Set initial rotation direction
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
}

void loop() {
  int potValue = analogRead(A0); // Read potentiometer value
  int pwmOutput = map(potValue, 0, 1023, 0 , 255); // Map the potentiometer value from 0 to 255
  analogWrite(enA, pwmOutput); // Send PWM signal to L298N Enable pin

  // Read button - Debounce
  if (digitalRead(button) == true) {
    pressed = !pressed;
  }
  while (digitalRead(button) == true);
  delay(20);

  // If button is pressed - change rotation direction
  if (pressed == true  & rotDirection == 0) {
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    rotDirection = 1;
    delay(20);
  }
  // If button is pressed - change rotation direction
  if (pressed == false & rotDirection == 1) {
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    rotDirection = 0;
    delay(20);
  }
}
Code language: Arduino (arduino)

Descripción: Entonces, primero debemos definir los pines y algunas variables necesarias para el programa. En la sección de configuración, debemos configurar los modos de pin y la dirección de rotación inicial del motor. En la sección de bucle, comenzamos leyendo el valor del potenciómetro y luego mapeamos el valor que obtenemos de él, que es de 0 a 1023, a un valor de 0 a 255 para la señal PWM, o eso es 0 a 100% del ciclo de trabajo del señal PWM. Luego, usando la función analogWrite(), enviamos la señal PWM al pin Habilitar de la placa L298N, que en realidad impulsa el motor.

A continuación, comprobamos si hemos pulsado el botón, y si es así, cambiaremos el sentido de giro del motor configurando los estados de la Entrada 1 y la Entrada 2 de forma inversa. El pulsador funcionará como un botón de palanca y cada vez que lo presionemos, cambiará la dirección de rotación del motor.

Arduino Robot Car Control usando el controlador de motor L298N

Entonces, una vez que hayamos aprendido esto, ahora podemos construir nuestro propio automóvil robot Arduino. Aquí está el esquema del circuito:

Todo lo que necesitamos son 2 motores de CC, el controlador de motor L298N, una placa Arduino y un joystick para el control. En cuanto a la fuente de alimentación, opté por utilizar tres baterías de iones de litio de 3,7 V, lo que proporciona un total de 11 V. Hice el chasis con madera contrachapada de 3 mm, le adjunté los motores con soportes metálicos, le adjunté ruedas a los motores y le adjunté una rueda giratoria al frente.

Ahora echemos un vistazo al código Arduino y veamos cómo funciona. (Abajo puedes encontrar el código completo)

int xAxis = analogRead(A0); // Read Joysticks X-axis
int yAxis = analogRead(A1); // Read Joysticks Y-axisCode language: Arduino (arduino)

Después de definir los pines, en la sección de bucle, comenzamos con la lectura de los valores de los ejes X e Y del joystick. El joystick en realidad está hecho de dos potenciómetros que están conectados a las entradas analógicas del Arduino y tienen valores de 0 a 1023. Cuando el joystick permanece en su posición central, el valor de ambos potenciómetros o ejes es de alrededor de 512.

Agregaremos un poco de tolerancia y consideraremos los valores de 470 a 550 como centro. Entonces, si movemos el eje Y del joystick hacia atrás y el valor cae por debajo de 470, estableceremos la dirección de rotación de los dos motores hacia atrás usando los cuatro pines de entrada. Luego, convertiremos los valores decrecientes de 470 a 0 en valores PWM crecientes de 0 a 255, que es en realidad la velocidad del motor.

// Y-axis used for forward and backward control
  if (yAxis < 470) {
    // Set Motor A backward
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    // Set Motor B backward
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    // Convert the declining Y-axis readings for going backward from 470 to 0 into 0 to 255 value for the PWM signal for increasing the motor speed
    motorSpeedA = map(yAxis, 470, 0, 0, 255);
    motorSpeedB = map(yAxis, 470, 0, 0, 255);
  }Code language: Arduino (arduino)

De manera similar, si movemos el eje Y del joystick hacia adelante y el valor supera los 550, configuraremos los motores para que avancen y convertiremos las lecturas de 550 a 1023 en valores PWM de 0 a 255. Si el joystick permanece en su centro, el la velocidad de los motores será cero.

A continuación, veamos cómo usamos el eje X para el control izquierdo y derecho del automóvil.

// X-axis used for left and right control
  if (xAxis < 470) {
    // Convert the declining X-axis readings from 470 to 0 into increasing 0 to 255 value
    int xMapped = map(xAxis, 470, 0, 0, 255);
    // Move to left - decrease left motor speed, increase right motor speed
    motorSpeedA = motorSpeedA - xMapped;
    motorSpeedB = motorSpeedB + xMapped;
    // Confine the range from 0 to 255
    if (motorSpeedA < 0) {
      motorSpeedA = 0;
    }
    if (motorSpeedB > 255) {
      motorSpeedB = 255;
    }
  }Code language: Arduino (arduino)

Nuevamente, primero debemos convertir las lecturas del eje X en valores de velocidad de 0 a 255. Para movernos hacia la izquierda, usamos este valor para disminuir la velocidad del motor izquierdo y aumentar la velocidad del motor derecho. Aquí, debido a las funciones aritméticas, usamos dos declaraciones "si" adicionales para limitar el rango de velocidad del motor de 0 a 255.

El mismo método se usa para mover el automóvil hacia la derecha.

Relacionado: Cómo hacer un controlador de velocidad de motor de CC PWM con el 555 Timer IC

Dependiendo del voltaje aplicado y del propio motor, a velocidades más bajas, el motor no puede comenzar a moverse y produce un zumbido. En mi caso, los motores no podían moverse si el valor de la señal PWM estaba por debajo de 70. Por lo tanto, al usar estas dos declaraciones if, en realidad limité el rango de velocidad de 70 a 255. Al final, solo enviamos las velocidades finales del motor o Señal PWM a los pines de habilitación del controlador L298N.

// Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM value was below value of 70)
  if (motorSpeedA < 70) {
    motorSpeedA = 0;
  }
  if (motorSpeedB < 70) {
    motorSpeedB = 0;
  }
  analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
  analogWrite(enB, motorSpeedB); // Send PWM signal to motor BCode language: Arduino (arduino)

Aquí está el código completo del ejemplo del coche robot Arduino:

/*  Arduino DC Motor Control - PWM | H-Bridge | L298N
         Example 02 - Arduino Robot Car Control
    by Dejan Nedelkovski, www.HowToMechatronics.com
*/

#define enA 9
#define in1 4
#define in2 5
#define enB 10
#define in3 6
#define in4 7

int motorSpeedA = 0;
int motorSpeedB = 0;

void setup() {
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
}

void loop() {
  int xAxis = analogRead(A0); // Read Joysticks X-axis
  int yAxis = analogRead(A1); // Read Joysticks Y-axis

  // Y-axis used for forward and backward control
  if (yAxis < 470) {
    // Set Motor A backward
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    // Set Motor B backward
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    // Convert the declining Y-axis readings for going backward from 470 to 0 into 0 to 255 value for the PWM signal for increasing the motor speed
    motorSpeedA = map(yAxis, 470, 0, 0, 255);
    motorSpeedB = map(yAxis, 470, 0, 0, 255);
  }
  else if (yAxis > 550) {
    // Set Motor A forward
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    // Set Motor B forward
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    // Convert the increasing Y-axis readings for going forward from 550 to 1023 into 0 to 255 value for the PWM signal for increasing the motor speed
    motorSpeedA = map(yAxis, 550, 1023, 0, 255);
    motorSpeedB = map(yAxis, 550, 1023, 0, 255);
  }
  // If joystick stays in middle the motors are not moving
  else {
    motorSpeedA = 0;
    motorSpeedB = 0;
  }

  // X-axis used for left and right control
  if (xAxis < 470) {
    // Convert the declining X-axis readings from 470 to 0 into increasing 0 to 255 value
    int xMapped = map(xAxis, 470, 0, 0, 255);
    // Move to left - decrease left motor speed, increase right motor speed
    motorSpeedA = motorSpeedA - xMapped;
    motorSpeedB = motorSpeedB + xMapped;
    // Confine the range from 0 to 255
    if (motorSpeedA < 0) {
      motorSpeedA = 0;
    }
    if (motorSpeedB > 255) {
      motorSpeedB = 255;
    }
  }
  if (xAxis > 550) {
    // Convert the increasing X-axis readings from 550 to 1023 into 0 to 255 value
    int xMapped = map(xAxis, 550, 1023, 0, 255);
    // Move right - decrease right motor speed, increase left motor speed
    motorSpeedA = motorSpeedA + xMapped;
    motorSpeedB = motorSpeedB - xMapped;
    // Confine the range from 0 to 255
    if (motorSpeedA > 255) {
      motorSpeedA = 255;
    }
    if (motorSpeedB < 0) {
      motorSpeedB = 0;
    }
  }
  // Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM value was below value of 70)
  if (motorSpeedA < 70) {
    motorSpeedA = 0;
  }
  if (motorSpeedB < 70) {
    motorSpeedB = 0;
  }
  analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
  analogWrite(enB, motorSpeedB); // Send PWM signal to motor B
}Code language: Arduino (arduino)

Eso sería todo por este tutorial, y en mi próximo video actualizaremos este auto robot Arduino, agregando dispositivos Bluetooth y de radio para habilitar el control inalámbrico y de teléfonos inteligentes.

No dude en hacer cualquier pregunta en la sección de comentarios a continuación y no olvide consultar mi colección de proyectos Arduino.


Proceso de manufactura

  1. Cómo piratear mandos a distancia por infrarrojos
  2. Robot seguidor de línea
  3. Cómo conectar Arduino Mega con el módulo GPS NEO-6M
  4. Plataforma de entrenamiento Arduino
  5. ¡¿Qué tan fácil es usar un termistor ?!
  6. Brazo de robot Arduino DIY:controlado por gestos con las manos
  7. Biblioteca de control de motores de CC
  8. Cómo hacer un mini plotter CNC 2D usando una unidad de DVD para chatarra, L293D
  9. Cómo hacer un robot de control por gestos en casa
  10. Aquí hay una idea:cómo funciona una interfaz cerebro-computadora
  11. Las ventajas de los motores de transmisión directa:qué es y cómo funciona.