LabVIEWForum.de - NMR-Einheit:Timing (Taktrate von 1 MHz) von einem RF-Puls mit zwei TTL-Pulsen

LabVIEWForum.de

Normale Version: NMR-Einheit:Timing (Taktrate von 1 MHz) von einem RF-Puls mit zwei TTL-Pulsen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

Ich baue gerade für meine Diplomarbeit eine NMR-Einheit auf. Ich benutze für die Steuerung der Einheit Labview 7.1 und die DAQmx Vis (am Institut). Ich habe selber noch eine Studentenversion 2009, die ich aber im Moment nicht benutze.

Ich habe jetzt folgendes Problem:

Ein RF-Puls (Radiofreqenzpuls (Pulsdauer 78 microsekunden und Frequenz 76 kHz) generiert durch den DAC der Messkarte USB 6251 BNC) muss mit zwei TTL-Pulsen (erzeugt mit der selben Karte am digitalen Ausgang der Karte) und der ADC-Aufnahme bei einer Taktrate von 1 MHz (Abtastintervall 1 microsek.) folgendermaßen synchronisiert werden.

genaue Beschreibung siehe angehängte png-Grafik

1. Bei Pulsanfang (DAC) soll TTL-Puls1 an sein (logische 1) und TTL-Puls zwei aus (logische 0).

2. Bei Pulsende soll der ADC seine Aufnahme beginnen und der TTL-Puls2 an sein und der TTL-Puls1 aus sein.

3. Im besten Fall sollte die zeitliche Abfolge DAC, ADC, TTL-Puls1 und TTL-Puls2 auf eine microsek. genau sein.


[attachment=33512]

Bis jetzt habe ich nur eine Genauigkeit von einigen ms erreicht. Dies ist aber für ein NMR- Experiment zu ungenau. Ich brauch eine Genauigkeit von microsekunden.

Die Pulsausgabe und die Pulsaufnahme habe ich mit einem internen Takt (20 MHz) zeitlich timen können. Aber jetzt weis ich nicht, wie ich zusätzlich die TTL-Pulse dazu zeitlich timen kann.

Gelingt mir das, dann wäre das ein großer Schritt. Mit den TTL Pulsen erde jeweils abwechselnd Empfangs und Sendespule.

Irgendwie muss ich für alles den selben Takt verwenden. Dies ist mir aber noch nicht gelungen.

Hoffe ihr habt schlaue Ideen und könnt mir weiter helfen.

gruß
Kannst du schon mal Code (sprich VIs) für die Teile hochladen, die funktionieren.

Gruß, Jens
Hey Jens,

hier sind mal zwei Versionen meines Programms. Labviewversion 7.1.

Kurz zu meinem Programm:

1. Ich lese eine Ascii-Datei (in Matlab geschrieben mit einer Abtastrate von 1 MHz) ein

2. Dann beginnt die Pulsausgabe und die Aufnahme durch einen digitalen Trigger gleichzeitig

3. Außerdem kann die Ausgabe und Aufnahme durch die eingebaute Verzögerung beliebig verschoben werden. In einem NMR-Experiment darf die Aufnahme erst beginnen, nachdem der Puls zu Ende ist. !!!!!
Ich verschiebe die Aufnahme also um mindestens die gesamte Pulslänge.

4. Soweit funktioniert das Programm. Allerdings hat es auch noch einen Bug. Manchmal kommt die Fehlermeldung: Task existiert nicht oder ist ungültig. Nach einem Neustart oder warten funktioniert es dann meistens wieder. Woran liegt denn das ?

5. Sollte man keinen Task im Measurement Explorer definieren. Sollte man allles mit den DAQ vis programmieren ? Wenn ich versuche es über Physikalische Kanäle zu steuern klappt die Pulsausgabe nicht.

6. Ja und jetzt muss ich den vorher beschriebenen Zeitverlauf von Pulsausgabe, TTL-Pulse und Pulsaufnahme hinbekommen. Ich könnte auch jeweils einen Spule für senden und empfangen nehmen, dann müsste es auch mit einem TTL-Puls gehen. Dieser müsste aber auch im microsek. zu timen sein.

7. Ich hatte auch die Idee eine zeitgesteuerte sequenz (Pulsausgabe und Aufnahme trennen, aber Aufnahme beginnt dann leider zu spät) zu verwenden, aber mit meiner Karte USB 6251 BNC kann ich nicht im MHZ Bereich timen. Däfür braucht man glaube ich Labview Realtime Module. Irgendwie muss ich den Ablauf im microsek. timen können.

Die Version detectcontrol_V10.vi ist das Basisprogramm (Wie oben beschrieben Pulsausgabe und Aufnahme sowie auch Aufsummierung eines aufgenommenen Signal mit anschließender Fouriertransformation). In dieses sollen nun die TTL-Pulse wie in der Abbildung (Timing PNG) beschrieben implementiert werden.

Ich hoffe das erklärt noch besser mein Problem. Danke für deine Hilfe.


Gruß

Rob[attachment=33567]
Kannst du noch dein "Globales VI" mit hochladen und ersetze bitte die DAQmx-Tasks durch DAQmx Code (Rechtsklick -> Generate Code). Bei solchen Namen weiss man nie, ob das jetzt nur eine Zuordnung eines DAQ-Kanals ist oder noch zusätzlich schon Definitionen (Zeit, Bereich etc.) mit reindefiniert sind.

Gruß, Jens
Servus,

leider kann die Labview 7.1 Version keinen Code automatisch erzeugen. Was meinst du mit globalem vi?

Wie würdest du denn das Programm machen? Kann ich das alles überhaupt ohne Realtime Module so genau timen (microsek)?
Prinzipiell könnte ich den TTL Puls auch basteln ohne ein DAQmxvi dafür zu verwenden.

gruß

Rob
Referenz-URLs