LabVIEWForum.de
Schrittmotor ansteuern/ablauf über LPT (X-Y Achse) - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Schrittmotor ansteuern/ablauf über LPT (X-Y Achse) (/Thread-Schrittmotor-ansteuern-ablauf-ueber-LPT-X-Y-Achse)



Schrittmotor ansteuern/ablauf über LPT (X-Y Achse) - HerrRuin - 07.10.2007 16:24

Hallo Forumuser!

Ich freue mich dieses Forum gefunden zu habe und hoffe mit Euch gemeinsam mein Problem lösen zu können.
Ich muss im Rahmen einer Hausarbeit eine Schrittmotoransteuerung realisieren.

Da ich absoluter Neuling bin und mir etwa 80% der Begriffe und Vi's nichts sagen, müsst Ihr langsam und gedehnt mit mir redenWink

Problemstellung (ganz allgemein):
Ich habe einen Versuchsstand auf dem zwei Linearachsen installiert sind. Mittels der Schrittmotoren sollen die Schlitten der Linearachen bewegt werden. Auf dem Schlitten der Y-Achse ist ein Versuchsobjekt befestigt, welches an einem Sensor vorbeigeführt werden soll. Vollautomatisch.


Vorhaussetzungen:
Es existieren schon zwei Schrittmotoren (Conrad SM 12056) die über ein Interface (Kemo M106) mittels LPT-Anschluss mit dem Rechner verbunden sind. LabVIEW 8.2.

Aufgabenstellung:
Mittels LabVIEW sollen die beiden Motoren nach einem im vorhinein festgelegten Ablaufplan angesteuert werden.
Das heisst: Erst soll der erste Motor soundsoviel Umdrehungen rechts herum machen und dann soll der zweite Motor soundsoviel Umdrehungen links herum machen usw. Also genau nach Plan.


Variablen im Programm:
Das heißt, der Ablaufplan soll recht einfach veränderbar sein. Es muss eine Möglichkeit geben das Programm zu "Nullen".
Bewegungsgeschwindigkeit muss veränderbar sein. Einstellen des Programms auf einen anderen Motor (Schritte pro Umdrehung).


Informationsmaterial:
[attachment=9037]
[attachment=9038]

Ablaufplan der Bewegung:
[attachment=9039]


Eigentlich klingt die Sache recht einfach. Dachte ich am Anfang. Deswegen habe ich zugesagt.
Nun sitze ich vor dem LabVIEW Programm und weiß noch nicht mal wie ich Anfangen soll.
Ich hab schon einiges über eine Out Port.vi gelesen. Das kingt sehr gut. Leider weiss ich nicht ob die reine LabVIEW Software reicht oder ich noch irgendwelche Zusatz Dinge einstellen oder installieren muss.

Es kann doch jetzt nicht so schwer sein ein Signal zu generieren und dieses über den LPT Port auszugeben. Dieses Signal zu zählen und somit die Position der Motors zu bestimmen.
Das ganze für zwei Motoren und im nachhinein noch weitere Optionen wie "Nullen" usw. einzubauen. Oder sehe ich die Sache zu einfach?!?

Ich hoffe, für Euch ist dies nicht zu einfach;)und Ihr könnt mir etwas helfen und damit den Anfang erleichtern.


Auf gehts!Smile
Stephan


Schrittmotor ansteuern/ablauf über LPT (X-Y Achse) - PeeGee - 08.10.2007 22:29

Moinmoin!

schau mal auf
http://forums.lavag.org/Using-Parallel-Por...V-82-t8525.html
da finden sich einige Hinweise zur Benutzung des Parallel Ports.

Ein netter Punkt an Deiner Aufgabe ist die Änderbarkeit des Ablaufplans.
Wenn das möglich sein soll, ohne das LV-Programm zu ändern ist vermutlich das einfachste,
eine Liste mit Punkten anzugeben, die angefahren werden sollen, und dann im Programm
die schritte entsprechend zu zählen.
Viel Erfolg beim Programmieren!
PeeGee

PS.: das du zugesagt hast, weil die Sache einfach klang find' ich schon ein bisserl schad' ;-)


Schrittmotor ansteuern/ablauf über LPT (X-Y Achse) - rolfk - 09.10.2007 09:06

' schrieb:Moinmoin!

schau mal auf
http://forums.lavag.org/Using-Parallel-Por...V-82-t8525.html
da finden sich einige Hinweise zur Benutzung des Parallel Ports.

Ein netter Punkt an Deiner Aufgabe ist die Änderbarkeit des Ablaufplans.
Wenn das möglich sein soll, ohne das LV-Programm zu ändern ist vermutlich das einfachste,
eine Liste mit Punkten anzugeben, die angefahren werden sollen, und dann im Programm
die schritte entsprechend zu zählen.
Viel Erfolg beim Programmieren!
PeeGee

PS.: das du zugesagt hast, weil die Sache einfach klang find' ich schon ein bisserl schad' ;-)

Im Prinzip ist es alles nicht so kompliziert. Aber und LabVIEW lernen, und Parallelport programmieren, und sinnvolles UserInterface machen, und vielleicht noch Programmieren an sich, ist so ein bisschen das ganze Spektrum das man beim Programmieren entgegen kommen kann, alles schön in einem Projekt zusammengebunden. Schon ein bisschen viel auf einmal und recht schwierig so auf Abstand zu helfen.

LabVIEW lernen muss man halt wirklich selber auch wenn ein Kurs da sicher helfen kann, aber das ist nicht billig.

Parallel Port programmieren ist ziemlich low level und einfach so mal nicht zu tun. Um dieses spezifische Ding anzusprechen denke ich schon einmal selber 1 - 2 Tage beschäftigt zu sein um einen einigermassen sinnvollen LabVIEW Treiber zu schreiben und erklären wie das ginge ist so auf Abstand nicht zu machen.
So wie die Kemo-Beschreibung aussieht sollte das Outport VI aber vollauf genügen um das anzusprechen. Dann nur noch die Registermap des Parallelports heraussuchen. Eventuell geinge selbst einfach VISA zu benützen, da der parallel Port beim PC gemäss Microsoft eben auch ein serieller ist. Ihre Begründung ist einfach, COM Prots sind halt bit seriell, und LPT Ports sind byte-seriell. Das Problem mit diesem Ansatz ist nur dass LPT Ports nicht so einfach als Eingang funktionierenWink

Und dann ein UserInterface um das Trajekt noch möglichst benützerfreundlich einführen zu können! Je nach Ausführung ganz sicher eine Herausforderung auch für gestandene LabVIEW Benützer. Das mit der Punktliste aus einem Textfile heraus ist sicher die einfachste Variante und mit noch recht wenig Aufwand zu machen.

Rolf Kalbermatter


Schrittmotor ansteuern/ablauf über LPT (X-Y Achse) - HerrRuin - 12.10.2007 16:07

Hallo!

Danke für die Antworten.

Nach einer Woche Grundlagenforschung habe ich endlich heraus gefunden wie der Schrittmotor angesteuert werden kann!!!Smile
Nun fehlt es mir an Erfahrung ein sinnvolles Programm darum zu schreiben.


Ich werde mal die Zusammenhänge deutlich machen:
Die beiden Motoren (X-Y-Richtung) können über die Out Port.vi angesprochen werden.
Wobei der Zusammenhang für Schritte nach RECHTS (Clockwise) folgender ist:

Es werden die hex Zahlen 0 1 3 2 (dann wieder 0 ) auf den Druckerport (Out Port.vi Adresse hex 378) geschrieben. Wobei immer der Wechsel auf die nächste Zahl den Motor einen Schritt weiter setzt. Eine kleine Schaltung macht das deutlich.
[attachment=9144]

Beim LINKSlauf (Counterclockwise) verhält es sich folgendermaßen. Es werden die hex Zahlen 0 2 3 1 geschrieben. Wobei immer der Wechsel auf die nächste Zahl den Motor nach links setzt.
[attachment=9143]

Wenn man nun beim Rechtslauf bei 3 stehengeblieben ist und nach links will dann muss die Zahl 1 kommen, oder wenn man bei 1 stehengeblieben ist dann muss die Zahl 0 kommen.

Beim Motor zwei (über den selben LPT Port 378) muss die Zahlenfolgen Rechts 0 4 C 8 und Links 0 8 C 4 erfolgen.

Vielleicht kann mir jemand helfen mit diesen Bedingungen ein Probeprogramm zu schreiben. Erstaunlicherweise geht es auch wenn auf der Leitung ein FC anliegt, und ich ein FD sende. Dann macht der Motor auch einen Schritt nach Rechts. Also von (0->1) wenn dann ein FF kommt (1->3) geht er wieder nach rechts. Somit müsste das Programm nach dem starten erstmal "genullt" werden.

Nun weiß ich nicht wie man sinnvoll das Auslesen des Ports (In Port.vi Adresse hex 378), vergleichen, und schreiben des nächsten Schritts realisiert.

Vielleicht gibt es da Vorschläge?!
Oder jemand erkennt eine Rechtenregel für den nächsten Schritt. Das würde die Programmierung erleichtern. (Auslesen->Rechenregel->Schreiben)


Viele Grüße
Stephan


Schrittmotor ansteuern/ablauf über LPT (X-Y Achse) - HerrRuin - 16.10.2007 16:03

Hallo!

Irgendwie kommen hier keine Antworten... Ob das Problem zu schwierig ist, zu ungewohnt oder nur zu ungenau beschrieben ist, weiß ich nicht.

Auf jeden Fall haben ich ein Programm für den Rechtslauf geschrieben.
Vielleicht könnt Ihr mal drüber gucken und Eure Meinung dazu sagen.

Aber ich habe noch ein Problem, das ich nicht richtig in den Griff bekomme.

Problem:
Wenn die Schieberegister mit einem Wert geladen werden, bricht die While-Schleife nicht ab, obwohl die Abbruchbedingung auf TRUE steht!
Wie kann ich die Schleife beenden. Oder was muss ich machen damit die Schieberegister nicht geladen werden.

Wenn es Verständnisfragen gibt, bitte genauer nachfragen.

Mit dem zweiten VI kann der LPT Port gesetzt werden. Der kritische Fall tritt auf, wenn der Port auf 3 steht und nur ein Schritt gemacht werden soll. Dann macht das Programm fünf Schritte. Es durchläuft die Schleife nochmal, obwohl der Abbruch auf TRUE steht.

VI´s (LV 8.2):
[attachment=9192]
[attachment=9193]


Viele Grüße
Stephan


Schrittmotor ansteuern/ablauf über LPT (X-Y Achse) - jg - 16.10.2007 18:19

Hallo, Stephan,

bevor ich viel Zeit in eine ausführlichere Analyse stecke, mir fallen 2 Punkte auf.

1. zu deinen Bemerkungen: ist dir klar, dass eine While-Schleife mindestens 1x ausgeführt wird und die Abbruchbedingung erst am Ende der Loop überprüft wird? Die LV-While Loop ist also in Begriffen textbasierter Programmiersprachen ein DO ... WHILE Schleife!

2. Dein "gleichzeitiges" Lesen und Schreiben in dein Abbruch-Control per lokaler Variablen ist extrem gefährlich und widerspricht dem Konzept der Datenflussprogrammierung von LV. Extremes Bsp hier:
[attachment=9198]
Du kannst an dieser Stelle nicht vorhersagen, wann in die lokale Variable geschrieben wird und wann aus der lokalen Variablen der Wert gelesen wird. Gut möglich (und so wie du dein Problem beschreibst) sogar sehr wahrscheinlich, dass das Lesen vor dem Schreiben geschieht.

So, jetzt hast du eigentlich erst einmal genug Hinweise für Verbesserungen.

MfG, Jens