24.07.17 18:48
charlyBrown
|
Jogging mit Grbl 1.1
Hallo zusammen,
ich beschäftige mich z. Z. mit der Programmierung einer Joystick-Steuerung via grbl 1.1 mit dessen neuen Jog Kommandos.
Angeregt durch die Beschreibung eines DRO unter diesem Link https://www.shapeoko.com/wiki/index.php/LCD_on_GRBL beabsichtige ich mit einem zweiten Arduino via RX/TX den "grbl-Arduino" "joggen" zu lassen, d.h. ich schicke ihm die neuen Jogging Befehle, beispielsweise "$J=X+1 F600", über die serielle Schnittstelle zu. Das Grundprinzip ist in der grbl 1.1 Dokumentation schon sehr schön beschrieben https://github.com/gnea/grbl/wiki/Grbl-v1.1-Jogging.
Die Richtung und Geschwindigkeit gebe ich über einen analogen Joystick (zwei senkrecht miteinander verbundene Poti) vor, der über die Arduino AD Wandler ausgelesen wird.
Bisher war ich schon in der Lage, Folgendes zu realisieren:
Die folgenden Aussagen beziehen sich auf "einzelne" Jogbefehle, z. B. $J=G91 X+2 F200, ohne dass diese den Look-Ahead-Puffer bewußt in die Bewegung mit einbeziehen.
1) Ich kann die Queue (look-ahead-buffer) mit meinen Befehlen füllen.
Die Bewegung ist dann geschmeidig und schnell in die gewünschte Richtung.
2) Wenn man schnell stoppen möchte und den Joystick (analog Joystick mit Poties) in Mittenposition bewegt, dann kann man mit folgender Kommendosequenz einen sofortigen Stop erwirken:
Feed hold (Maschine stoppt) und unbedingt anschließend: Soft Reset um den Look-ahead Puffer zu löschen.
Das Problem dabei ist, dass sich grbl nach dem SoftReset im "Alarm"-Modus befindet. Den kann man durch den zusätzlichen (nun dritten Befehl) "$X" löschen, was beim Joggen möglich ist.
3) Bewegung in zwei Achsen gleichzeitig geht auch. ABER nur mit der gleichen Geschwindigkeit für beide Achsen. Der $J String erlaubt nur eine Geschwindigkeit zu übergeben, z. B. $J=G91 X+2 Y+2 F200
Ich frage mich allerdings, wie wichtig das mit den zwei Achsen gleichzeitig ist.
4) Was sehr lästig ist:
Wenn man die Joystickbewegungen langsam durchführt, dann füllt sich der Puffer mit den Werten der ersten Joystickposition. Eine Änderung der Joystickposition wird erst umgesetzt, wenn der Puffer abgearbeitet wurde, was aufgrund der hohen Latenz MEGA lästig ist.
Auch hier könnte man per Software den Puffer löschen (softReset), wenn sich die Joystickposition ändert. Das aber hat zur Folge, dass grbl zwischen zwei Joystickpositionen durch den Reset eine Denkpause einlegt.
Dieser Ansatz funktioniert. Wäre für Tasten vermutlich ausreichend. Für einen echten Joystick halte ich diesen Ansatz aber für unzureichend. Aus diesem Grund habe ich mir eine Alternative ausgedacht:
Man kann den Look-Ahead-Puffer evtl. sinnvoll mit Joggen kombinieren.
Ich habe folgende Idee zwar schon kurz ausprobiert und auch mit Universal GCode Sender simuliert, aber noch nicht die richtige Parameterkombination gefunden (ich muss mir anschauen, wie der look-ahead-buffer funktioniert).
Ich gebe bei dieser Lösung bereits für eigentlich "langsame" Bewegungen (= minimale Joystickauslenkung) die maximale Geschwindigkeit der Fräse an.
$J=G91 Y+1 F1000
Ebenso wird die Maximalgeschwindigkeit angegeben, wenn man schneller fahren möchte (= große Joystickauslenkung). Hier gebe ich zusätzlich größere Entfernungen für den Einzelschritt an.
$J=G91 Y+4 F1000
Moduliert wird die Häufigkeit (Frequenz), mit der dieser Befehl an grbl gesendet wird. Sendet man die Befehle selten, dann bewegt sich der Stepper langsam (aber bei mir noch nicht 100% gleichmäßig), sendet man die Befehle in schneller Folge, dann sorgt der look-ahead buffer dafür, dass die maximale Geschwindigkeit erreicht und gehalten wird.
Schneller Halt -> wie oben.
Reaktivität bei unterschiedlichen Joystickpositionen -> besser als erwartet! Damit kann man möglicherweise arbeiten.
Ich denke, mein letzter Ansatz könnte die Lösung sein.
Ansonsten ist der look-ahead-buffer beim Joggen eher lästig.
Meine Frage an Euch ist nun: wie würdet Ihr das Problem lösen, den look-ahead-buffer bei Geschwindigkeitsänderungen schnell mit der neuen Geschwindigkeit zu füllen, um so die lästigen Latenzen zu vermeiden?
Gibt es evtl. sogar eine Möglichkeit, den look-ahead buffer fürs Joggen ganz zu umgehen?
Ich freue mich auf Euer Feedback.
Viele Grüße
Karl-Heinz
|