TODOPIC
FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: manwenwe en 13 de Agosto de 2016, 08:32:23
-
Hola,
para la salida de un circuito con fototransistor que no funciona bien pero que no tengo otra que utilizar (abierto = 3.3V, cerrado = 1.65V) he puesto un comparador para adaptar la señal a la entrada digital de un PIC:
(https://s10.postimg.org/gywop717t/LAP.png) (https://postimg.org/image/4k9wov9ph/)subir fotos gratis (https://postimage.org/index.php?lang=spanish)
El caso es que la salida del OAMP me da el mismo voltaje que la entrada no invertida, como si fuese un seguidor de voltaje: 3.3V==>>3.3V y 1.65V==>>1.65V en vez de 3.3V==>>3.3V y 1.65V==>>0V.
Aunque es un circuito muy simple lo he simulado en proteus (con otro OAMP porque ese rail-to-tail no está) y funciona perfecto.
No hay ningún pin en corto con otro y el chip no se calienta. Lo cambiaría por si está roto pero no puedo ir a la oficina el fin de semana y tenía planes de programar el PIC y esto me limita :-(.
¿Alguna sugerencia?.
Gracias.
Saludos!
-
No entiendo por que si necesitabas un comparador, no usaste un comparador en ves de un OPAMP, a mi parecer.
La salida tiene algo mas? o va directo al PIC asi como esta, me refiero a que si tenes algun pull-up o pull-down?
Si no es eso entonces no tengo la menor idea que es. Y lo unico que me queda pensar es el OPAMP,
-
No utilicé el comparador del PIC por pereza: se que tiene amplificadores internos pero nunca los he utilizado. La salida va directa al micro, no hay resistencias de referencia. Eso puede influir?
Saludos!
-
Pense el caso contrario, en que si exista un pull-up/down podria formarse una realimentacion, pero si va directo no tiene razon de ser, por lo que vi la ganancia de tension es de unos 100 aproximadamente. Pero si decis que tenes 1.65V en una entrada y la de referencia son 2.5V tranquilamente deberias tener los 0V a la salida.
Por eso decia que lo unico que me queda pensar es el OPAMP
PD: Cuando me referia a un comparador, lo decia a un comparador externo.
-
Nada: pues lo cambiaré el martes en la oficina.
¿Te refieres a algún IC distinto a un operacional que hace directamente de comparador? No utilicé nunca ese IC...
Saludos!
-
Dejando de lado que esto no tiene nada que ver con el problema, ni es una solucion a ese problema. Solo para agregar y responderte:
Es que son dos cosas distintas a pesar que tengan el mismo simbolo
Aunque un AO pueda usarse de comparador si es que la velocidad no es necesaria ( ya que suelen tener un slew-rate en la salida ). Ya que tu parte es de TI voy a poner el enlace a la parte de amplificadores.
http://www.ti.com/lsds/ti/analog/amplifiersandlinears/amplifiersandlinears.page
Vas a ver que en todas las secciones se separa el "Op Amp" del "Comparador"
Ejemplo este es uno:
http://www.ti.com/lit/ds/symlink/tlv7211.pdf
O uno de los mas conocidos:
http://www.ti.com/lit/ds/symlink/lm397.pdf
( Salida Open Colector y en el datasheet te dice hasta como hacer y calcular la histeresis, aunque las tensiones no te sirven en tu caso. )
el AO funciona de manera lineal, mientras que el comparador es TODO o NADA (pensalo como un AO con ganancia infinita pero no preparado para lo "lineal").
La anterior ves si no me acuerdo en un post de micro_pepe y con la ayuda de Picuino y Chaly se trato si no mal recuerdo una realimentacion (el cual habian otros componentes mas), me sorprendio que el comparador sea el que mejor funciono. A pesar que su salida era como una señal triangular ya que como decia es TODO o NADA. Mientras que el AO tuvo un pobre desempeño comparado con el otro. A pesar que uno quisiera que la salida respondiera de forma lineal, tal ves la velocidad del mismo afectaba a la regulacion.
-
Genial! Gracias por la info: siempre usé AOs como comparadores. En este caso no se necesita mucha velocidad. La señal del fototransistor viene de un "laptimer" y sólo voy a dar precisión de centésimas de segundo: de hecho el filtro de ruido es por SW (menor precisión aún).
Es bueno tener alternativas que funcionen mejor para casos específicos.
Saludos!
-
Una entradita que tenía en un blog desde hace tiempo de una vez que monté un circuito con un comparador: http://webdelcire.com/wordpress/archives/866
Opino como Killer que es más adecuado usar un comparador que un operacional para lo que quieres hacer, además si añades realimentación al circuito tendrás histéresis.
-
También puedes usar uno de los comparadores del pic o el conversor ADC si los tiene.
-
También puedes usar uno de los comparadores del pic o el conversor ADC si los tiene.
Lo que necesito es una interrupción por flanco de subida aunque una interrupción por nivel bajo (1.65V en este caso) también sería útil. Parece ser que ambos me valdrían. Lo único es que tendría que puentear a mano los pines del PIC ya que el actual no está multiplexado con ADC ni es remapeable para "llevarlo" al comparador.
Voy a investigar. Gracias.
Saludos!
PD.: perdón, los pines del comparador, asl ser analógicos también, no parecen remapeables.
-
Bueno,
lo del comparador parece que va bastante bien y es más sencillo de lo que pensaba. Como no tengo soldador a mano y tengo que hacer pruebas las he hecho con un pulsador que está abierto a 0V (pulldown interna) y cerrado a 3.3V. Es para PIC32MZ. Dejo la inicialización por si a alguien le es útil. OJO!!!: no miréis los manuales especificos de CVREF y COMPARATOR porque son de PIC32MX (los registros son parecidos pero no iguales a los de PIC32MZ); Los CAPULLOS de Microchip no actualizan las documetaciones. :5].
Para configurar el pin de la entrada no invertida (curioso pero la pulldown en el pin analógico también funciona, si no la ponía ocurrían un montón de falsos positivos):
#define LAPn_TRIS TRISBbits.TRISB2
#define LAPn_ANSEL ANSELBbits.ANSB2
#define LAPn_PULLDOWN CNPDBbits.CNPDB2
LAPn_TRIS = 1;
LAPn_ANSEL = 1;
LAPn_PULLDOWN = 1;
Para configurar CVREF:
CVRCONbits.CVROE = 0; // CVref pin disconnected.
CVRCONbits.CVRSS = 0; // Reference: Avdd - Avss
CVRCONbits.CVRR = 0;
CVRCONbits.CVR = 0b1111; //2.37V with CVRSRC = 3.3
CVRCONbits.ON = 1;
Para configurar el comparador 2:
CM2CONbits.COE = 0; // CVREF pin disconnected.
CM2CONbits.CPOL = 1; // Output is inverted.
CM2CONbits.EVPOL = 0b10; //Interrupt: high-to-low.
CM2CONbits.CREF = 1; // Non-inverting input to CVref.
CM2CONbits.CCH = 0b00; // Inverting input to C2INB.
CM2CONbits.ON = 1;
Interrupciones:
IPC32bits.CMP2IP = 4; // Set priority level = 4
IPC32bits.CMP2IS = 1; // Set sub-priority level = 1
IFS4bits.CMP2IF = 0;
IEC4bits.CMP2IE = 1;
Vector de interrupciones:
void __ISR(_COMPARATOR_2_VECTOR, ipl4AUTO) IntHandlerDrvCmpInstance0(void)
{
IFS4bits.CMP2IF = 0;
return;
}
El módulo es muy sencillito y con lo de invertir la salida, el selector de flancos para interrupciones y CVREF... muy versatil.
Algo nuevo que aprendí...
Saludos!
-
Se resolvió el misterio... Mi mala cabeza :oops: :oops: :oops:, por no acordarme de dos cosas. 1º Los leds de infrarrojos se disparan con PWM. 2º (MAS IMPORTANTE) usar multímetro en vez de osciloscopio para medir señales. El OP estaba funcionando bien y el multímetro me daba el valor RMS.
A parte de eso he tenido más problemas. EL micro está alimentado por el mismo "rail" que alimenta el DC-DC de backlight de un LCD, el cual genera ruido. Cada cierto tiempo (de 200ms a pocos segundos) el fototransistor lanza un pulso sin el emisor encendido (un "falso positivo"). He tenido que filtrar por SW; un timer cada 10ms contando pulsos: con 3-5 pulsos me aseguro de descartar los "falsos positivos".
En fin. Al menos está solucionado :).
Saludos!
-
Hola manwenwe, un buen filtrado para el DC-DC también hubiera sido una buena opción.
Un saludo.
Atte. CARLOS.
-
Hola manwenwe, un buen filtrado para el DC-DC también hubiera sido una buena opción.
Un saludo.
Atte. CARLOS.
Sin duda Carlos: pero en esta PCB no puedo ya que hay que hacer "demasiada cirujía" para arreglarlo y tengo que dar el proto funcionando ya. Para la final filtro con ferrita.
Gracias.
Saludos!