Problema con Optoacoplador

Muy buenas,

El problema es sencillo, pero creo que la solución es complicada.

He diseñado un PCB que utiliza una rueda dentada y un optoacoplador como interruptor, para cambiar la polaridad de un componente. El optoacoplador está conectado a una FPGA Spartan-6 XC6SLX9.

El problema que he detectado es que si la rueda va lenta, el optoacoplador dibuja una curva para llegar desde 3.3V a 0V y viceversa, en vez de ser una recta o mejor dicho, una señal cuadrada.

Esto provoca que la FPGA haga varias transiciones, en un diente de rueda.

¿Le veis alguna solución fácil a esto, ya sea mediante hardware o por VHDL?

Gracias de antemano.
 
Creo que puedes solucionarlo con una compuerta lógica que
tenga la entrada tipo Smith Trigger (del tipo CD40106 etc)
también puedes intercalar un biestable.

saludos,
Ledo
 


circuito.gif


 
Antes de nada, gracias por las respuestas.

He cambiado las resistencias y creo que mas o menos ha mejorado. Tengo que hacer mas pruebas.

De todas formas, ¿existe otra manera de hacer esto, que no sea con optoacopladores?. Hay que tener en cuenta que la rueda puede llegar a girar unas 20 rps. y tiene 32 dientes. La rueda esta sujeta a un eje de un motor.
 
Hola, la resistencia del LED déjala con el valor anterior, ya que al ser más pequeña, genera una intensidad luminosa mayor, y eso nos juega en contra, ya que lo que se busca es que el fototransistor pase de la saturación al corte más rápidamente. El mejor remedio, es añadír un sistema con histeresis, cómo comentó un compañero. Otra opción es cerrar el paso del haz con una ranura pequeña, así mejoramos el contraste de cambio.
 
Última edición:
Hola, puedes usar comparadores tipo LM311 o LM2903 y agregar histéresis mediante un resistor de realimentación positiva.

st2.png

Busca info sobre el tema de histéresis y eso solucionará tu aplicación, los comparadores son mucho mas veloces que los optos, consumen menos energía y por lo general son más baratos. ;)

Saludos
 
Han pasado 4 meses y la semana pasada pude volver con el problema del optoacoplador.

Ya habia diseñado una pequeña placa con un "schmitt trigger buffer" para acoplarla por uno de los puertos a la placa, cuando se me ocurrio que quizás lo podia arreglar con Verilog (ya que es una FPGA).

Asi que despues de varios intentos, desarrolle el siguiente código que soluciona el problema.

Código:
//-----------------------------------------------------
module opto    (
optocoupler     ,  // Output of the counter
flag  ,  // enable for counter
clk     ,  // clock Input
);
//----------Output Ports--------------
     output flag;
//------------Input Ports--------------
     input optocoupler, clk;
//------------Internal Variables--------
	 reg [9:0] counter;
     reg [9:0] counterUp;
	 reg [9:0] counterDown;
//-------------Code Starts Here-------
always @(posedge clk)
begin

	if (optocoupler) 
		counterUp <= counterUp + 9'd1;
	else
		counterDown <= counterDown + 9'd1;
	
	if(counter >= 9'd1000)
	begin
		counter <= 9'd0;
		counterUp <= 9'd0;
		counterDown <= 9'd0;
		
		if(counterUp >= counterDown)
			flag <= 1'd1;
		else
			flag <= 1'd0;		
	end
	else
		counter <= counter + 9'd1;
		
end 

endmodule

El código es mejorable, sin embargo, el problema aparentemente parece estar solucionado.

Un saludo y gracias a todos.
 
Atrás
Arriba