LabVIEWForum.de - Zeitliche Auflösung bei der Erfassung von Signalen

LabVIEWForum.de

Normale Version: Zeitliche Auflösung bei der Erfassung von Signalen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe Leute, dies ist mein erster Thread, bin relativ neu vertraut mit der Software, habe mir aber sicherlich mittlerweile 100 Seiten A4 Tutorials angeschaut.

Ich habe 2 Photodioden, die mindestens mit einer zeitlichen Auflösung von 20µs GLEICHZEITIG ausgelesen werden sollen. Ist das überhaupt möglich mit Labview?

Ich hab im Anhang mal ein Minimalbeispiel gepackt, mit dem ich die zeitliche Auflösung von Labview ausprobieren wollte. Diese liegt ungefähr bei 10 bis 40µs und damit gerade so am Limit. Gibt es eine Möglichkeit, eine noch höhere zeitliche Auflösung zu erreichen? Abgesehen davon habe ich in meinem eigentlich Programm immer noch einen zufälligen Versatz zwischen beiden Messschleifen im Millisekundenbereich, aber das liegt vielleicht noch daran, dass ich das ganze noch nicht perfekt optimiert habe.

Ich meine notfalls kann ich ja mit der relative timefunction ziemlich genau die Differenz zwischen beiden Aufnahmeschleifen bestimmen und das ganze am Ende wieder "gerade" rücken, oder (Wie sehr kann ich hier auf die Genauigkeit vertrauen)?

Viele Grüße
Verrain
------------------------------------------------------------
System: 64 Bit AMD Athlon™ II X2 215 Processor 2.71 GHz
Labview Version: 32 Bit 15.0.1
Hallo,

Zitat:Wie sehr kann ich hier auf die Genauigkeit vertrauen)?
Das Einlesen der Signale erledigt die Hardware mit ihrem eigenen Timer - viel genauer als du es unter Windows hinbekommen wirst!
Du brauchst nur DAQ-Hardware, die 50kHz mit zwei Kanälen unterstützt.. - dann kannst du dich 100%ig darauf verlassen…

Zitat:Ich hab im Anhang mal ein Minimalbeispiel gepackt, mit dem ich die zeitliche Auflösung von Labview ausprobieren wollte.
Dein Programm misst nur, wie schnell nacheinander der HighRes-Timer abgefragt werden kann.
Das hat nichts mit "zeitlicher Auflösung von LabVIEW" zu tun…
(16.05.2017 16:43 )Verrain schrieb: [ -> ]Ich meine notfalls kann ich ja mit der relative timefunction ziemlich genau die Differenz zwischen beiden Aufnahmeschleifen bestimmen und das ganze am Ende wieder "gerade" rücken, oder (Wie sehr kann ich hier auf die Genauigkeit vertrauen)?

Unter Windows (und jedem anderen nicht-realtime Betriebssystem) grundsätzlich gar nicht! Nicht mal Millisekunden-Genauigkeit ist damit zu garantieren und in ganz seltenen Extremfällen kann Dein Prozess auch mal locker eine oder mehrere Sekunden komplett inaktiv bleiben! Wenn Du solche Erfassungsanforderungen hast, gehört das ganz klar durch ein Hardwareinterface gemacht, so wie es Gerd auch schon erwähnte. Dazu wäre noch die Frage ob Du diese zwei Kanäle tatsächlich echt simultan lesen musst. Dann benötigst Du eine Simultanous Sampling Karte und die sind normalerweise einiges teurer, da für jeden Kanal ein eigener AD-Konverter vorhanden sein muss und das sind relative teure Bauteile. Mit einer multiplexten Karte wird ein Kanal nach dem anderen gelesen und hast Du daher eine kleine Phasenverschiebung zwischen den Kanälen. Diese kann aber relativ klein gehalten werden indem man das Sampling der Kanäle nicht über das gesamte Scaninterval verteilt, sondern alle Kanäle so schnell die Karte es erlaubt hintereinander liest und dann wartet bis das gesamte Scaninterval abgelaufen ist. Je schneller die Karte also ist, umso weniger Phasenverschiebung hat man, dabei muss man aber berücksichtigen dass die Settling-time des AD-Konverters auch abhángig ist von der Impedanz der Signalquelle.
Vielen Dank für euer FeedbacK! Ja bei dem PC handelt sich um ein Windowssystem, es stände aber notfalls auch ein Mac zur Verfügung, falls es das besser macht.

Also ich habe eine Hardware vor Labview geschaltet, eine sogenannte ADwin Gold (http://www.adwin.de/de/produkte/gold.html). Sitz hier in einem Universitätslabor, da ist gute Hardware vorhanden Smile.

Ich denke mal, die wird den Anforderungen gerecht, die ihr erwähntet. Zwecks Phasenverschiebungen steht mir auch noch ein Lock_in Amplifier zur Verfügung.

Soweit ich das aus dem vorhanden Programmen meiner Vorgänger ersehen kann, werden immer 1600 Werte von der Hardware geholt und das in einer Schleife, bis alle Messwerte auf dem PC sind. Wenn ich genau darüber nachdenke, wird die ADwin sicherlich alle Messwerte zwischenbuffern und diese dann Portionsweise übergeben, so dass es keinen zeitlichen Versatz zwischen den Übertragungsschleifen geben wird.

Aber dennoch habe ich einen Versatz zwischen beiden Signalen von ca. -20 bis + 20 µs. Ich Vermute mal, dass Problem liegt darin, dass der Startbefehl zum Messen nicht "gleichzeitig genug" gegeben werden kann. Ich hab das Blockdiagramm mal angefügt.

FiFo Full schaut nur nach, wie voll der Buffer ist (1600 oder weniger) und get FiFo Float holt dann die Daten herüber.

Nun ist das ja schon nebeneinander gepackt, dass es hoffentlich gleichzeitig startet, aber da gibt es sicherlich einen zeitlichen Versatz zwischen beiden Startbefehlen (also der Zeitpunkt auf dem FiFo Full abgefragt wird, denn das erste mal wird sicherlich auch den Messvorgang starten)... gibt es eine Möglichkeit, dass noch Zeiteffizienter zu gestalten?

Grüße
Verrain
Hallo Verrain,

Zitat:Zwecks Phasenverschiebungen steht mir auch noch ein Lock_in Amplifier zur Verfügung.
Das ist damit nicht gemeint!
Phasenverschiebung bedeutet hier: bei einem ADC hinter einem MUX muss der MUX immer zwischen den zu messenden Kanälen umschalten. Dieses Umschalten benötigt Zeit und führt dazu, dass die Signale nicht gleichzeitig, sondern jeweils mit einer kleinen Verzögerung (=Phasenverschiebung zueinander) gewandelt werden!

Zitat:dennoch habe ich einen Versatz zwischen beiden Signalen von ca. -20 bis + 20 µs. Ich Vermute mal, dass Problem liegt darin, dass der Startbefehl zum Messen nicht "gleichzeitig genug" gegeben werden kann.
Das könnte bei deinem VI der Fall sein…
Erlaubt der Adwin-Treiber nicht das Erfassen mehrerer Kanäle mit nur einem Funktionsaufruf?

Warum ist das VI so schrecklich unaufgeräumt? Wozu die unnötige Sequenzstruktur?

Zitat:gibt es eine Möglichkeit, dass noch Zeiteffizienter zu gestalten?
Das hängt vom Treiber für deine DAQ-Hardware ab!
Kannst du mehrere Kanäle mit einem Task/einem Funktionsaufruf abfragen?
Kannst du einen Start-Trigger für mehrere Hardwarekanäle verwenden?
Lies mal dein Handbuch oder frage den Adwin-Support!
Zitat:Erlaubt der Adwin-Treiber nicht das Erfassen mehrerer Kanäle mit nur einem Funktionsaufruf?

Also ich habe jetzt mal in den externen Bibliotheksaufruf geschaut. Da steht im Pfad nur Adwin32.* drin und unten kann ich zwischen vielen Funktionen auswählen (dort ist leider keiner dabei). Ich weiß nicht worauf sich dieser Pfad bezieht, sonst hät ich nachgeschaut, ob der Code offen ist und ich selbst eine Funktion schreiben kann, die nacheinander diese Einzelfunktionen aufrufen kann.

Zitat:Warum ist das VI so schrecklich unaufgeräumt? Wozu die unnötige Sequenzstruktur?

Wie gesagt, habe das Programm übernommen. Aber ja du hast Recht. Die Sequenz Struktur ist an sich nicht notwendig, wenn im mittleren Part nur eine while-Schleife ist.

Zitat:Das hängt vom Treiber für deine DAQ-Hardware ab!
Kannst du mehrere Kanäle mit einem Task/einem Funktionsaufruf abfragen?
Kannst du einen Start-Trigger für mehrere Hardwarekanäle verwenden?
Lies mal dein Handbuch oder frage den Adwin-Support!

Das werde ich machen. Gibt es denn wirklich keine Möglichkeit, diesen zeitlichen Versatz mit einer höheren Genauigkeit (ca. 10^-7s) zu vermessen?
Hallo Verrain,

Zitat:Also ich habe jetzt mal in den externen Bibliotheksaufruf geschaut.
Das meinte ich nicht…
Du hast da einen Treiber (aka Bibliothek/Ansammlung von VIs), mit dem du mit der Adwin-Hardware kommunizieren kannst. Zu diesem Treiber sollte es ein Manual geben und auch Beispiel-VIs. Beides kannst du studieren!

Zitat:Gibt es denn wirklich keine Möglichkeit, diesen zeitlichen Versatz mit einer höheren Genauigkeit (ca. 10^-7s) zu vermessen?
Noch einmal von vorn:
Wenn deine Hardware es erlaubt (Handbuch/Manual lesen!), dann wird die DAQ-Karte selbst mit höchstmöglicher Genauigkeit deine Daten aufnehmen. Entweder bietet deine DAQ-Karte simultane Messkanäle (Handbuch/Manual lesen!), dann hast du keinerlei zeitlichen Versatz zwischen den Messwerten. Oder deine Karte bietet nur einen ADC mit einem MUX, dann hast du einen genau definierten zeitlichen Versatz zwischen den Messkanälen - Handbuch/Manual lesen!

Es läuft alles auf Rtmfx hinaus - oder du rufst den Adwin-Support an und fragst den mal deine speziellen Fragen!
Hallo Verrain,

laut Produktübersicht Deiner Hardware gibt es für die ungeraden und geraden Analogeingänge separate A/D-Wandler.
Davor sitzt ein Multiplexer für die jeweilige Gruppe von Eingängen.
[attachment=57848]
Was die Treiber allerdings aus der Hardware rausholen sagt dir das Manual oder der Support.

Wie Gerd schon sagt:

(18.05.2017 14:23 )GerdW schrieb: [ -> ]Es läuft alles auf Rtmfx hinaus - oder du rufst den Adwin-Support an und fragst den mal deine speziellen Fragen!

Grüße
Andreas
Referenz-URLs