Hola, bueno habiendo solucionado el problema anterior, me surgió otro inconveniente, esta vez algo muy raro que me sucede al querer mover un motor de una lectora de CD.
Estoy terminando un proyecto de una Tolva, el cuál consiste brevemente en:
- 3 pulsadores de llamada(que determinan el peso a cargar en la caja)
- 3 red switch (con imán, que cumplen la función de indicadores para saber si ya se ha llegado al peso fijado por el pulsador).
El programa es muy simple, esta hecho en lenguaje C y espera que uno de los 3 pulsadores de llamada se active, una vez hecho esto, la lectora se habre (lo que es la puerta de la tolva) para comenzar a descargar hacia la caja. Durante esta operación, el recipiente se llena de material hasta que se active el red switch correspondiente al pulsador que se ha elegido, por ej: si pulso el pulsador número 1, la tolva descargará hacia el red switch 1. El código del programa es el siguiente:
Bueno, dicho esto prosigo con la parte práctica. Lo primero que hice fue simular en Proteus ISIS el programa, y funcionó. Lo armé en una Protoboard antes de comenzar la placa PCB, suplantando los 2 cables de la lectora por 2 LED's (ya que aún no disponía del L293B), uno de apertura y otro de clausura de la puerta (si se enciende el conectado al pin A0 del PIC, indica que la puerta se debe abrir, caso contrario, si se enciende el conectado al pin A1, se debe cerrar - ver código de programa -) y los 2 red switch fueron "simulados" con 3 cables (debido a que tampoco tenía los 3 red switch) que conecté a VDD (+5v) cuando pruebé el funcionamiento.Código:#include "16F876A.h" ///// ESTABLEZCO FRECUENCIA DEL CRISTAL A UTILIZAR ///// #use delay (clock=4000000) ///// CONFIGURACIÓN DE FUSES ///// #fuses XT,NOWDT,NOPROTECT,NOPUT,NOLVP,BROWNOUT ///// INICIALIZACION DE VARIABLES ///// int pulsador; int peso; void main (void) { ///// CONFIGURACIÓN DE PUERTOS ///// set_tris_b(11111111); /* puerto B entrada */ set_tris_a(000000); /* puerto A salida */ set_tris_c(11111111); /* puerto C entrada */ ///// PROGRAMA PRINCIPIAL ///// output_low(pin_a0); /* coloco en 0 la salida A0 */ output_low(pin_a1); /* coloco en 0 la salida A1 */ principio: while(1) /*espero que se presione el pulsador 1, 2 o 3 para saber hacia donde va a descargar*/ { pulsador=0; if(input(pin_b0)) /* pulsador 1 seteo peso 10 */ { pulsador=1; peso=10; break; } if(input(pin_b1)) /* pulsador 2 seteo peso 20 */ { pulsador=2; peso=20; break; } if(input(pin_b2)) /* pulsador 3 seteo peso 30 */ { pulsador=3; peso=30; break; } } switch(pulsador) /* dependiendo del valor de pulsador descarga al switch 1,2 o 3 */ { case 1: delay_ms(1000); output_high(pin_a0); /*abro la puerta de la lectora*/ delay_ms(4000); output_low(pin_a0); while(input(pin_c0) != 1) /* mientras no llegue al peso solicitado carga el material */ { delay_ms(100); /* cargando material... */ } output_high(pin_a1); /*cierro la puerta*/ delay_ms(4000); output_low(pin_a1); break; case 2: delay_ms(1000); output_high(pin_a0); /*abro la puerta*/ delay_ms(4000); output_low(pin_a0); while(input(pin_c1) != 1) { delay_ms(100); /* cargando material... */ } output_high(pin_a1); /*cierro la puerta*/ delay_ms(4000); output_low(pin_a1); break; case 3: delay_ms(1000); output_high(pin_a0); /*abro la puerta*/ delay_ms(4000); output_low(pin_a0); while(input(pin_c2) != 1) { delay_ms(100); /* cargando material... */ } output_high(pin_a1); /*cierro la puerta*/ delay_ms(4000); output_low(pin_a1); break; default: output_low(pin_a0); output_low(pin_a1); break; } delay_ms(500); /* antirebote */ goto principio; /* vuelve a comenzar el programa */ }
Hasta aquí todo funciona correctamente. El problema está cuando pruebo el programa con el DRIVER que maneja el motor. Lo que sucede es que la puerta se ABRE PERO NO SE CIERRA. Cuando pulso P1, por ej., existe un "1" lógico en el pin 2 (input 1) del integrado L293B - ver diagrama de conexiones L293B - (el cuál soporta una tensión de entre 2.3V hasta 7V, en mi caso le envío 5V que es el valor que me entrega el PIC 16F876A por el pin A0). Al estar activado el red switch 1 (cable del pin C0 a +5V) debería sacar por el pin A1, según el programa lo indica, 5V durante 4 segundos, pero NO lo hace, no envía los 5V necesarios para cerrar la puerta. Esto lo observé haciendo funcionar el PIC normalmente y probando la tension con el Multimetro. En el primer caso se envian los 5V para la apertura, pero no los 5V durante los 4 segundos para cerrarla.
Cabe destacar que, cuando desconecto los cables de los pines 2 y 7 del L293B, el programa funciona bien, enviando los valores correctos de tensión en cada uno de los pines y por el tiempo establecido, no así cuando los conecto al DRIVER. Asi mismo, si hago funcionar el L293B en forma independiente lo hace perfectamente, sin nigún problema. Al final del hilo adjunto el esquema de conexion del PIC y el DRIVER.
Otra cosa que quiero mensionar es que estoy alimentando los 2 circuitos juntos (PIC+DRIVER) con 5V, pero no creo que sea ese el inconveniente.
Bueno, se hizo un poco extenso, espero haberme expresado con claridad y que me puedan ayudar con este problema porque me tiene a mal traer y es muy raro.
Muchas gracias.
Aquí les dejo los archivos adjuntos:
Diagrama de Conexiones.rar
L293B datasheet.rar


LinkBack URL
About LinkBacks
Citar
