LabVIEWForum.de - Beim Sinus jeden Maximalwert pro Periode erfassen

LabVIEWForum.de

Normale Version: Beim Sinus jeden Maximalwert pro Periode erfassen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi,
ich will ein Sinussignal erzeugen, es über die DAQ-Karte ausgeben, und es dann über einen anderen Kanal wieder einlesen und auswerten. Bei einlessen, soll der Maximalwerte aus jeder Periode in eine Textdatei gespeichert werden.
Ich hab hier mal etwas gemacht, wo einmal nur das Signal gemessen wird ohne DAQ-Karte, und bei der anderen Version wird die DAQ- Karte auch mit eingebunden.
Ich hab das Beispiel mal so gemacht, dass es nur 1 Sekunde läuft, und deshalb bei 50 Hz am Ende 50 Werte in der Datei stehen. Also das nur der Maximalwert ausgegeben wird geht schon mal, aber die Anzahl der Werte schwankt, und irgendwie ist es komisch, dass bei 50 HZ und 1 sek laufzeit dann über 600 Werte kommen.
Vielleicht sieht ja einer von euch , wo da mein Fehler ist.
Meine Version ist 8.5
[attachment=22110]
[attachment=22111]
Viele kleine Fehlerchen addieren sich in deinem Bsp.

1. Erzeugen tust du ein Signal mit einer Samplingrate von 5kS/s, Lesen aber nur mit 1kS/s. Wobei das durch die aktivierte Option "Allow Regeneration" beim "Regeneration Mode" für AO egal sein dürfte.

2. Durch die parallelen Schleifen und auch die parallelen und unabhängigen AO und AI-Prozesse wird das Ganze nie so genau sein, wie du dir das wahrscheinlich denkst.

3. Der Hauptfehler liegt aber in der Verwendung des VI "Wait Until Next ms Multiple". Schau dir halt einfach mal an, wie oft deine obere Schleife durchläuft:
[attachment=22156]
Das ist relativ willkürlich, ist aber einfach erklärbar, wenn du dir die Hilfe zum VI "Wait until next ..." durchliest. Das wartet solange, bis der interne Zeitzähler des Computers das nächste Mal ein Vielfaches der angeschlossenen Wartezeit ist. Das kann beim ersten Aufruf 100 ms dauern, oder aber 555 ms, bis maximal 1000 ms. Wenn du in der unteren Schleife wirklich 1 s warten willst, dann verwende die Funtion Wait (ms),

Gruß, Jens
Referenz-URLs