Está en la página 1de 15

Driver L293B

El circuito integrado L293B (tabla 12.1 y figuras 12.1, 12.2, 12.3 y 12.4) se ha diseado con
el propsito de realizar el control de los motores CC ( DC) de manera ptima y econmica.
Est conformado por cuatro amplificadores push-pull capaces de entregar una corriente de
salida de 1A por canal.
Cada canal est controlado por entradas compatibles con los niveles TTL y cada par de
amplificadores (un puente completo) est equipado con una entrada de habilitacin, que
puede apagar los cuatro transistores de salida. Tiene una entrada de alimentacin
independiente para la lgica, de manera que se puede polarizar con bajos voltajes para
reducir la disipacin de potencia. Los cuatro pines centrales se emplean para conducir el
calor generado hacia el circuito impreso. Sus caractersticas sobresalientes son las
siguientes:

Corriente de salida de 1A por canal.

Corriente pico de salida 2A por canal (no repetitiva).

Pines de Habilitacin.

Alta inmunidad al ruido.

Fuentes de alimentacin separadas.

Proteccin contra exceso de temperatura.

Tabla 12.1 Valores mximos absolutos del driver L293B

Figura 12.1 Distribucin de terminales del driver L293B

Figura 12.2 Diagrama de bloques del driver L293B y tabla de verdad (Z= Alta impedancia
de salida). Se muestran diferentes tipos de conexin de motores CC ( DC).
Observe con cuidado la tabla de verdad de la figura 12.2 y note que si el voltaje de entrada
de habilitacin Vinh tiene un nivel ALTO el voltaje de salida Vo tendr el mismo nivel (ALTO
o BAJO), aunque NO el mismo valor, del nivel de entrada Vi. Algo que debe tenerse muy
en cuenta es que los valores del voltaje de entrada Vi no son los mismos valores del voltaje
de salida Vo, ya que Vi corresponde a valores TTL mientras que Vo es el voltaje de
alimentacin
de
los
motores
Vs.
Por otro lado, si Vinh tiene un valor BAJO, el pin de salida se pone en estado de alta
impedancia (sin importar el valor del voltaje de entrada Vi).

Figura 12.3 Control de motores CC ( DC) (con conexin al positivo y al negativo de la


fuente). Tabla de verdad.
La tabla de verdad de la figura 12.3 muestra la posibilidad de controlar dos motores CC
( DC) en el mismo sentido de giro, con la diferencia de que M1 girar si la entrada A tiene
un nivel BAJO, mientras que M2 girar si la entrada B tiene un nivel ALTO.

Figura 12.4 Control de giro en ambos sentidos de un motor elctrico DC

Driver L293D
El driver L293D (figura 12.5) es similar al L293B, se diferencia fundamentalmente en su
mxima corriente de salida y en la incorporacin de los diodos de proteccin en cada uno
de los cuatro amplificadores. Sus caractersticas principales son las siguientes:

Corriente de salida de 600 mA por canal.

Corriente pico de salida 1,2A por canal (no repetitiva).

Pines de Habilitacin.

Alta inmunidad al ruido.

Fuentes de alimentacin separadas.

Proteccin contra exceso de temperatura.

Diodos de proteccin incorporados.

Figura 12.5 Diagrama de bloques del driver L293D


El L293D diseado para recibir niveles TTL y alimentar cargas inductivas (rels, motores
DC y PAP bipolares y unipolares) y transistores de potencia de conmutacin. Este
dispositivo se puede usar en aplicaciones de conmutacin hasta los 5 kHz. Est
encapsulado en formato DIP16 y sus cuatro pines centrales se han conectado juntos y se
emplean
como
disipadores
de
calor.

Conexin del driver L293D al PIC


El control de giro de motores DC por medio del driver L293D se detalla en el siguiente
ejemplo. Tambin puede emplearse el L293B tomando en cuenta que se deben aadir los
diodos de proteccin (pueden ser del tipo 1N4007) como se indica en la figura 12.4.
Ejemplo-MotorDC_01.c: Conexin tpica de un motor elctrico DC al PIC a travs del
driver L293D (figuras 12.6.1 y 12.6.2). El giro del motor est determinado por el estado de
los pines RB0 y RB1 de acuerdo a la tabla 12.2. El pin RB0 determina el encendido o

apagado

del

motor,

mientras

que

RB1

controla

el

sentido

de

Tabla 12.2 Tabla de verdad del problema MotorDC_01.c

Figura 12.6.1 Circuito de control de motores CC (DC) con el L293D


//MotorDC_01.c
void main(){
OSCCON=0x60;

//Oscilador interno a 4MHz (TCI=1 us).

while (OSCCON.IOFS==0);

//Esperar mientras el oscilador est inestable.

giro.

PORTB=0x00;
NOT_RBPU_bit=0;
TRISB=0b11100011;

//Inicializacin.
//Habilitar las pull-up.
//RB<4:2> como salidas.

while (1){
if (RB0_bit==0) RB4_bit=0;

//Motor desconectado.

if (RB0_bit==1){
if (RB1_bit==0) PORTB=0b00011000; //Giro a la derecha.
if (RB1_bit==1) PORTB=0b00010100; //Giro a la izquierda.
}
}
}

En el utilizamos el drivers L298, recuerda que la mxima intensidad que soporta como
salida las patillas del PIC son de 25 mA y un motor de estas caractersticas (segn el
modelo), pueden llegar a 200 300 mA, hay muchos drivers para el control de motores
pequeos y cuya corriente no superen 2 amperios, pero este tiene la ventaja de que
est modelado en Proteus con lo que podremos simularlo sin problemas, el datasheet
del drivers lo tenis aqu.

En el vemos sus caractersticas, este puede controlar dos motores cuya intensidad
mxima no superen los dos amperios, para saber su funcionamiento miramos su tabla
de verdad:

Si Ven est a nivel alto:

IN3=H y IN4=L --> giro derecha


IN3=L y IN4=H --> giro izquierda
IN3=IN4 --> para el motor

Los diodos utilizados son para proteger al circuito de las fuerzas contra electromotrices
que se producen en el bobinado del motor al conmutar el sentido de la marcha.

Vamos a ver el programa en C:

//Archivos de cabecera:
#include <16F84A.h>
#FUSES NOWDT, XT, NOPUT
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8)
#bit RB1=0x06.1 // Identificadores de bits
#bit RB2=0x06.2

//Prototipos de las funciones


void instrucciones(void);
void derecha(void);

void izquierda(void);
void parar(void);
void mensaje(void);

//Archivo principal:
#include "Control_Motor_CC.h"

int marcha=0;//variables globales


char sentido;

void main()
{

char M;

set_tris_b( 0b11111001 ); // Se configura la puerta B


RB1 = 0; // Se inicializa los bits de salida
RB2 = 0;

//llamada a la funcin instrucciones();


instrucciones();

while (true)
{
M=getc();

switch (M) {

case 'i':
izquierda();
sentido='i';
break;
case 'd':
derecha();
sentido='d';
break;
case 'p':
parar();
break;
default :
mensaje();
break;
}
}

//Definicin de funciones

void instrucciones() //instrucciones para el control del Motor


{
puts("========= Control de un Motor de CC ==========");

puts("Pulsa 'i' para giro a la izquierda");


puts("Pulsa 'd' para giro a la derecha");
puts("Pulsa 'p' para parar el motor");
}

void izquierda ()
{
if ((marcha==1) && (sentido=='d')){ //si motor est en marcha -->derecha paro y
espero 3s
parar();
delay_ms(3000);
RB1=0;
RB2=1;
marcha=1;
}
else{
RB1=0;
RB2=1;
marcha=1;
}
}

void derecha ()
{
if ((marcha==1)&& (sentido=='i')){ //motor en marcha --> izquierda, paro y espero 3s
parar();
delay_ms(3000);

RB1=1;
RB2=0;
marcha=1;
}
else{
RB1=1;
RB2=0;
marcha=1;

}
}

void parar ()
{
RB1=0;
RB2=0;
marcha=0;
}

void mensaje ()
{
puts("Prueba de nuevo");
}

Comentario
Este es un ejemplo que estructura el cdigo en funciones, para los que estis
empezando a programar y no sepis como utilizarlas, "no problem" porque pronto se

ver en el tutorial de teora todo lo referente a ellas. De momento vale con que sepis
que toda funcin necesita una declaracin, que se suele incluir en un archivo de
cabecera, una definicin donde se encuentran las instrucciones que realiza la funcin y
una llamada a la funcin.

Si ejecutamos el programa la terminal nos mostrar la siguiente informacin para el


control del motor:

El ejemplo lleva incluido la siguiente proteccin para el motor: si el motor est en


marcha girando en un sentido y pulsamos la letra correspondiente para cambiar el
sentido de marcha, primero para el motor, espera durante tres segundos y luego cambia
el sentido de giro al motor.

Pese a los diodos de proteccin no viene mal controlar esta situacin por medio del
cdigo del programa. Imagnate que vas en coche por la autopista a 120 Km/hora y
metes la marcha atrs.

El cdigo fuente y el DNS lo tenis aqu

Hasta ahora hemos visto como interactuar con las funciones de entrada y salida por
medio de la terminal, en el prximo ejemplo veremos cmo utilizar el componente
COMPIM de proteus, para interactuar con un puerto serie real ( virtual, si no
disponemos de ninguno) de nuestro ordenador y utilizar el HyperTerminal de Windows
otro programa para interactuar con la simulacin del circuito en Proteus.

Como siempre el ejemplo puede ser mejorado, espero vuestros comentarios y


aportaciones en el foro.

Un saludo

Archivo Control_Motor_CC.c
/*--------------------------------------------------------*\
| Control de un motor de CC por medio de la Terminal
|
| autor: biblioman
|
| www.aquihayapuntes.com
|
\*--------------------------------------------------------*/
#include "Control_Motor_CC.h"
int marcha=0;//variables globales
char sentido;
void main()
{
char M;
set_tris_b( 0b11111001 );
// Se configura la puerta B
RB1 = 0; // Se inicializa los bits de salida
RB2 = 0;
//llamada a la funcin instrucciones();
instrucciones();
while (true)
{
M=getc();
switch (M) {
case 'i':
izquierda();
sentido='i';
break;
case 'd':
derecha();
sentido='d';
break;
case 'p':
parar();
break;

default :
mensaje();
break;
}
}
}
//Definicin de funciones
void instrucciones() //instrucciones para el control del Motor
{
puts("========= Control de un Motor de CC ==========");
puts("Pulsa 'i' para giro a la izquierda");
puts("Pulsa 'd' para giro a la derecha");
puts("Pulsa 'p' para parar el motor");
}
void izquierda ()
{
if ((marcha==1) && (sentido=='d')){ //si motor est en marcha -->derecha
paro y espero 3s
parar();
delay_ms(3000);
RB1=0;
RB2=1;
marcha=1;
}
else{
RB1=0;
RB2=1;
marcha=1;
}
}
void derecha ()
{
if ((marcha==1)&& (sentido=='i')){ //motor en marcha --> izquierda, paro y
espero 3s
parar();
delay_ms(3000);
RB1=1;
RB2=0;
marcha=1;
}
else{
RB1=1;
RB2=0;
marcha=1;
}
}
void parar ()
{
RB1=0;
RB2=0;
marcha=0;
}

void mensaje ()
{
puts("Prueba de nuevo");
}

Archivo Control_Motor_CC.h
#include <16F84A.h>
#FUSES NOWDT, XT, NOPUT
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8)
#bit
RB1=0x06.1 // Identificadores de bits
#bit
RB2=0x06.2
//Prototipos de las funciones
void instrucciones(void);
void derecha(void);
void izquierda(void);
void parar(void);
void mensaje(void);

También podría gustarte