06.05.2010, 21:44
Hallo liebes LabVIEWforum,
als LabVIEW Anfänger beschäftige ich mich nun schon seit einigen Wochen damit, 4 Schrittmotore gleichzeitig mittels eines LabVIEW-Vis anzusteuern. Jeder Motor hängt an einer Schrittmotorendstufe (SMC11 von Nanotec), die wiederum einzeln die Signale für Takt, Richtung, An-Aus etc. empfängt.
Diese Signale sollen mit einer NI USB-6229 und LabVIEW 2009 erzeugt werden. Am geeignetsten wären dabei die digitalen Signale (TTL), da hier die ausgegebenen Spannungen mit den zu empfangen Schaltsignalen der Schrittmotorendstufen übereinstimmen.
Die einfachen Schalter für Richtung, An-Aus habe ich recht schnell realisiert bekommen, das läuft soweit. Beim Taktsignal für die Motoren beiße ich mir aber die Zähne aus. Es muss ein einfaches Rechtecksignal sein, der kleine Wert 0V, der große 5V.
Laut meinen Recherchen im Internet und auch hier im Forum ist eine Softwareschleife zur Taktgenerierung in LabVIEW nur bis 1000Hz geeignet und auch recht ungenau bzw. rechnerabhängig. Eine solche Schleife für die 4 Motoren habe ich als Notlösung in Form einer timed-loop.
Besser wäre jedoch eine countergestütze Taktgenerierung. Das versuche ich nun schon seit einiger Zeit hinzubekommen, bin bisher aber gescheitert. Die Anforderungen sind wie folgt:
- Die Anzahl der Takte soll für jeden der vier Motore einzeln bestimmbar sein
- Ausgabe der Takte an 4 verschiedene Digitalausgänge auf der Karte (müssen aber nicht zwingend die digitalen sein, wem was mit den 4 vorhandenen Analogausgängen einfällt, immer her damit)
- Die Frequenz/Geschwindigkeit der Takte kann für alle 4 gleich sein
Für einen einzelnen Motor habe ich das (Ausgang festlegen, Pulszahl und Frequenz festlegen) anhand der Beispiele hier im Forum bzw. im Examplefinder durchaus geschafft, siehe Anhang. Mein Problem ist den Code auf 4 Motore / 4 Ausgänge zu erweitern:
- Kopiere ich den Programmablauf mehrmals in dasselbe VI (ausgehend von einem Counter) sind die Resourcen belegt (DAQmx Start Task wird mehrmals parallel ausgeführt)
- Lasse ich über die DAQmx Channel Property Node auf mehrere Ausgangsterminals schreiben, wird dort jeweils dieselbe Anzahl von Pulsen ausgegeben. Die Anzahl der Pulse kann ich nur für alle 4 gleichzeitig ändern.
- Einfügen einer DAQmx Timing Node hinter der Channel Property Node führte leider auch nicht zum Erfolg, da hier anscheinend nur der gesamte Channel beeinflusst wird und nicht die vorher definierten Ausgangsterminals einzeln.
Gibt es irgendwie eine Möglichkeit mit der USB-6229 die 4 Digitalausgänge einzeln coutergestützt mit Pulsen zu versorgen und die jeweilige Pulsanzahl der vier Kanäle getrennt voneinander festzulegen?
Kann man eventuell die DAQmx Channel Property Node irgendwie mit der DAQmx Timing Node verknüpfen und die Pulszahl für jeden Ausgangsterminal einzeln festlegen? Vielleicht fällt einem von euch ja etwas dazu ein.
Ich würde mich riesig freuen wenn´s da ´ne Lösung gäbe, auf die ich bisher nicht gestoßen bin. Danke im voraus für Eure Antworten.
Mit freundliche Grüßen
Cony
als LabVIEW Anfänger beschäftige ich mich nun schon seit einigen Wochen damit, 4 Schrittmotore gleichzeitig mittels eines LabVIEW-Vis anzusteuern. Jeder Motor hängt an einer Schrittmotorendstufe (SMC11 von Nanotec), die wiederum einzeln die Signale für Takt, Richtung, An-Aus etc. empfängt.
Diese Signale sollen mit einer NI USB-6229 und LabVIEW 2009 erzeugt werden. Am geeignetsten wären dabei die digitalen Signale (TTL), da hier die ausgegebenen Spannungen mit den zu empfangen Schaltsignalen der Schrittmotorendstufen übereinstimmen.
Die einfachen Schalter für Richtung, An-Aus habe ich recht schnell realisiert bekommen, das läuft soweit. Beim Taktsignal für die Motoren beiße ich mir aber die Zähne aus. Es muss ein einfaches Rechtecksignal sein, der kleine Wert 0V, der große 5V.
Laut meinen Recherchen im Internet und auch hier im Forum ist eine Softwareschleife zur Taktgenerierung in LabVIEW nur bis 1000Hz geeignet und auch recht ungenau bzw. rechnerabhängig. Eine solche Schleife für die 4 Motoren habe ich als Notlösung in Form einer timed-loop.
Besser wäre jedoch eine countergestütze Taktgenerierung. Das versuche ich nun schon seit einiger Zeit hinzubekommen, bin bisher aber gescheitert. Die Anforderungen sind wie folgt:
- Die Anzahl der Takte soll für jeden der vier Motore einzeln bestimmbar sein
- Ausgabe der Takte an 4 verschiedene Digitalausgänge auf der Karte (müssen aber nicht zwingend die digitalen sein, wem was mit den 4 vorhandenen Analogausgängen einfällt, immer her damit)
- Die Frequenz/Geschwindigkeit der Takte kann für alle 4 gleich sein
Für einen einzelnen Motor habe ich das (Ausgang festlegen, Pulszahl und Frequenz festlegen) anhand der Beispiele hier im Forum bzw. im Examplefinder durchaus geschafft, siehe Anhang. Mein Problem ist den Code auf 4 Motore / 4 Ausgänge zu erweitern:
- Kopiere ich den Programmablauf mehrmals in dasselbe VI (ausgehend von einem Counter) sind die Resourcen belegt (DAQmx Start Task wird mehrmals parallel ausgeführt)
- Lasse ich über die DAQmx Channel Property Node auf mehrere Ausgangsterminals schreiben, wird dort jeweils dieselbe Anzahl von Pulsen ausgegeben. Die Anzahl der Pulse kann ich nur für alle 4 gleichzeitig ändern.
- Einfügen einer DAQmx Timing Node hinter der Channel Property Node führte leider auch nicht zum Erfolg, da hier anscheinend nur der gesamte Channel beeinflusst wird und nicht die vorher definierten Ausgangsterminals einzeln.
Gibt es irgendwie eine Möglichkeit mit der USB-6229 die 4 Digitalausgänge einzeln coutergestützt mit Pulsen zu versorgen und die jeweilige Pulsanzahl der vier Kanäle getrennt voneinander festzulegen?
Kann man eventuell die DAQmx Channel Property Node irgendwie mit der DAQmx Timing Node verknüpfen und die Pulszahl für jeden Ausgangsterminal einzeln festlegen? Vielleicht fällt einem von euch ja etwas dazu ein.
Ich würde mich riesig freuen wenn´s da ´ne Lösung gäbe, auf die ich bisher nicht gestoßen bin. Danke im voraus für Eure Antworten.
Mit freundliche Grüßen
Cony