Algorithmus zum parallelen Ansteuern von Schrittmotoren
Hallo zusammen,
ich beschäftige mich gerade mit einem Deltaroboter, der über 3 Schrittmotoren angesteuert wird. Die Hardware ist soweit bestellt, jetzt kümmer ich mich gerade um die Software.
Hardware:
3 Schrittmotoren von Nanotec, 3 NM
3 Steuerungen mit den Eingängen Enable, Takt, Richtung
PC mit Parallelport
Software:
Visual Basic C++ 6.0
Ich bin gerade am Schreiben der Ansteuersoftware für die Schrittmotoren und stehe gerade auf dem Schlauch.
Ich habe mir bereits ein Steuerprogramm für einen Schrittmotor geschrieben. Dieser wird über die parallele Schnittstelle angesteuert und Dreh sich um eine bestimmte Schrittanzahl in eine bestimmte Richtung.
Zudem habe ich abhängig von der Start-/Stopfrequenz des Schrittmotors und einer variablen Rampe eine Beschleunigungs- und Bremsrampe implementiert. Die Generierung des Taktes erfolgt über einen Softwaretimer.
Dies funktioniert soweit alles bestens...
Mein Problem ist momentan, das ich diese Ansteuerung auf 3 Schrittmotoren erweitern will...
Dies wäre insofern bei folgenden Zuständen kein Problem:
- Die Motoren laufen nacheinander
- Die Motoren laufen synchron, d.h. die Motoren laufen parallel aber jeder Motor dreht sich um die gleiche Schrittanzahl
- Die Motoren laufen parallel mit unterschiedlichen Schrittanzahlen, aber es gibt keine Beschleunigungs- und Bremsrampen, d.h die Drehzahl der Schrittmotoren ist kleiner als die Start-/Stopfrequenz.
Ich würde aber gerne den Optimalen Fall umsetzten...alle 3 Motoren drehen sich gleichzeitig mit unterschiedlichen Schrittanzahlen in unterschiedliche Richtungen, und jeder Motor hat eine Beschleunigungs- und Abbremsrampe...im Prinzip kommt das einer CNC-Software gleich...
Ich bin nicht auf der Suche nach einem fertigen Programmcode, sondern nur auf der richtigen "Programmstruktur". Kann ich mit einem Timer drei Motoren ansteuern, oder benötige ich 3 Softwaretimer? Wie setzte ich das Programm von der Logik her um?
Hat jemand von euch Erfahrung in dem Thema? Wurde das hier schon einmal diskutiert/vorgestellt?
Wäre um Hilfe dankbar.
PS: Mir ist durchaus klar, das es so etwas (CNC-Steuerprogramme) fertig zu kaufen gibt, bzw. als Freeware verfügbar sind.
Z.B.: http://www.easgmbh.de/index.php?area...enlos_freeware
Ich möchte aber später mein eigenes Ansteuerprogramm des Roboters schreiben, und daher nicht auf fertige Software zurückgreifen, die ich nicht ändern/manipulieren kann.
Gruß
Liste der Anhänge anzeigen (Anzahl: 1)
moin moin,
anbei mal eine kurze Übersicht zu meiner Fräsensteuerung.
Als Erläuterung:
Linear/Cirlce errechnen den nächsten Schritt und geben den an FiFo weiter, ist der Platz0 nicht im Fifo frei wird gewartet.
Ausgelesen wird Platz 19, der Rest durchgeschoben, das Byt wird an die Motore gesendet. Mit dem Zeiger auf den Fifo wird aus der Sin^2-Tabelle der Zeitwert geholt und mit der Wurzel aus der Summe der angesteuerten Motore wird der InterrupTimer geladen.
Der Timerinterrupt löst dann die nächste Übertragung aus.
Ist Linie/Circle mit der Berechnung fertig wird in der FiFo-Steuerung ein Bit gesetzt und der Fifo abwärtszählen ausgegeben. Dabei wird die Sin^2 Tabelle rückwärts (zu langsameren Zeitwerten) ausgelesen und somit der Bremsvorgang eingeleitet.
Mal ganz in Ruhe durchdenken, es funktioniert jedenfalls ganz gut bei meiner Fräse.
Mit Gruß
Peter
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Peter1060,
anbei zwei Auszüge aus dem CAD von dem Delta Roboter. In der oberen Hauptplatte sind 3 Motoren im Winkel von 120 angebracht. Diese 3 Motoren befinden sich in einer gemeinsamen Ebene. An jedem der Motoren ist ein Ausleger angebracht, sowie ein Parallegestänge. Dieses läuft unten beim Endeffektor zusammen. Über eine rotatorische Bewegung kann der Endeffektor in Richtung der Motorachse verschoben werden. Die Verbindungen von Endeffektor und Ausleger sind Kugelgelenke, also kann sich bei den beiden stillstehenden Achsen das Gestänge passiv bewegen. Der Endeffektor macht somit eine Kreisbahn abhängig vom Radius des Gestänges.
Der Effekt des Parallegestänges ist, das egal wie die 3 rotatorischen Achsen zueinander stehen, der Endeffektor sich immer parallel zur Oberfläche befindet. Somit ist eine Bewegung in x, y, und z Richtung möglich.
Wenn ich nun den Endeffektor z.B. in die x-Richtung bewege, dann müssen alle 3 Achsen verfahren werden.
Was man nun einfach benötigt ist eine Rückwärtstransformation von x,y und z auf die 3 Achswinkel. Dies ist soweit kein Problem, diese Aufgabe habe ich schon bewältigt.
Vorteile von solchen Robotern sind wegen der parallelen Kinematik die Genauigkeit, und vor allen wegen den geringen bewegen Massen die Dynamik. Gerade im Industriesektor werden diese Delta-Roboter (Flexpicker) für höchste Zykluszeiten von Pick-und Place-Aufgaben eingesetzt. Da sind 4 Zyklen pro Sekunde bei einem verfahrweg von 500 mm keine Seltenheit.
Nachteile sind auf Grund des Aufbaus der eingeschränkte Arbeitsraum und die geringen Traglasten. Somit können natürlich auch externe Prozesskräfte z.B. beim Fräsen schlecht aufgenommen werden.
Ich habe mit einem Versuchsroboter angefangen, und sowohl die Rückwärtstransformation, als auch Linearbewegungen, Kreisfahren, PTP-Bewegungen softwartechnisch umgesetzt. D.h. ich habe bereits eine selbstgeschriebene funktionierende Software für die Ansteuerung solch eines Roboters.
Jetzt kommt das Aber:
Der Versuchsroboter war mit Modellbauservos aufgebaut. Neben der geringen Genauigkeit, der fehlenden Rückmeldung des aktuellen Winkels war hier vor allen eines Vorteilhaft, der Positionsregler. Hier habe ich mich nicht um Beschleunigungen, Schrittverluste, ect. kümmer müssen, sondern nur die Sollwinkelposition der Achse berechnet und dem Lageregler übergeben. Somit war eingentlich nur die Zeit undefiniert, wann der Endeffektor sein Ziel erreicht hat. Testweise wurde hier einfach mit Wartezeiten gearbeitet.
Somit war auch eine Kreisbahn kein Problem, denn die Bahn wurde einfach ein viele kleine Stücke zerlegt, über die Rückwärtstransformation der Sollwinkel der Achsen berechnet, und der Lageregler laufend mit einem neuen Sollwert aktualisiert, bis die Winkeländerung so groß war, das die Auflösung des Potis ausreichend war, automatisch eine Regelung der Differenz durchzuführen.