- LiFePO4 Speicher Test         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Algorithmus zum parallelen Ansteuern von Schrittmotoren

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.02.2010
    Ort
    Augsburg
    Beiträge
    69
    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. #2
    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 12:45 Uhr)

  3. #3
    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. #4
    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!

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen