Elektronik zur Auswahl jedes dritten Pulses vom Ti-Saphir-Laser

Ich baue gerade ein optisches Abbildungssystem und bin auf einige Schwierigkeiten gestoßen. Die optische Quelle ist ein Ti-Saphir-Laser, der Impulse bei 80 MHz ausgibt, und ich verwende eine Photomultiplier-Röhre als Detektor. Ich möchte meine Abtastung basierend auf jedem dritten Impuls vom Ti-Saphir auslösen (mit anderen Worten, ich möchte mit 80/3 MHz abtasten). Ich habe bereits eine schnelle Fotodiode aufgebaut, die jeden Impuls erkennen kann. Gibt es eine Möglichkeit, jeden dritten Impuls einfach abzugreifen?

Danke für jede Hilfe.

Antworten (1)

Wenn Sie einen Fotodiodendetektor haben, der bei jedem Impuls eine digitale 1 oder 0 ausgeben kann, ist es nicht so schwierig, einen Trigger zu erstellen, der bei jedem 3. Impuls ausgibt.

Erstellen Sie eine Zustandsmaschine, die im Wesentlichen bis 3 zählt und dann zurückgesetzt wird.

Lassen Sie es ein Taktsignal geben, das der Ausgang Ihres Fotodiodendetektors ist.
Lassen Sie es eine 2-Bit-Zustandsvariable geben, die die Impulse zählt (nennen wir sie C).
Lassen Sie es einen Triggerausgang geben. Nennen wir es T.

Eine HDL-Beschreibung für die Zustandsmaschine würde so aussehen ...

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;
Sie könnten diesen HDL-Code natürlich direkt auf einem CPLD synthetisieren. Alternativ könnten Sie einige Logikchips der 74er-Serie verwenden, um die Logik zu implementieren.

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

T = C(0) NOR C(1)

Also du würde ein Quad-NOR-Gatter und zwei D-Flip-Flops benötigen.

Wie einige vorgeschlagen haben, könnten Sie den Impulsdetektor auch verwenden, um ein dreistufiges Schieberegister zu takten, das in einem Kreis angeordnet ist. Ihr Trigger wäre der Ausgang einer der drei Registerstufen.

Das Schieberegister müsste mit dem Wert "100" vorgeladen werden. Nach dem ersten Impuls würde sich der Wert auf „010“ verschieben, nach dem zweiten „001“ und nach dem dritten wieder auf „100“. Sie hätten also bei jedem dritten Impuls eine 1 auf Ihrem Trigger.

Das ist "elsif" nicht "else if" und Sie brauchen ein weiteres "then" (aber ein Zähler wäre einfacher)
Anstelle von nands und nors könnten Sie auch ein zyklisches Drei-Bit-Schieberegister mit 0 0 1 vorladen und die Impulse verwenden, um es zu takten und das höchste Bit auszulesen.
@Marcus Müller Ich stimme zu, das Schieberegister könnte auch funktionieren und möglicherweise höhere Taktraten unterstützen.
@Brian Drummond Danke für die Syntaxprüfung. Ich habe es repariert.
Hallo, ich würde niemandem eine Zustandsmaschine empfehlen, um eine feste Sequenz auszuführen, insbesondere eine so winzige Sequenz. Wie andere vorgeschlagen haben, ist ein Ringzähler oder ein Binärzähler einfacher und daher schneller und besser. Ein FSM kann hier auf ähnlich reduziert werden, aber es ist kein guter Ausgangspunkt
@ TonyM Ich stimme der Verwendung des Schieberegister-basierten Zählers zu, vorausgesetzt, es gibt eine andere Logik, um ihn vorab zu laden. Ein binärer Zähler hingegen neigt dazu, auf natürliche Weise eine Zweierpotenz zu bilden. Da er jeden dritten Impuls zurücksetzen wollte, war ein Binärzähler keine natürliche Wahl, da man zusätzliche Logik aufbauen musste, um das Zurücksetzen bei einem Vergleich für jede dritte Zählung auszulösen (was im Wesentlichen die Zustandsmaschine tut).
Das rezirkulierende Schieberegister funktioniert und ist schnell, aber Sie müssen wirklich die unzulässigen Zustände erkennen und diese verwenden, um sie neu zu initialisieren, wenn sie auftreten. Andernfalls kann ein zufälliger Störimpuls das Register in einen völlig unbrauchbaren Zustand versetzen. Sie haben drei gültige Zustände und fünf ungültige.