FluidNC Jogging mit Wireless Handrad

Ich suche schon länger nach einer Lösung das Wireless Handrad für das OCS2 mit FluidNC zu nutzen und habe nun eine, zumindest für mich gangbare Lösung gefunden. Es lässt sich nicht ganz so geschmeidig, nutzen, wie zum Beispiel in Estlcam, aber man kann durchaus brauchbar mit dem analogen Joystick verfahren. Diese möchte ich hier einmal vorstellen.

Spoiler: Es ist keine 100% perfekt Lösung. Sondern eher eine, für mich ausreicht und mein Leben schon erleichtert.

Wie funktioniert es?

  1. Das Wireless Handrad vom OCS2 kommuniziert im Normalfall per Wifi mit dem ESP32 auf dem OPEN-CNC-Shield 2.
  2. Zum Glück besitzen die ESP32 drei UART Schnittstellen
    • wir brauchen eine für die Kommunikation mit dem PC über USB für Debugging etc.
    • eine für die Kommunikation mit dem Handrad, falls es per RJ45 eingesteckt wird und Serial statt Wi-Fi genutzt wird
    • die dritte können wir nun verwenden, um den ESP32 auf dem OCS2 mit FluidNC kommunizieren zu lassen
  3. Der ESP32 auf dem OCS2 gibt die Signale nun per UART/Serial weiter an den ESP32 auf dem FluidNC/GRBL läuft und nutzt dabei das hier beschriebene Jogging von GRBL.
  4. GRBL setzt die Jogging Befehle entsprechend um und die Fräse/Laser verfährt

Was kann die Lösung?

  • Der analoge Joystick auf dem Wireless Handrad vom OCS2 kann jetzt auch für das Verfahren von FluidNC genutzt werden. Theoretisch funktioniert das auch mit anderen GRBL Controllern und nicht nur mit FluidNC (Ich habe aber nur FluidNC getestet).
  • Die Geschwindigkeit wird anhand des Ausschlags des Joysticks ermittelt
  • Die maximale Geschwindigkeit wird automatisch aus FluidNC ausgelesen

Was funktioniert nicht und welche Nachteile gibt es?

Anleitung um das ans Laufen zu bekommen

Jumperbrücke

Es wird eine Jumperbrücke benötigt, um den ESP32 auf dem OCS2 mit dem ESP32 auf dem FluidNC ControllerModule miteinander zu verbinden.

Ich nutze die beiden freien Pins GPIO16 und GPIO2 am FluicNC ControllerModule.
Wobei GPIO2 -> RX und GPIO16 -> TX

Am OCS2 pinout nutze ich
GPIO35 -> RX und GPIO19 -> TX

Damit die beiden ESP32 kommunizieren können, muss nun RX an TX und TX an RX. Siehe folgende Verbindungstabelle:

OCS2 PinFluidNC ControllerModule Pin
GPIO35(RX)GPIO16(TX)
GPIO19(TX)GPIO2(RX)

OCS2 ESP32 Firmware

Es muss die aktuellste Firmware Version der OCS2 ESP32 Software aufgespielt werden.
Dort muss folgendes in der Konfiguration(configuration.h) eingestellt werden:

// Use the serial interface for sending jogging command to FluidNC
// Default: false
#define USE_GRBL_JOGGING true
// min speed for jogging in mm/min - max speed is read from the FluidNC settings via
// the serial interface. This means max speed will be the value from your FluidNC config.yaml
// Default: 100
#define MIN_JOGGING_SPEED 100

FluidNC Konfiguration

Damit FluidNC auch an den angeklemmten Pins lauscht, muss folgendes in die config.yaml:

uart2:
  txd_pin: gpio.2
  rxd_pin: gpio.16
  baud: 115200
  mode: 8N1

uart_channel1:
   uart_num: 2
   report_interval_ms: 0
   all_messages: false

Jogging starten

Danach sollte das Jogging bereits funktionieren. Also FluidNC starten und die Steuerung unlocken bzw entsperren bzw. Alarme löschen.
Anders gesagt, das joggen wird nur funktionieren, wenn die Steuerung im IDLE Modus ist.

Details zur aktuellen Implementierung

  • Der ESP32 kann erst anfangen jogging Befehle zu senden, wenn die Konfiguration erfolgreich ausgelesen wurde
    • Dazu wird alle 2 Sekunden ein $S geschickt, bis die Konfiguration erfolgreich ausgelesen werden konnte
    • Aus der Konfiguration wird aktuell eigentlich nur die `max_rate_mm_per_min` für die Berechnung der Geschwindigkeit genutzt
  • Sobald der Joystick nun in einer Richtung bewegt wird, errechnet der ESP32 eine kleine Strecke und je nach Ausschalg des Joysticks eine passende Geschwindigkeit.
  • Damit nicht bei kleinen Joystick-Schwankungen direkt verfahren wird, gibt es eine Toleranz für die Joystick-Bewegung von 20%. Erst wenn diese überschritten wird, schickt der ESP32 einen jogging Befehl
  • Sobald der Joystick wieder in Null-Position ist, wird ein Jog-Halt gesendet(SerialGRBL.write(0x85)
  • Verbesserungen sind immer gern gesehen. Den Quellcode gibts hier

Schreibe einen Kommentar