- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Algorithmus zum parallelen Ansteuern von Schrittmotoren

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    05.02.2010
    Ort
    Augsburg
    Beiträge
    69
    Anzeige

    Praxistest und DIY Projekte
    Hallo Redbaron,

    ich hab in zwischen noch einmal über die Sache nachgedacht...

    Ursprünglich bin ich bei der Ansteuerung von den 3 Achsen von den Motoren selbst ausgegangen. D.h ich habe mich auf die Motoren konzentriert und versucht die maximalen Geschwindigkeiten und Beschleunigungen zu begrenzen.

    Mittlerweile sehe ich die Sache vom Endeffektor aus. Wenn ich mir z.B. eine Gerade nehme, dann schaue ich nicht auf die Motoren selbst, sondern direkt auf die Bahn. -> Beschleunigungsrampe vom Startpunkt aus und Bremsrampt am Zielpunkt. Limit ist hier dann der Motor mit den meisten Schritten. Der wird maximal beschleunigt und auch rechtzeitig abgebremst. Die anderen Motor laufen logischerweise entweder langsamer oder genauso schnell, daher kann hier kein Schrittverlust vorkommen.

    Das läuft dann auf deinen ersten Ansatz hinaus, das die Timerwerte sich ändern (Beschleunigung), aber nicht bezogen auf die Schrittanzahl sondern der Bahn des Endeffektors.

    Nur wie siehts das bei PTP Bewegungen (jede Achse fährt mit maximaler Geschwindigkeit) oder mit einer Kreisbahn aus, wo auch Richtungswechsel vorkommen?

    Gruß

  2. #12
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    08.04.2009
    Ort
    an der Ostsee
    Beiträge
    334
    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
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken SWD.png  
    Geändert von Peter1060 (15.03.2011 um 13:45 Uhr)

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    05.02.2010
    Ort
    Augsburg
    Beiträge
    69
    Hallo Peter,

    vielen Dank für deine Darstellung des Problems, aber ich stehe immer noch auf dem Schlauch...

    Ich fasse mal das zusammen, was ich deiner Grafik bzw. deinem Post an Infos entnehmen konnte:

    - Du hast zwei verschiedene Funktionen (Linear, Circle). Diese führen dir eine Bahninterpolation durch. D.h. du unterteilst die gesamte Wegstrecke in einzelne Stückchen, die Aufteilung ist so klein das maximal ein Schritt ausgeführt wird, oder auch keiner. Den enstehenden Fehler auf Grund der Schrittweite kannst du z.B durch den Bresenhamalgorithmus halbieren. Ergebnis dieser Funktion ist entweder Tabelle mit vordefinierten Fahrbefehlen oder eine Online-Berechnung. In deinem Fall füllst du die Verfahrtabelle (FiFo) online mit den berechneten Werten. Der Output dieser Funktionen ist für jeden ich nenne es mal Verfahrschritt ein Taktsignal für alle 3 Motoren und die jeweilige Richtungsinformation (z.B. 1, 0, 0, 1, 1, 1) (Motor 1 einen Schritt weiter, Motor 2 steht, Motor 3 steht, Motor 1 Richtung vor, Motor 2 Richtung vor, Motor 3 Richtung Vor).
    - Aus deiner Verfahrtabelle (FiFo) liest du immer die letzte Position aus, schiebst alle anderen durch und füllst diese mit deinen online Brechnenden Werte auf
    - In der Tabelle sind berechnete Sin2-Werte für die Beschleunigung sowie den Bremsvorgang interlegt. Diese verwendest du programmgesteuert. Am Anfang vermutlich parallel zu den Fifo-Nummer von 1-19 zum Beschleunigen, dann konstant mit der Position 19 und wenn kein neuer Wert mehr online aufgefüllt wird (Flag wird von Lin/Circ gesetzt) rückwärts von 19-1 zum Abbremsen.

    Was mir noch nicht klar ist, was es mit der Wurzel über die Summe der angesteuerten Motore auf sich hat. Könntest du das bitte noch etwas näher ausführen.

    Ansonsten hab ich das Prinzip sowei verstanden, kann mir auch gut vorstellen das das mit einer Linearbewegung funktioniert, aber bei Circ habe ich so meine Zweifel...Grund dafür sind die Richtungsänderungen der Achsen.
    Bei einer Linearfahrt laufen alle Achsen in eine bestimmte Richtung, ich beschleunige am Startpunt und Bremse am Zielpunkt ab. Je nach Bahn könnte ein oder zwei Achsen nicht mit maximaler Geschwindigkeit laufen.
    Wenn ich dieses Prinzip auf eine Kreisbahn übertrage, beschleunige ich auch am Anfang und bremse am Schluss ab. Aber hier habe ich zwischendurch Richtungswechsel der Achsen. Vor diesen Richtungswechsel müssen die Achsen abgebremst werden, um einen Schrittverlust zu vermeiden. Passiert dieses dann automatisch auf Grund der geringen Streckenänderungen?
    Ich meine kann es sein das die Motoren durch eine Reihe von Nullimpulsen (alternative Motoren machen einen Schritt, der Motor mit Richtungswechsel macht keinen) wegen der geringen Streckenänderung automatisch abgebremst werden?

    Gruß

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    Zitat Zitat von Joe23 Beitrag anzeigen
    Wenn ich dieses Prinzip auf eine Kreisbahn übertrage, beschleunige ich auch am Anfang und bremse am Schluss ab. Aber hier habe ich zwischendurch Richtungswechsel der Achsen. Vor diesen Richtungswechsel müssen die Achsen abgebremst werden, um einen Schrittverlust zu vermeiden. Passiert dieses dann automatisch auf Grund der geringen Streckenänderungen?
    Bei einem Kreis fahren beide Motoren je einen Sinus, und solange dessen Frequenz nicht zu hoch ist sehe ich da keine Notwendigkeit für zusätzliche Maßnahmen (denn zum Zeitpunkt der Richtungsänderung ist die Geschwindigkeit eh 0).
    So viele Treppen und so wenig Zeit!

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    05.02.2010
    Ort
    Augsburg
    Beiträge
    69
    Hi Felix,

    Heist das du änderst die Timerintervalle nach deiner Startbeschleunigung des Kreises nicht mehr, sondern lässt diese bis zum Abbremsen konstant?
    Die Ansteuerfrequenz deiner Motoren liegt dabei über der Start- Stop-Frequenz? (D.h ohne eine Bremsrampe kommt es bei einem sofortigen Stillstand oder Richtungswechsel zu Schrittverlusten)

    Noch mal kurz als Hintergrund: Ich habe hier einen Delta-Roboter mit 3 rotatorischen Achsen versetzt im 120 Grad Winkel. Wenn der Endeffektor einen Kreis in einer 2D-Ebene abfahren will, müssen sich alle 3 Achsen gleichzeitig bewegen. Ob dies ein reiner Sinus ist, wag ich zu bezweifeln. Spielt aber auch keine Rolle, da das Ansteuerprinzip ja übertragbar sein muss...

    Gruß

  6. #16
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    08.04.2009
    Ort
    an der Ostsee
    Beiträge
    334
    moin moin,

    bei einem Kreis wird ein Motor mit Sinus der andere mit Cosinus angesteuert.
    Im Bereich des Richtungswechsel ist die Schrittfrequenz sehr gering, da habe ich nichts extra progammiert.

    >>Wenn der Endeffektor einen Kreis in einer 2D-Ebene abfahren will, müssen sich alle 3 Achsen gleichzeitig bewegen

    damit ich das richtig verstehe mach mal bitte ne Zeichnung oder Foto.

    Das mit der Wurzel aus der Summe der angesteuerten Motore:
    1 Motor (X) => ein Schritte in der Ebene
    2 Motor2 (XY) => ein Diagonalschritt in der Ebene..und der ist SQRT(2) länger
    3 Motore(XYZ) => ein Schritt im Raum..und der ist SQRT(3) länger.

    Kann es sein das Deine 3 Achsen alle in einer Ebene werkeln?

    Mit Gruß
    Peter

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    05.02.2010
    Ort
    Augsburg
    Beiträge
    69
    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.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Delta Roboter.jpg   Draufsicht.jpg  

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    05.02.2010
    Ort
    Augsburg
    Beiträge
    69
    Hier ein Beispiel Video für einen Delta Roboter aus Youtube. Dieser setzt sich natürlich deutlich von den zahlreichen Hobbyversuchen ab.

    http://www.youtube.com/watch?v=Gv5B63HeF1E

    Gruß

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test