Electrónica para seleccionar cada tercer pulso del láser Ti-zafiro

Actualmente estoy construyendo un sistema de imágenes ópticas y me he encontrado con algunas dificultades. La fuente óptica es un láser Ti-zafiro que emite pulsos a 80 MHz y estoy usando un tubo fotomultiplicador como detector. Me gustaría activar mi muestreo en base a cada tercer pulso del Ti-zafiro (en otras palabras, me gustaría muestrear a 80/3 MHz). Ya he configurado un fotodiodo rápido que puede detectar cada pulso. ¿Hay alguna manera de que pueda recoger fácilmente cada tercer pulso?

Gracias por cualquier ayuda.

Respuestas (1)

Si tiene un detector de fotodiodo que puede emitir un 1 o 0 digital en cada pulso, entonces crear un disparador que emita cada 3 pulsos no es tan difícil.

Haga una máquina de estado que esencialmente cuente hasta 3 y luego se reinicie.

Deje que haya una señal de reloj que sea la salida de su detector de fotodiodos.
Deje que haya una variable de estado de 2 bits que cuente los pulsos (llamémosla C).
Que haya una salida de disparo. Llamémoslo T.

Una descripción HDL para la máquina de estado se vería así...

if rising_edge(clock) then if C = "00" then C <= "01"; elsif C = "01" then C <= "10"; else C <= "00"; end if; T <= C = 00;
Por supuesto, podría sintetizar ese código HDL en un CPLD directamente. Alternativamente, podría usar algunos chips lógicos de la serie 74 para implementar la lógica.

C(0) <= C(0) NOR C(1)
C(1) <= (C(0) NOR C(0)) NOR C(1)

T = C(0) NOR C(1)

Así que necesitaría una compuerta NOR cuádruple y dos D-Flip-Flops.

Además, como algunos han sugerido, podría usar el detector de pulsos para cronometrar un registro de desplazamiento de 3 etapas dispuesto en un círculo. Su disparador sería la salida de una de las tres etapas de registro.

El registro de desplazamiento tendría que estar precargado con el valor "100". Después del primer pulso, el valor cambiaría a "010", después del segundo "001", y luego después del tercero volvería a "100". Entonces tendrías un 1 en tu gatillo cada tercer pulso.

Eso es "elsif" no "else if" y necesitas otro "then" (pero un contador sería más simple)
En lugar de nands y nors, también puede precargar un registro de desplazamiento cíclico de tres bits con 0 0 1 y usar los pulsos para registrarlo y leer el bit más alto.
@Marcus Müller Estoy de acuerdo, el registro de desplazamiento también podría funcionar y podría admitir velocidades de reloj más altas.
@Brian Drummond Gracias por la verificación de sintaxis. Lo arreglé.
Hola, no recomendaría una máquina de estado a nadie para hacer una secuencia fija, particularmente una secuencia tan pequeña. Como han sugerido otros, un contador de anillo o un contador binario es más simple y, por lo tanto, más rápido y mejor. Un FSM puede reducirse a similar aquí, pero no es un buen camino para comenzar
@ TonyM Estoy de acuerdo con el uso del contador basado en el registro de desplazamiento, siempre que haya alguna otra lógica para precargarlo. Un contador binario, por otro lado, tiende a envolverse naturalmente en una potencia de dos. Dado que quería restablecer cada tercer pulso, un contador binario no era una opción natural, ya que uno habría tenido que crear una lógica adicional para activar el restablecimiento en una comparación para cada tercer conteo (que es esencialmente lo que hace la máquina de estado).
El registro de desplazamiento de recirculación funcionará y será rápido, pero realmente necesita detectar los estados no permitidos y usarlos para reinicializar si ocurren. De lo contrario, una falla de ruido aleatorio puede poner el registro en un estado completamente inutilizable. Tienes tres estados válidos y cinco inválidos.