PUENTE H L293b ⇨ ¿QUE ES? ¿COMO FUNCIONA?

Índice
  1. Que es y para que sirve el Puente H L293B
  2. Control de dirección de giro mediante el Puente H L293B
  3. Diagrama de conexión del puente H L293B
    1. Como controlar el giro del Motor
    2. Como controlo la velocidad de un motor de continua
  4. Diagrama para controlar el puente H l293B con arduino
  5. Codigo para implementar con arduino
  6. COMPRA TU DRIVER PUENTE H L293B

Que es y para que sirve el Puente H L293B

En las mayoría de las aplicaciones electrónicas orientadas a Reboticas nos vemos en la necesidad de controlar y generar movimientos. Según la naturaleza del requerimiento recurrimos a Servo Motores o Motores de continua.

Me interesa mostrarles la forma adecuada de controlar un motor de continua, para esto necesitamos controlar dos variables (Dirección y Velocidad).

Control de dirección de giro mediante el Puente H L293B

Un motor de continua determina su dirección de giro en función de la tensión entre sus terminales, es decir si conectamos el termina 1 del motor al Positivo de la pila y el terminal 2 del motor al Negativo de la pila, obtendremos un sentido de giro determinado, si lo conectamos en forma opuesta obtendremos el sentido de giro contrario.

Para lograr este cambio controlado de polaridad nos apoyamos en un circuito integrado conocido como Puente H(es una disposición circuital de transistores y diodos que nos permite controlar la polaridad de dos terminales de salida en función de unas entradas lógicas), como caso particular hablare del Puente H L293B.

Diagrama de conexión del puente H L293B

Este solo integrado nos permite controlar dos motores en simultaneo. los terminales del Motor M1 conectados a los Pines 3 y 6 y los terminales del motor M2 a los terminales 11 y 14, como se ilustra en la figura.

El pin 16 corresponde a la alimentación propia del integrado, 5V, el Pin 16 deberá estar conectado a la tensión que alimentara los motores, puede variar en el rango de (5 a 36) V.

Es importante tener en cuenta que este integrado se alimenta con dos niveles de tensión diferente, uno corresponde a la alimentación propia de integrado, que no debe ser superior a 7V(VSS) y otra es la tensión con la que alimentaremos los motores, pudiendo en este ultimo hacerlo con hasta 36V(VC).

 

Como funciona el Puente H L293B

 

Como controlar el giro del Motor

Fácil, el movimiento de giro corresponderá a la siguiente tabla de verdad
Colocando Niveles Altos y bajos en los Pines 2 y 7 Logramos controlar la tensión de salida de los terminales 3 y 6.

Como funciona el Puente H L293B Tabla de verdad

Como controlo la velocidad de un motor de continua

Para controlar la velocidad del motor nos basamos en la técnica PWM (Modulacion por ancho de pulso), que basicaménte consiste en "apagar" y "encender" la señal de entrada de manera de reducir la potencia suministrada al motor.

Para mas detalle leer el apartado siguiente Modulación por ancho de pulsos PWM

[anuncio_b30 id=3][anuncio_b30 id=4]

Diagrama para controlar el puente H l293B con arduino

En el siguiente diagrama se conectan dos motores al puente H L293B que sera controlado por la placa arduino.

Diagrama de conexión puente H l293b Arduino

Codigo para implementar con arduino

//Programa para controlar 2 motores con control de velocidad y giro con un L293
int switchPin = 7;    // switch para cambiar el sentido de giro de los motores
int motor1Pin1 = 3;   // Motor 1 adelante
int motor1Pin2 = 4;   // Motor 1 atras
int speedPin1 = 9;    // Motor 1 aceleracion (PWM) Pin enable del L293
int potPin = 0;       // Potenciometro para controlar velocidad motor 1
 
int ledPin = 13;      // LED 
 
//int switchPin2 = 8;   // No implementado
int motor2Pin1 = 5;   // Motor 2 adelante
int motor2Pin2 = 6;   // Motor 2 atras
int speedPin2 = 10;   // Motor 2 aceleracion (PWM) Pin Enable del L293
int potPin2 = 1;      // Potenciometro para controlar velocidad motor 2
int speedpin = 0;     // tasa de velocidad a la que Arduino envia los datos
 
void setup() {
   
Serial.begin (9600);
 
//configuracion de pines
pinMode(switchPin, INPUT);
//pinMode(switchPin2, INPUT); //no usado
 
// Control Motor 1
pinMode(motor1Pin1, OUTPUT); 
pinMode(motor1Pin2, OUTPUT); 
pinMode(speedPin1, OUTPUT);
 
//Control Motor 2
pinMode(motor2Pin1, OUTPUT); 
pinMode(motor2Pin2, OUTPUT); 
pinMode(speedPin2, OUTPUT);
 
pinMode(ledPin, OUTPUT);
 
// Establece speedPinX en modo High para poder controlar la velocidad
digitalWrite(speedPin1, HIGH);
digitalWrite(speedPin2, HIGH);
 
// comprobacion de reseteo, si el led parpadea solo 3 veces, todo esta bien
// si vuelve a parpadear, significa que ha hecho un reset, revisar conexiones
// por si hubiera un corto
blink(ledPin, 3, 100);
}
 
void loop() {
 
  //Si el switch no esta pulsado, gira en una direccion, si no en la contraria
  if (digitalRead(switchPin) >0) {
     
    digitalWrite(motor1Pin1, LOW);      // Establece el sentido de giro del motor 1
    digitalWrite(motor1Pin2, HIGH);     // 
     
    speedpin = analogRead(potPin);      // Lectura del valor del potenciometro
    speedpin = 800 + (speedpin/6);      // Para establecer la velocidad de giro
    analogWrite (speedPin1, speedpin);  //
    Serial.print("motor 1 = ");         //
    Serial.println(speedpin);           //
    delay (50);                         //
     
     
    digitalWrite(motor2Pin1, LOW);      // Establece el sentido de giro del motor 2
    digitalWrite(motor2Pin2, HIGH);     // 
     
    speedpin = analogRead(potPin2);     // Lectura del valor del potenciometro
    speedpin = 800 + (speedpin/6);      // Para establecer la velocidad de giro
    analogWrite (speedPin2, speedpin);  //
    Serial.print("motor 2 = ");         //
    Serial.println(speedpin);           //
    delay(50);                          //
  }  
  else {
    digitalWrite(motor1Pin1, HIGH);     // Establece el sentido de giro del motor 1
    digitalWrite(motor1Pin2, LOW);      // 
     
    speedpin = analogRead(potPin);      // Lectura del valor del potenciometro
    speedpin = 800 + (speedpin/6);      // Para establecer la velocidad de giro
    analogWrite (speedPin1, speedpin);  //
    Serial.print("motor 1 = ");         //
    Serial.println(speedpin);           //
    delay (50);                         //
     
     
    digitalWrite(motor2Pin1, HIGH);     // Establece el sentido de giro del motor 2
    digitalWrite(motor2Pin2, LOW);      // 
     
    speedpin = analogRead(potPin2);     // Lectura del valor del potenciometro
    speedpin = 800 + (speedpin/6);      // Para establecer la velocidad de giro
    analogWrite (speedPin2, speedpin);  //
    Serial.print("motor 2 = ");         //
    Serial.println(speedpin);           //
    delay(50);                          //
  }
}
 
/*
Parpadeo del led, Significa que ha ejecutado la funcion setup()
si todo va bien, solo parpadea tres veces, si hay algun error que resetee el arduino,
volvera a verse el parpadeo del led
*/
void blink(int whatPin, int howManyTimes, int milliSecs) {
  int i = 0;
  for ( i = 0; i < howManyTimes; i++) {
    digitalWrite(whatPin, HIGH);
    delay(milliSecs/2);
    digitalWrite(whatPin, LOW);
    delay(milliSecs/2);
  }
}

Mi idea sobre este articulo fue juntar en un solo lugar la información que se puede encontrar desparramada por internet, para tener todo lo que considero útil en la misma pagina.
Espero que sea de utilidad.

COMPRA TU DRIVER PUENTE H L293B

Es recomendable comprarlo en tiendas oficiales, desde mi punto de vista la mejor opción en las tiendas Amazon, son profesionales y puedo garantizar que sus productos son de alta calidad.

 

  1. carlos ceferino carrozzo dice:

    Hola quisiera preguntarte si tenés un circuito para hacer un regulador de válvulas IAC para bajar o subir la aceleración si tenés o podes conseguirme una te estaré muy agradecido desde ya muchísimas gracias saludos

    1. veloso dice:

      Carlos, lamentablemente no cuento con un circuito de ese tipo.
      Saludos!

  2. Franco dice:

    Gracias por el articulo.
    En el párrafo 6, donde dice "El pin 16 corresponde a la alimentación propia del integrado, 5V, el Pin 16...", no debería decir "El pin 16 corresponde a la alimentación propia del integrado, 5V, el Pin 8..."?

  3. Carlos Saryanovich dice:

    Hola, no se entiende las E de trabajo y fuerza. La E de 5v va en el pin 16??? Y la de fuerza de hasta los 35v, en el pìn 8 ??? Gracias Carlos

  4. Adrian dice:

    Te consulto algo.¿por que haces una suma de 800+el valor del potenciometro para escribir en Analogwrite si esa instrucción acepta valores de 0 a 255? ¿Es un error o hay algo que me estoy perdiendo? gracias.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Subir

Este sitio web utiliza cookies propias y de terceros para mejorar su experiencia. Puede optar por no participar si lo desea. Mas información