Elektronik_Header_3Lüftersteuerung mit ESP-01

 

Joystick-Steuerung

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 immer ans Ziel, aber so richtig von der Hand geht 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.

Alu-GehÀuse und Einbauteile

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.

GehÀuse-Modell

Im Innern, hellgrĂŒn eingefĂ€rbt, kann man das Teil erahnen, an dem ich die beiden Joystick-Platinen befestigt habe:

GehÀuse halbtransparent

In Natura stellt sich das Ergebnis so dar:

GehÀuse fertig

Die Kunststoffplatte und den POM-Klotz habe ich natĂŒrlich mit der FrĂ€se erstellt :-)

Joystick-GehÀusse innen

Hier sind beide Joysticks montiert:

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 + Schalter verkabelt

Joystick-Steuerung betriebsbereit:

Joystick-GehÀuse fertig verkabelt


Das rechnerseitige Ende der Joystick-Steuerung ist ein Arduino Nano V3 der ĂŒber einen 15poligen 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.

Leiterplatte Joystick-Interface

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:

Joystick-Steuerung in Aktion (Film auf Vimeo)                 (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.

RĂŒckwand mit allen Ausschnitten

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.

Joystick-Steuerung nachgerĂŒstet

    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 Z-Achse
    #define JOYZ A2                  // Pin A2 ist Eingang fĂŒr den Joystick der X-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 :-)

 


Besucherzaehler

Besucher seit
25.11.2000

>