LabVIEWForum.de - Generieren von Impulsfolgen / Instantanes Aktualisieren

LabVIEWForum.de

Normale Version: Generieren von Impulsfolgen / Instantanes Aktualisieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen.

Bei folgender Thematik komme ich gerade nicht weiter und hoffe auf eure Hilfe:
Für die Geschwindigkeitssteuerung eines Schrittmotors werden Impulsfolgen erzeugt (50% high / 50%low). Jede steigende Flanke führt zu einem Schritt am Schrittmotor. Über die stehts aktualisierte Frequenz stellt sich so am Motor eine Geschwindigkeit ein. Soweit so gut.

In meinem derzeitigen VI verhält es sich nun aber leider so, dass sobald die Geschwindigkeit sehr weit reduziert wird (z.B. ein Impuls alle 60sek) und dann mit einer neuen (schnelleren) Geschwindigkeit gefahren werden soll es ewig dauert (nämlich ca. 2 Impulse etwa) bis die neue vorgegebene (Frequenz) tatsächlich ausgegeben wird.

Da die Geschwindigkeitsvorgabe an anderer Stelle Teil einer Kraftregelung ist, gilt es dieses Verhalten unbedingt zu eliminieren. Neue Geschwindigkeiten müssen demnach direkt umgesetzt werden.

Ein Screenshot des VIs befindet sich im Anhang.

Für Lösungen oder auch nur Ideen im Voraus vielen Dank!!

Philipp
Hat da wirklich keiner eine Idee für mich?

Güße,
Philipp
Hallo Philipp,

(28.08.2019 16:42 )Philipp841 schrieb: [ -> ]In meinem derzeitigen VI verhält es sich nun aber leider so, dass sobald die Geschwindigkeit sehr weit reduziert wird (z.B. ein Impuls alle 60sek) und dann mit einer neuen (schnelleren) Geschwindigkeit gefahren werden soll es ewig dauert (nämlich ca. 2 Impulse etwa) bis die neue vorgegebene (Frequenz) tatsächlich ausgegeben wird.

Dauert es "2 Impulse" der der vorherigen Geschwindigkeit (hier im Beispiel dann 2 Minuten) oder zwei Impulse der neu eingestellten Frequenz? Was meinst du mit der ausgegebenen Frequenz? Die Anzeige am Frontpanel oder die Schritte des Motors?

Gruß
Jens
Hallo Jens,

danke für deine Antwort. Ich spreche davon, dass nach dem Vorgeben einer neuen Frequenz die ursprüngliche Frequenz über zwei volle Perioden beibehalten wird. Sprich es im o.g. Beispiel tatsächlich zwei Minuten dauert bis die neue (höhere) Frequenz am Output ausgegeben wird.


Mein Wunsch ist, dass bei Vorgabe einer neuen Frequenz, die sich erheblich von der vorherigen unterscheidet (z.B. doppelt so hoch ist), die aktuelle Ausgabe abgebrochen und mit der neuen Frequenz neu gestartet wird.


Momentan ist es so, dass bei der Vorgabe von sehr langsamen Geschwindigkeiten (niedrigen Frequenzen) neue Vorgaben ewig nicht berücksichtigt werden. Innerhalb einer Regelschleife (insbesondere mit I-Anteil) kommt es dann natürlich zu enormen Überschwingen etc.
Danke Dir schon mal vorab!
Philipp
Hallo Philipp,

Zitat:Mein Wunsch ist, dass bei Vorgabe einer neuen Frequenz, die sich erheblich von der vorherigen unterscheidet (z.B. doppelt so hoch ist), die aktuelle Ausgabe abgebrochen und mit der neuen Frequenz neu gestartet wird.
Code:
IF aktuelle Frequenz < x AND neue Frequenz > y THEN
  stop DAQmx-Task
  set new frequency
  start DAQmx-Task
ENDIF
In etwa so?
Hallo,

würde es auch so ähnlich machen wie von Gerd vorgeschlagen. Nur die if-Abfrage würde ich ändern. Wenn man deine Anforderung eins zu eins übersetzt, sollte es so sein:

Code:
IF 2*aktuelle Frequenz < neue Frequenz THEN
  stop DAQmx-Task
  set new frequency
  start DAQmx-Task
ENDIF

Gruß
Jens
Danke. Und wie bekomm ich das jetzt ins VI?

// Hab es jetzt erstmal so umgesetzt. Siehe Bild.

Funktioniert auch, habe aber noch zwei /drei Fragen dazu:

1) Wie würde eine Alternativlösung aussehenbzw. lässt sich das noch irgendwie vereinfachen? Bin damit irgendwie nicht so richtig glücklich.
2) Wie GENAU wirkt sich ein Delay innerhalb der While-schleife auf die ausgegebene Frequenz der Impulsfolge aus. Macht ein Delay Sinn?

Danke Euch.
Hallo Philipp,

Zitat:1) Wie würde eine Alternativlösung aussehenbzw. lässt sich das noch irgendwie vereinfachen? Bin damit irgendwie nicht so richtig glücklich.
Was stört dich denn?
Hinweis/Idee: statt den Task zu löschen und neu zu erstellen reicht es evtl. auch aus, ihn zu stoppen und mit neuen Parametern wieder zu starten. (Wie oben beschrieben.)

Zitat:2) Wie GENAU wirkt sich ein Delay innerhalb der While-schleife auf die ausgegebene Frequenz der Impulsfolge aus. Macht ein Delay Sinn?
Ob ein Delay sinnvoll ist, musst du selbst entscheiden…
Ein Delay bewirkt, dass die Iterationszeit der Schleife auf einen Minimalwert (eben den Delay) begrenzt wird.
(Eine Auswirkung auf die Frequenz sollte nicht bestehen, da diese ja über den DAQmx-Task definiert wird.)
Zitat:Hinweis/Idee: statt den Task zu löschen und neu zu erstellen reicht es evtl. auch aus, ihn zu stoppen und mit neuen Parametern wieder zu starten. (Wie oben beschrieben.)

Ich habe probiert nur den "DAQmx - Schreiben" neu zu beschreiben (natürlich mit Task-Stoppen und Task-Starten davor). Das hat aber leider nicht funktioniert. Die "alte" Frequenz wurde beibehalten. Aber es geht ja so..

Zitat:2) Wie GENAU wirkt sich ein Delay innerhalb der While-schleife auf die ausgegebene Frequenz der Impulsfolge aus. Macht ein Delay Sinn?
Ob ein Delay sinnvoll ist, musst du selbst entscheiden…
Ein Delay bewirkt, dass die Iterationszeit der Schleife auf einen Minimalwert (eben den Delay) begrenzt wird.
(Eine Auswirkung auf die Frequenz sollte nicht bestehen, da diese ja über den DAQmx-Task definiert wird.)

Hm.. wie verhält sich denn mit der Frequenz die ich am Anfang im Block "DAQmx - Virtuellen Kanal erzeugen" angebe (im Beispiel wurde 1000 gewählt). Wird dieser Wert in der While Schleife von "DAQmx-Schreiben" überschrieben? Wenn ja, kann ich diesen Wert dann weglassen?

Und zu guter letzt eine letzte Frage:
Wodurch wird die Frequenz in diesem VI nach unten hin begrenzt? Was ist die kleinste Frequenz?

Nochmal danke!!
Phil
Hallo Philipp,

Zitat:Wird dieser Wert in der While Schleife von "DAQmx-Schreiben" überschrieben?
Ja, mit dem DAQmxWrite legst du eine neue Frequenz fest.

Zitat:Wenn ja, kann ich diesen Wert dann weglassen?
Warum willst du den weglassen? Du willst doch eine neue Frequenz festlegen!?
Die Frage wäre eher: warum legst du den Task überhaupt mit f=1000 an, wenn du hinterher sowieso eine andere Frequenz vorgibst? Warum nicht gleich mit der gewünschten Frequenz anlegen?

Zitat:Wodurch wird die Frequenz in diesem VI nach unten hin begrenzt? Was ist die kleinste Frequenz?
Da musst du wohl das Manual deines DAQ-Devices durchlesen…
(Irgendwas mit Grundfrequenz des internen Taktgebers und der verfügbaren Teilerstufen, um diesen Takt zu verringern…)
Seiten: 1 2
Referenz-URLs