Der Fräskopf meiner CNC-Fräse LCF-1 wird normalerweise über das Bedien- und Steuerprogramm auf dem PC - in letzter Zeit fast immer OpenCNCPilot - gesteuert, was auch die manuelle Positionierung der Frässpindel im Arbeitsraum einschließt.
Beim anfangs genutzten Steuerprogramm SerialComCNC erfolgt die Positionierung durch Eingabe von Relativkoordinaten, Richtung und Geschwindigkeit für alle drei Achsen - wobei immer zuerst der zurückzulegende Weg sowie die Verfahrgeschwindigkeit voreingestellt wird, bevor der eigentliche Fahrbefehl per Mausclick ausgelöst wird. Man kommt auf diese Weise immer ans Ziel, aber so richtig von der Hand geht einem dieses Verfahren meiner Meinung nach nicht.
Hat man einen ausreichend breiten Monitor an seinem Steuer-PC, kann man in SerialComCNC ein sogenanntes JogDial einblenden und damit zumindest eine einzelne Achse halbwegs gefällig bedienen.
OpenCNCPilot unterstützt das Verfahren des Fräskopfs durch die in GRBL 1.1 neu implementierten Jog-Befehle über die Tastatur, was schon eine deutliche Verbesserung der Bedienbarkeit bringt.
Mir schwebte aber eine Steuerung vor, bei der ich alle drei Achsen parallel und vor allem intuitiv verfahren kann um das Werkzeug z.B. über den Nullpunkt zu setzen oder zum Montieren oder Demontieren des Werkstücks aus dem Weg zu fahren.
Auch möglich sind mit der angedachten Joystick-Steuerung einfache Fräsarbeiten, z.B. die rechteckige Kontur einer per Isolationsfräsen hergestellten Platine ausschneiden.
Realisiert habe ich deshalb die nachfolgend beschriebene Lösung.
Zwei Daumen-Joysticks und zwei Schalter sitzen in einem Gehäuse und erlauben die freie Positionierung des Werkzeugs durch Auslenkung der Joysticks. Die Verfahrgeschwindigkeit hängt direkt an der Auslenkung der Joysticks. Die Schalter dienen der gegenseitigen Verriegelung von G-Code-Streamer (OpenCNCPilot, SerialComCNC, Estlcam, ...) und manuellem Verfahren über das an anderer Stelle bereits erwähnte Interface.
Um die aufgeführten Teile in dem Alu-Gehäuse überschneidungsfrei einbauen zu können, habe ich im Vorfeld das Projekt in DesignSpark Mechanical modelliert. Das war auch eine gute Fingerübung für mich, da ich bisher noch keine Berührpunkte mit CAD-Programmen hatte.
Im Innern, hellgrün eingefärbt, kann man das Teil erahnen, an dem ich die beiden Joystick-Platinen befestigt habe:
In Natura stellt sich das Ergebnis so dar:
Die Kunststoffplatte und den POM-Klotz habe ich natürlich mit der Fräse erstellt :-)
Hier sind beide Joysticks montiert:
Das Signal für Enable ist Low-aktiv, also habe ich die rote LED im Schalter an P5V angeschlossen und schalte sie durch den Schalter direkt zusammen mit dem Enable -Signal ein. Die grüne LED im Taster wird von einem Ausgang des Arduino geschaltet und signalisiert, wenn Step-Impulse erzeugt werden. Der Taster selbst ist momentan noch ohne Funktion, ist aber bereits an einen Eingang des Arduino verdrahtet.
Update
Der Taster hat ab Firmware V5.5 ebenfalls Funktionen erhalten.
Manuelles Verfahren zum Fräsen von geraden Kanten erfordert, dass nicht versehentlich die andere horizontale Achse bewegt wird. Die Blockade gilt nur für die jeweils andere, horizontale Achse, die vertikale Achse kann weiterhin immer verfahren werden.
Bedienung
Die Joysticksteuerung ist mittels SCHALTER aktiviert, die rote LED im Schalter leuchtet. Jetzt wird die grüne Taste am Controller gedrückt und festgehalten, dann kurz die Achse
per Joystick betätigt, die verwendet werden soll. Nach Erkennen der gewünschten Achse blinkt die LED im grünen Taster, der Taster kann losgelassen werden und die andere
horizontale Achse kann ab jetzt nicht mehr versehentlich mitbewegt werden.
Beendet wird dieser Modus durch erneuten Druck auf den grünen Taster -> das Blinken hört auf.
Auch für das Abschalten dieses Modus muss der SCHALTER aktiviert sein.
Joystick-Steuerung fertig verdrahtet:
Joystick-Steuerung betriebsbereit:
Das rechnerseitige Ende der Joystick-Steuerung ist ein Arduino Nano V3 der über einen 15-poligen D-Sub Stecker die Signale von den Joysticks und den Schaltern erhält und dessen Ausgänge Step- und Richtungsimpulse für die Stepper-Endstufen liefern, die über die Interfaceplatine an die Stepper-Treiber weiter gegeben werden.
Auch hier wurde wieder die Fräse eingesetzt um per Isolationsfräsen die Leiterplatte zu erstellen, die den Arduino und zwei Pfostenstecker trägt.
Die Ausführung lässt zu wünschen übrig, da ich keine Tiefenregelung habe und die Spitze des verwendeten Gravierstichels mit ca. 120° viel zu flach ist, aber die Verbindungen sind in Ordnung, die Schaltung funktioniert.
Der Film zeigt wie die Fräse den Bewegungen der Joysticks folgt:
(Click auf das Bild wechselt zu Vimeo)
Die Rückwand musste sich eine zweite Operation gefallen lassen um den Ausschnitt für den neuen, 15-poligen Joystick-Stecker zu erhalten.
Der zweite Arduino sitzt ebenfalls auf dem Boden des Gehäuses, beide Arduinos sind intern am nicht benötigten USB 3-Anschluss auf dem Motherboard angeschlossen. Die Buchsenleiste passend zum USB 3-MoBo-Stecker hat 10 Kontakte mit 2 mm Pitch. Die Datenleitungen für USB 2.0 werden verwendet, die Signale für USB 3 bleiben einfach unbeschaltet.
Nachtrag
Die Anschlüsse für den GRBL-Arduino und den Joystick-Arduino habe ich über den auf
dem Motherboard vorhandenen, nicht benutzten USB 3.0-Anschluss ausgeführt. Dabei habe ich in der Krabbelkiste vorhandene 2 mm Pitch Buchsenleisten verwendet.
Das hat für die Steuerung der Fräse ziemlich lange gut funktioniert und die Kommunikation zwischen der Joystick-Steuerung und anderen Programmen
(verschiedene Seriell-Konsolen) ebenfalls, obwohl die Steckerleisten nicht besonders fest auf den Kontakten sitzen.
Kürzlich habe ich mal wieder etwas fräsen müssen und da konnte ich keine Verbindung mehr zwischen SerialComCNC und dem Arduino aufbauen. Erst als ich die beiden USB-Anschlüsse vertauscht habe, funktionierte die Steuerung der Fräse wieder.
Ok, also habe ich Kontaktprobleme zwischen Steuerrechner und Arduino. Ich habe daraufhin ein normales Adapterkabel von 2x USB 3.0 (die blaue 10 pol Buchse) auf 8 pin Pfostenstecker gekauft, eingebaut und alles ist gut, jetzt auch die Kommunikation zu SerialComInterface.
Das Programm zur Erzeugung der Step- und Direction-Signale anhand der Joystick-Auslenkung ist in C geschrieben. Die serielle Kommunikation zwischen Arduino und Rechner zur Parametrierung der Steuerung basiert auf Arduino-Libs, die Erzeugung der Step-Impulse wurde komplett “zu Fuß” realisiert, da einige benötigte Funktionen von Arduino zu langsam laufen.
Einige Parameter für die Schritt-Erzeugung sind im EEPROM des Arduino abgelegt und können über die USB-Verbindung zur Laufzeit verändert und auch wieder abgespeichert werden. Zur Kommunikation wird ein Terminal-Programm benötigt, das in der Arduino-IDE integrierte Terminal funktioniert zum Beispiel prima. Die serielle Schnittstelle des Arduino läuft mit 57600 Baud, das muss im Terminal-Programm passend eingestellt werden.
Mit Eingabe von “?” wird eine kurze Hilfe ausgegeben.
Hinweis
Die Anschlussbelegung des Arduino ist im Code angegeben:
// Definition der Ausgänge (Arduino Nummerierung und AtMega Nummerierung)
#define dirX 4 // Pin D4 = Port D4 = PortD Bit 4
#define stepX 2 // Pin D2 = Port D2 = PortD Bit 2
#define dirY 7 // Pin D7 = Port D7 = PortD Bit 7
#define stepY 5 // Pin D5 = Port D5 = PortD Bit 5
#define dirZ 10 // Pin D10 = Port B2 = PortB Bit 2
#define stepZ 8 // Pin D8 = Port B0 = PortB Bit 0
#define LED 13 // Pin D13 = Port B5 = PortB Bit 5
#define GREENLED 18 // Pin D18/A4 ist Ausgang für die Grüne LED im Taster
#define SCHALTER 19 // Pin D19/A5 ist Eingang für den Enable-Schalter
#define TASTER 17 // Pin D17/A3 ist Eingang für den Taster
#define JOYX A0 // Pin A0 ist Eingang für den Joystick der X-Achse
#define JOYY A1 // Pin A1 ist Eingang für den Joystick der Y-Achse
#define JOYZ A2 // Pin A2 ist Eingang für den Joystick der Z-Achse
#define EnableX 12 // drei getrennte Enable-Ausgänge für das Interface
#define EnableY 11 // oder alternativ direkt für die Stepper-Endstufen
#define EnableZ 9
JoyStep_V5.2 für den Arduino steht hier zum Download bereit.
Die in dem ZIP-Archiv enthaltene INO-Datei muss über die Arduino-IDE compiliert und auf den Arduino geladen werden. Danach müssen zuerst die Parameter im EEPROM abgelegt werden, das erreicht man am Einfachsten durch Aufruf von “defaults” und anschließendes “save”.
Durch Eingabe von “$$” werden die eingestellten Parameter angezeigt.
Jetzt können die Parameter sukzessive verändert werden um die Steuerung an die eigene Fräse anzupassen. Kritisch ist hier z.B. der Wert für die höchste Schrittgeschwindigkeit. Wird dieser Wert zu klein eingestellt, verlieren die Motoren Schritte oder bleiben mit schrillen Tönen komplett stehen. Nicht schön.
Abschließend oder auch zwischendurch nicht vergessen, die gefundenen Parameter wieder mit “save” im EEPROM abzulegen.
Aktualisierung
Die Entwicklung der Firmware für meinen Joystick ist zwischenzeitlich ein wenig fortgeschritten, ich war der Meinung, die Generierung der Schritte für die Achsen hätte eine Beschleunigungsrampe verdient.
Das habe ich in der Version Joystep V5.5 implementiert, wenngleich ich offensichtlich die Umsetzung nicht so gut im Griff hatte. Konkret funktioniert das Beschleunigen der Achsen vorzüglich, wenn nur eine Achse bedient wird. Der implementierte Algorithmus versagt aber kläglich, wenn zwei oder gar alle drei Achsen gleichzeitig bewegt werden sollen. Im Prinzip macht die Firmware zwar auch hier alles richtig, will sagen, alle Achsen werden tatsächlich sukzessive beschleunigt, aber die Beschleunigungsrate ist unsäglich gering.
Wer dennoch dieser Version eine Chance geben will, kann sie ebenfalls herunterladen.
Aktualisierung
In den letzten 3 Jahren habe ich mich offenbar an die Einschränkung, immer nur eine Achse zur gleichen Zeit verfahren zu können, gewöhnt, zumindest ist der Leidensdruck
offenbar nicht hoch genug gewesen, meine Fräse lief bis eben immer noch mit Version V5.5 der Firmware.
Nachdem Hannes aber auf diese Unzulänglichkeiten in der V5.5 hingewiesen hat, hat mir das natürlich keine Ruhe gelassen und ich habe mich nochmal intensiv mit der Stepimpuls-Erzeugung in der Firmware des Joystick beschäftigt.
Das Ergebnis nach zwei Tagen Tüftelei ist die Firmware Joystep V5.7, die jetzt alle Achsen gleichzeitig bewegen kann und außerdem die bei der V5.2 vermissten Beschleunigungs-
und Abbremsrampen implementiert hat.
Die Vorteile der V5.5, auch sehr langsam und gefühlvoll den Fräskopf positionieren zu können, sind erhalten geblieben.
Theoretisch sollte diese Version durch die implementierten Beschleunigungs- und Bremsrampen auch für die Bedienung mit Tasten anstelle von Joysticks für fest vorgegebene Verfahrgeschwindigkeiten geeignet sein. Dazu sind natürlich Änderungen am Code notwendig, die der geneigte Nachbauer selbst durchzuführen aufgerufen ist.
Aktualisierung
In der Version V5.7 haben sich die Achsen sproadisch langsam bewegt, obwohl die
Joysticks in Mittelstellung standen. Dieses Problem ist in Joystep V5.8 behoben.
Aktualisierung
Da die AnalogScanner-Lib ab jetzt immer Verwendung findet, habe ich auf Anregung von Hannes die #ifdefs in der Version Joystep V5.8.1 entfernt, das macht die Sache ein kleines Bisschen übersichtlicher ;-)
Bei Fragen zum Programm oder der mechanischen Ausführung der Joystick-Steuerung oder der Fräse bitte einfach per Mail melden.
Ausblick
Zusammenarbeit zwischen Joystick-Steuerung und SerialComCNC oder OpenCNCPilot?
Zur Zeit nicht. Martin (OpenCNCPilot) hat definitiv abgesagt, mir aber anheim gestellt, diese Funktion selbst in sein Programm einzubauen. Ulrich (SerialComCNC) hat sich noch nicht dazu geäußert, allerdings wird die Software seit Längerem nicht mehr aktualisiert, weshalb ich von einem Nicht geplant ausgehe.
Aber die Anzeige von Koordinaten habe ich über SerialComInstruments schon mal realisiert :-)