28.05.2010, 10:44
Hallo Experten,
ich möchte ein Spannungssignal (-10V...+10V) mit einer bestimmten Frequenz, Amplitude und Form (Sinus, Sägezahn,...) erzeugen und ausgeben lassen. Die Frequenz soll dabei veränderlich sein und die anfänglich eingestellte Amplitude soll durch das Programm geregelt werden können (ein Beschleunigungsaufnehmer auf dem Prüfstand misst dann die tatsächlich vorhandene Schwingung).
Mein Problem besteht darin, dass die Karte (AT-MIO-16E-10) bei DAQmx nicht mehr erkannt wird (ist noch eine ISA-Karte) und somit bin ich auf die DAQ-Traditionell-VIs angewiesen.
Dabei gibt es die Möglichkeit, dass erzeugte (zB Sinus-) Signal direkt über "A0-Signalverlauf erzeugen" (*) auf die Karte auszugeben. Leider schreibt das Programm dabei 1000 Samples in den Puffer der Karte, läßt diese diesen auslesen und nach einer Sekunde beschreibt das Programm den Puffer dann erneut... das wäre eigentlich kein Problem, wenn es nicht zwischen Puffer auslesen und Puffer neu beschreiben eine Latenzzeit von wenigen Millisekunden geben würde! Dabei bleibt der Wert der Schwingung konstant und die Schwingung ist eben "abgehackt". (selbst eine Sampleanzahlerhöhung würde nichts bringen...)
Eine andere Möglichkeit besteht darin den Puffer einmal zu beschreiben und der Karte dann zu sagen, dass sie immer wieder den Puffer auslesen soll. Somit ist der Signalverlauf kontinuierlich, lässt sich aber nicht mehr regeln... ich könnte noch den Puffer wieder neu beschreiben, aber dies wäre ja erst wieder nach einer Sekunde möglich (und wahrscheinlich würde dann auch wieder die Latenz auftreten), was die Regelung bei einer Frequenz von bis zu 4 kHz sinnlos macht.
Ich habe schon über das VI "AO 1-Update schreiben" versucht, jeden Wert selbst über y=sin x zu erzeugen und dann auf die Karte zu übertragen. Dabei war die timed-loop sehr hilfreich, aber die Windowsbegrenzung von min 1ms (1000 Samples/s) ist zB für eine Frequenz von 1 kHz einfach zu wenig (entspricht 1 Wert für einen Schwinungsdurchlauf).
Die timed-loop 100.000 mal pro Sekunde durchlaufen zu lassen scheiterte eben an Windows...(
Wie geht man an so eine Sache heran? Irgendwie muss es doch möglich sein ein kontinuierliches Spannungssignal zu erzeugen und das regelbar machen zu machen!?
Vielen Dank für eure Ratschläge im Voraus.
MfG Tilo
(*) "AO-Signalverlauf erzeugen" ist ein VI, welches die 5 Unter-VIs "Config","Write","Start","Wait" und "Clear" enthält (ähnlich den DAQmx-Tasks)
ich möchte ein Spannungssignal (-10V...+10V) mit einer bestimmten Frequenz, Amplitude und Form (Sinus, Sägezahn,...) erzeugen und ausgeben lassen. Die Frequenz soll dabei veränderlich sein und die anfänglich eingestellte Amplitude soll durch das Programm geregelt werden können (ein Beschleunigungsaufnehmer auf dem Prüfstand misst dann die tatsächlich vorhandene Schwingung).
Mein Problem besteht darin, dass die Karte (AT-MIO-16E-10) bei DAQmx nicht mehr erkannt wird (ist noch eine ISA-Karte) und somit bin ich auf die DAQ-Traditionell-VIs angewiesen.
Dabei gibt es die Möglichkeit, dass erzeugte (zB Sinus-) Signal direkt über "A0-Signalverlauf erzeugen" (*) auf die Karte auszugeben. Leider schreibt das Programm dabei 1000 Samples in den Puffer der Karte, läßt diese diesen auslesen und nach einer Sekunde beschreibt das Programm den Puffer dann erneut... das wäre eigentlich kein Problem, wenn es nicht zwischen Puffer auslesen und Puffer neu beschreiben eine Latenzzeit von wenigen Millisekunden geben würde! Dabei bleibt der Wert der Schwingung konstant und die Schwingung ist eben "abgehackt". (selbst eine Sampleanzahlerhöhung würde nichts bringen...)
Eine andere Möglichkeit besteht darin den Puffer einmal zu beschreiben und der Karte dann zu sagen, dass sie immer wieder den Puffer auslesen soll. Somit ist der Signalverlauf kontinuierlich, lässt sich aber nicht mehr regeln... ich könnte noch den Puffer wieder neu beschreiben, aber dies wäre ja erst wieder nach einer Sekunde möglich (und wahrscheinlich würde dann auch wieder die Latenz auftreten), was die Regelung bei einer Frequenz von bis zu 4 kHz sinnlos macht.
Ich habe schon über das VI "AO 1-Update schreiben" versucht, jeden Wert selbst über y=sin x zu erzeugen und dann auf die Karte zu übertragen. Dabei war die timed-loop sehr hilfreich, aber die Windowsbegrenzung von min 1ms (1000 Samples/s) ist zB für eine Frequenz von 1 kHz einfach zu wenig (entspricht 1 Wert für einen Schwinungsdurchlauf).
Die timed-loop 100.000 mal pro Sekunde durchlaufen zu lassen scheiterte eben an Windows...(
Wie geht man an so eine Sache heran? Irgendwie muss es doch möglich sein ein kontinuierliches Spannungssignal zu erzeugen und das regelbar machen zu machen!?
Vielen Dank für eure Ratschläge im Voraus.
MfG Tilo
(*) "AO-Signalverlauf erzeugen" ist ein VI, welches die 5 Unter-VIs "Config","Write","Start","Wait" und "Clear" enthält (ähnlich den DAQmx-Tasks)