Jump to content

[Java] Stepperbrick - Dauer bis Erreichen der Zielposition


Recommended Posts

Hallo Zusammen,

ich steuere einen dreiachsigen Roboter mit drei Schrittmotoren, die jeweils an einem Stepperbrick hängen. Nun möchte ich erreichen, dass alle Motoren mit relativen Geschwindigkeiten laufen, um möglichst gleichzeitig die jeweilige Endposition in X/Y/Z zu erreichen.

 

Nun besitzt der Stepper-Brick ja zusätzlich zur Position die Eigenschaften für Beschleunigung, Endgeschwindigkeit und Abbremsen, die ich pro Fahrt relativieren müsste, damit alle Motoren gleichzeitig ankommen.

 

Dazu bräuchte man aber eine Formel, mit der man die Dauer der Motoraktion vorhersagen kann, um die MaxDuration auf dem aufgrund des Weges langsamsten Motor so anzupassen, dass der zusammen mit dem schnellsten dort ankommt.

 

Irgendeine Idee, wie ich da vorgehen könnte?

 

(Da ich den Algorithmus im Stepper nicht genau kenne, bliebe ja nur, eine Art selbstlernendes System zu bauen, dass die Zeiten bis zum Erreichen stoppt, und je nach Duration eine Tabelle mit Anpassungsfaktoren pflegt und bei jedem Lauf verfeinert, aber das muss doch einfacher gehen!??)

 

Viele Grüße

Markus

 

Link zu diesem Kommentar
Share on other sites

Hallo Markus,

 

ich habe selbst in JAVA eine Ansteuerung eines Steppes implementiert. Insofern du keine Schritte durch zu hohe Lasten verlierst, kennt der Stepper Brick die Position genau und sollte sich zeitlich deterministisch verhalten. Jetzt brauchst du ein physikalisch-mathematisches Modell für die 3 Phasen "Beschleunigung bis zur Ziel-Geschwindigkeit", "Verfahren mit konstanter Geschwindigkeit" und Abbremsen mit der negativen Beschleunigung auf 0. Zu berücksichtigen ist noch der Fall, dass der Stepper die Max-Geschwindigkeit nicht erreicht. Aus diesem Modell kannst du die Dauer berechnen.

 

Die Geschwindigkeitsangaben sind in Schritten pro Sekunde und die Beschleunigungsangaben in Schritten/Sekunde². Die Schrittweite sollte in der Spezifikation deines Motors stehen. Für den Nema 17 von TF sind es z.B. 1.8° pro Schritt.

Wenn du Hilfe bei der Formelbildung brauchst, sag Bescheid.

 

Grüße

  Marco

Link zu diesem Kommentar
Share on other sites

Hallo Marco,

das mit den Steppern, Schrittwinkeln etc. ist mir schon soweit alles klar.

 

Ich habe z.Z. ein Programm, mit dem ich interaktiv mit Menüs (im 20x4-Display) und über Joststick-Bricklets Positionen manuell anfahren und quasi lernen kann.

Der Roboterarm fährt später die gelernten Punkte nacheinander an. Dabei ist halt blöd, dass die Motoren nicht schön gleichzeitig ankommen (was eleganter aussähe), sondern je nach Weg auf den 3 Achsen beispielsweise 2 Motoren schon stehen und der letzte noch läuft. Das wirkt dann irgenwie nicht geschmeidig.

 

Mir fehlt jetzt einfach der mathematische Ansatz, die Stepper-Bricks so mit Parametern zu steuern, dass sie (annähernd) gleichzeitig ankommen. Wenn man die Formel im Stepper-Brick kennen würde, wäre das wohl am einfachsten, deshalb die Frage hier im Forum.

 

Wir haben ja als fest eingestellte Werte: Step-Mode (m.E. unwichtig??), MaxVelocity, die beiden SpeedRamping-Werte (bestehend aus beschleunigen und bremsen)

 

Dann weiß ich aus der Anlernphase, zu welcher absoluten Position die drei Achsen laufen müssen, um den Punkt anzufahren und setze sie mit setTargetPosition. (z.B. x=1845, y=345, z=1344)

Also weiß ich, wieviele Steps jeder Motor laufen wird um dort hin zu gelangen.

 

Wenn ich nun gleichzeitig ankommen will, müsste ich erstmal berechnen, wie lange eine Motor-Fahrt unter den o.g. Bedingungen dauern *würde*.

 

Dann könnte man den Zeitwert des langsamsten Motors nehmen und die anderen beiden im Wert MaxVelocity so relativieren, dass deren Zeitdauer für die Positionierung genau so lange dauern wird, wie mit dem langsamsten Motor.

 

Ist hoffe, das ist irgendwie verständlich. Zuerst müsste ich also eine Methode schreiben:

 

... berechneLaufdauerMotorfahrtInMillisekunden(maxGeschwindigkeit, beschleunigungswert, bremswert, anzahlSteps)

 

Aber was könnte ich da reinschreiben?  ... ;-)

 

Vielleicht geht das ja auch einfacher und ich übersehe was?

Keiner soll das für mich Lösen aber ich wäre für einen Denkanstoß dankbar ...

 

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...