LECCIÓN 18: Control de Motores de corriente continua con L293D.

Introducción

En esta lección, aprenderás a controlar tanto la dirección como la velocidad de un pequeño motor de CC utilizando un Arduino y el chip del controlador de motor L293D.

 

Componentes

 {Product:2000}{Product:256}{Product:1436}{Product:536}{Product:36}{Product:44}{Product:250}

Principio

Encima de todo, deberíamos experimentar con el chip de control del motor L293D para hacernos una idea de cómo funciona. Podemos empezar con utilizar la placa UNO R3 para alimentar al motor con 5V.

 

Observa en qué dirección gira el motor. Puedes hacer esto pellizcando el eje del motor entre tus dedos. Intercambia los cables del motor para que el cable del motor que iba a +5V ahora vaya a GND y viceversa. El motor girará en la dirección opuesta. Esto nos da una pista de cómo funciona el chip L293D. Sus pines de control nos permiten hacer el equivalente a intercambiar los terminales del motor, para invertir la dirección del motor. Coloca la placa prototipo como se muestra a continuación. 

 

Los tres pines de L293D que nos interesan son el Pin 1 (Enable), Pin 2 (In1) y Pin 7 (In2).

Estos se conectan a 5V o GND utilizando los cables de puente púrpura, amarillo y naranja.

Como se muestra arriba, el motor debe estar girando en una dirección, vamos a llamar a esa dirección A.

Si mueve el Pin 1 (Enable) a GND, el motor se detendrá, sin importar lo que haga con los pines de control In1 e In2. Pin (Enable) activa y desactiva todo. Esto hace que sea útil para el uso de una salida PWM para controlar la velocidad del motor. Vuelva a conectar el pin 1 a 5V para que el motor arranque de nuevo.

Ahora intente mover In1 (pin 2, amarillo) de 5V a GND. In1 y In2 ahora están conectados a GND, por lo que de nuevo el motor se detendrá. Mover In2 de GND a 5V hará que el motor gire en la dirección opuesta (dirección B). Finalmente, mover In1 de nuevo a 5V para que tanto In1 como In2 estén en 5V hará que el motor se detenga.

Ahora que tenemos el control del motor directamente, podemos dejar que el Arduino gestione el Pin: Enable, In1 y In2.

 

Procedimiento 

Paso 1: Conecta el circuito como se muestra en el siguiente diagrama (asegúrese de que los pines estén conectados correctamente o que los caracteres no se muestren correctamente):

 

Paso 2: Programa (consulta el código de ejemplo en el CD o sitio web oficial)

/*

*/

int enablePin = 11;

int in1Pin = 10;

int in2Pin = 9;

int switchPin = 7;

int potPin = 0;

void setup()

{

  pinMode(in1Pin, OUTPUT);

  pinMode(in2Pin, OUTPUT);

  pinMode(enablePin, OUTPUT);

  pinMode(switchPin, INPUT_PULLUP);

}

void loop()

{

  int speed = analogRead(potPin) / 4;

  boolean reverse = digitalRead(switchPin);

  setMotor(speed, reverse);

}

void setMotor(int speed, boolean reverse)

{

  analogWrite(enablePin, speed);

  digitalWrite(in1Pin, ! reverse);

  digitalWrite(in2Pin, reverse);

}

Paso 3: Compila el programa

Paso 4: Graba el programa en Uno

 

Los pines de la placa se definen y sus modos se ajustan en la función 'configuración' de forma normal. En la función de loop, un valor para la velocidad del motor se encuentra dividiendo la lectura analógica del potenciómetro por 4.

El factor es 4 porque la lectura analógica estará entre 0 y 1023 y la salida analógica debe estar entre 0 y 255. Si se pulsa el botón, el motor avanzará hacia delante, de lo contrario funcionará en sentido inverso. El valor de la variable 'reverse' se establece en el valor leído del pin switch. Entonces, si se presiona el botón, será Falso, de lo contrario será Verdadero.  

Los valores de velocidad (speed) y marcha atrás (reverse) se pasan a una función llamada 'setMotor' que ajustará los pines apropiados en el chip del conductor para controlar el motor.

 

void setMotor(int speed, boolean reverse)

{ 

analogWrite(enablePin,speed);

digitalWrite(in1Pin, ! Reverse);

digitalWrite(in2Pin, reverse);

}

 

En primer lugar, se ajusta la velocidad mediante el uso de una analogWrite ( Escribir valores analógicos en Arduino) en el pin Enable – pin activación.

El pin de activación del L293 simplemente enciende o apaga el motor independientemente de la configuración de los pines in1 e in2 del L293.

Para controlar la dirección del motor, los pines in1 e in2 deben ajustarse a valores opuestos. Si in1 es HIGH (ALTO)  y in2 es LOW (BAJO), el motor girará en una dirección, si por el contrario in1 es HIGH (ALTO) y in2 LOW (BAJO) entonces el motor girará en dirección opuesta.

El comando '!' significa 'no'. Por lo tanto, el primer comando digitalWrite para in1 establece en lo contrario de lo que sea el valor de 'reverse', por lo que si reverse es HIGH lo establece en LOW y viceversa. La segunda digitalWrite para 'in2' establece el pin en lo que sea el valor de 'reverse'. Esto significa que siempre será lo contrario de lo que es in1.

 

Resumen del experimento 

A.   Driver L293D

 

Este es un chip muy útil. En realidad puede controlar dos motores de forma independiente. Sólo estamos usando la mitad del chip en esta lección, la mayoría de los pines en el lado derecho del chip son para controlar un segundo motor.

 

Se conectaría un segundo motor entre OUT3 y OUT4. También necesitará tres pines de control más. EN2 está conectado a un pin de salida habilitado para PWM en el Arduino IN3 y IN4 están conectados a salidas digitales en el Arduino El L293D tiene dos pines +V (8 y 16). El pin +Vmotor (8) proporciona la potencia para los motores, y +V (16) para la lógica del chip. Hemos conectado ambos al pin Arduino 5V. Sin embargo, si estuviera utilizando un motor más potente, o un motor de mayor voltaje, usted proporcionaría al motor una fuente de alimentación separada utilizando el pin 8 conectado a la fuente de alimentación positiva.

La tierra de la segunda fuente de alimentación está conectada a la tierra del Arduino.

     B.  Otra cosa que puede hacer es cambiar el sketch para controlar el motor sin usar el potenciómetro o el interruptor. Podría comenzar lentamente en dirección hacia adelante, gradualmente ser más rápido, disminuir la velocidad y luego ir a la inversa, repitiendo el patrón.