LabVIEWForum.de - Abtastrate, Sampleanzahl - was mach ich falsch?

LabVIEWForum.de

Normale Version: Abtastrate, Sampleanzahl - was mach ich falsch?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo LabVIEW-Spezialisten,

noch immer hänge ich an meinem Programm zu dem ich schon ein paar Fragen gestellt habe.

Also ich bekomme von einem Sensor mit nachgeschalteter Verstärkerschaltung Spannungswerte.
Laut Hersteller geht das ganze mit maximal 15 KHz. Zusätzlich bekomme ich von einer anderen Quelle
ein Signal (HIGH / LOW) das ich zum Steuern der Spannungsmessung nutzen möchte.
Dabei ist das Signal 3 ms auf HIGH und dann 11 ms auf LOW, dann wieder 3 ms HIGH usw.

Wenn ich nun 3 ms lang die Spannungswerte mit 15 KHz aufnehme, müsste ich doch 45 Werte erhalten, oder?
Um die Einzelmessungen besser trennen zu können, lege ich diese (obwohl mir davon abgeraten wurde) in ein 3D-Array.
Komisch ist aber nun, dass ich mehr Werte erhalte als ich eigentlich haben will.

Z.B.: Ich lasse das HIGH-Signal einmal (3 ms) erscheinen, aber es werden drei Messungen durchgeführt
(bzw. 3 Ebenen im 3D-Array angelegt die mit je 46 Werten pro Kanal gefüllt sind)

Ich vermute ja, das ich die Einstellung von Sampelzahl und Abtastrate irgendwie falsch habe.
Aber ich wüsste nicht wie ich das anders machen könnte.

Könntet ihr mir bitte helfen und mir meine Fehler einfach und verständlich erklären,
leider bin ich noch nicht so ein LabVIEW-Spezialist (aber ich bemühe mich).

[attachment=18951]Lv85_img
[attachment=18950]

Gruß Marco
Hi,

ich sehe hier in deinem Vi nirgends eine Funktion, die deine Messung nur einmal durchführen lässt. Du hast diese ja in einer While-Schleife, die du manuell beendest. Diese While Schleife nimmt nun dauernd je einen Boolschen Wert auf (das was gerade anliegt -high/low) und dazu jeweils 46 Messpunkte. Das wiederholt dein Programm solange, bis du Stop drückst.
Wieviele Messungen das dann genau sind hängt davon ab, wann du drückst.

Im Übrigen triggerst du nicht auf dein High/Low Signal. Ich weiß ja nicht, ob das einen Unterschied macht in deinem Fall, aber wann genau dein Vi das Signal ausliest ist sozusagen zufällig. Das kann auch gerade ganz am Ende einer High Phase sein. Es ist damit also auch nicht garantiert, dass die 46 Samples alle genau innerhalb einer Phase des Steuersignals liegen.

Grüße

edit:

Ok hier noch 1-2 Vorschläge, die dir eventuell helfen die Probleme zu beseitigen:

- Bezüglich der Anzahl der Messungen könntest du die While Schleife durch eine For Schleife ersetzen und damit genau steuern, wie oft er messen soll.
- Das Triggern wird wohl eher etwas trickier werden. Ich muss gestehen, dass ich mir am Synchronisieren von 2 DAQmx Tasks auch schon die Zähne ausgebissen habe. Was aber recht einfach gehen sollte ist den Analog Task über das digitale Signal zu triggern. Nutze dazu die DAQmx Funktion Trigger. Schau mal im Example Finder nach Beispielen hierzu.
' schrieb:- Bezüglich der Anzahl der Messungen könntest du die While Schleife durch eine For Schleife ersetzen und damit genau steuern, wie oft er messen soll.

Aber wenn ich die While Schleife durch For ersetze, läuft die dann nicht sofort los wenn ich das Programm starte
und wartet nicht auf das Triggersignal?


' schrieb:- Das Triggern wird wohl eher etwas trickier werden. Ich muss gestehen, dass ich mir am Synchronisieren von 2 DAQmx Tasks auch schon die Zähne ausgebissen habe. Was aber recht einfach gehen sollte ist den Analog Task über das digitale Signal zu triggern. Nutze dazu die DAQmx Funktion Trigger. Schau mal im Example Finder nach Beispielen hierzu.

Wenn ich über die Triggerfunktion gehe, nutze ich doch dann aber nur eine Flanke des digitalen Signals, oder?
Wodurch dann wiederum mein Zeitfenster von 3 ms unkontrolliert bleiben würde.
Das Problem ist, dass dieses Signal von einem Scanner kommt dessen Positionierzeit und Einschwingverhalten beobachtet werden soll.
Der Sensor nimmt einen Laserspot auf der von dem Scanner ausgelenkt wird.
Wenn ich jetzt nur Flankengetriggert die 45 Werte aufnehme, weis ich denn dann ob die Werte die 3 ms voll ausfüllen?

Gruß Marco
' schrieb:Aber wenn ich die While Schleife durch For ersetze, läuft die dann nicht sofort los wenn ich das Programm starte
und wartet nicht auf das Triggersignal?

Ja das ist richtig. Allerdings startet er die Messung ja jetzt auch sofort. Er beendet sie auf Knopfdruck - starten tut auch die While Schleife gleich am Anfang. Schau dir hierzu im Forum mal Beiträge über State Maschinen (state machine) an. Damit könntest du Anfang und Ende der Messung elegant steuern.

' schrieb:Wenn ich über die Triggerfunktion gehe, nutze ich doch dann aber nur eine Flanke des digitalen Signals, oder?
Wodurch dann wiederum mein Zeitfenster von 3 ms unkontrolliert bleiben würde.
Das Problem ist, dass dieses Signal von einem Scanner kommt dessen Positionierzeit und Einschwingverhalten beobachtet werden soll.
Der Sensor nimmt einen Laserspot auf der von dem Scanner ausgelenkt wird.
Wenn ich jetzt nur Flankengetriggert die 45 Werte aufnehme, weis ich denn dann ob die Werte die 3 ms voll ausfüllen?

Gruß Marco

Auch das ist richtig - Triggern tut er auf die Flanke. Nur jetzt triggert er ja gar nicht, was noch schlechter sein dürfte. Die 3ms erreichst du dennoch durch die 46 Samples bei 15kHz SR. Damit garantierst du eine Messdauer von 3ms.
Dennoch ist das eigentlich unschön, da er so nach 3ms stoppt und nicht am Ende der Highphase. Eine Messung, die auf steigende Flanke startet und auf fallende Flanke stoppt dürfte aber nicht möglich sein mit dem DAQmx zu entwerfen. Ich hab das einmal versucht, bin daran aber gescheitert. Kann jedoch sein, dass nur meine Karte das nicht kann. Eventuell hast du eine, die das schafft. (Eine FPGA Karte kann das z.B.)

Grüße
Also ich hab das mal mit der Triggerfunktion probiert, die Messung startet auch bei der steigenden Flanke.
Aber das mit der For Schleife versteh ich noch nicht ganz, dort muss ich doch angeben wie häufig die durchlaufen werden soll.
Und außerdem woher bekomme ich dann meine 11ms Pause, denn irgendwie regiert das Programm nur auf die erste Flanke
und danach wird die Schleife so of wie vorgegeben durchlaufen, aber ohne Pause.
Desalb dachte ich mir, ich lass die Schleife nur eimal durchlaufen und danach soll das Programm warten bis zur nächsten Triggerflanke.
Aber irgendwie funktioniert das nicht so wie ich mir das gewünscht hatte.Sad
Kann mir mal bitte jemand helfen, irgendwie versteh ich das nicht?

[attachment=18966]Lv85_img
[attachment=18967]


Gruß Marco
Da kann ich dir doch helfenSmile

Du definierst den Trigger für deinen Task (vor der Schleife)
Dann startest du deinen Task (vor der Schleife)

Das bedeutet dann, dass er misst sobald der Triggerpunkt kommt. Allerdings bleibst du dann im selben Task, der schon gestartet ist. Daher wartet er nicht erneut auf den Trigger.
Du musst in deinem Fall also die Start Funktion (und eine Stopp Funktion) in die Schleife legen. Dazwischen die Lesen Funktion. Dadurch sollte er jedesmal auf einen Triggerpunkt warten.

Die Sequenz innerhalb der Schleife ist übrigens überflüssig. Der Datenfluss wird ja schon durch die Verdrahtung vorgegeben. Willst du zwischen den Messungen eine Pause haben könntest du diesen zweiten Rahmen der Sequenz allerdings nutzen um eine Wait Funktion einzubauen.

Grüße
Ich glaub das hab ich verstanden, aber die Pause wird ja durch den Abstand der Trigger zueinander und die Sampelanzahl vorgegeben, oder?
' schrieb:Das bedeutet dann, dass er misst sobald der Triggerpunkt kommt. Allerdings bleibst du dann im selben Task, der schon gestartet ist. Daher wartet er nicht erneut auf den Trigger.
Du musst in deinem Fall also die Start Funktion (und eine Stopp Funktion) in die Schleife legen. Dazwischen die Lesen Funktion. Dadurch sollte er jedesmal auf einen Triggerpunkt warten.

Also ich hab das mal so umgesetzt, aber irgendwie bricht das Programm immer nach der ersten Messung ab
obwohl ich 200 Messungen machen wollte.
Was mach ich denn nun schon wieder falsch?

[attachment=18975]
[attachment=18976]

Gruß Marco
Deine Messaufgabe gibt es doch quasi fix und fertig als Bsp im NI-Examplefinder - Immer wenn ein externes HW-Ereignis eintritt, willst du eine Anzahl Werte aufnehmen. Das macht genau dieses VI. Und deine Hardware kann dieses VI auch ausführen. Was willst du noch mehr.

Gruß, Jens

[attachment=18978]

EDIT: Vergessenes Bild hochgeladen.
Referenz-URLs