| Passwort vergessen?
Sie sind nicht angemeldet.  Anmelden

Sprache auswählen:

myhobby-CNC - Kunden Supportforum

Jogging mit Grbl 1.1
 1
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

24.07.17 19:58
charlyBrown 
Re: Jogging mit Grbl 1.1

Nachtrag:

Alternativ zu Feed Hold/Soft Reset/"$X" kann man Jogging Befehle auch mit "jog cancellation 0x85: feed hold and flush buffer" abbrechen.

Da scheint es aber auch Probleme zu geben (siehe Diskussion: https://github.com/gnea/grbl/issues/95).

Viele Grüße

Karl-Heinz

 1
Look-Ahead-Puffer   Programmierung   Joystickpositionen   Joystickposition   Kommendosequenz   Maximalgeschwindigkeit   Joystickbewegungen   unterschiedlichen   Schnittstelle   Joystick-Steuerung   möglicherweise   Mittenposition   zusätzlichen   Parameterkombination   Joystickauslenkung   gleichzeitig   Geschwindigkeitsänderungen   look-ahead-buffer   Geschwindigkeit   beispielsweise