Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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:
Pines de Habilitacin.
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).
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:
Pines de Habilitacin.
apagado
del
motor,
mientras
que
RB1
controla
el
sentido
de
while (OSCCON.IOFS==0);
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:
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.
//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
void izquierda(void);
void parar(void);
void mensaje(void);
//Archivo principal:
#include "Control_Motor_CC.h"
void main()
{
char M;
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 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.
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.
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.
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);