Inhaltsverzeichnis

GRBL - Die ersten Schritte

GRBL ist die Implementierung eines G-Code Interpreters auf einem Atmega Mikroprozessor. Neben der Interpretation des G-Codes erzeugt der Prozessor auch gleich die Signale STEP und DIR für die Treiberbausteine der Schrittmotoren.

Der G-Code ist unter anderem in der Norm NIST RS274/NGC festgeschrieben und in GRBL als Teilimplementierung realisiert. G-Code ist als reiner ASCII-Text auch vom Menschen noch lesbarer! Der umganssprachliche Name G-Code kommt wohl daher, dass die Befehle mit G0 oder G1 beginnen und von dem englischen Begriff (go) abgeleitet sind. Der G-Code muss von einem Host System, meist ein PC mit Windows, Linux oder Mac OS, per USB an den Mikroprozessor mit GRBL Firmware übertragen werden. Die seriell übertragenen Zeichen werden dann vom Prozessor interpretiert.

Zusätzlich zu den reinen Steuerbefehlen zum Fräsen gibt es auch noch ergänzende Parameter zu den Befehlen, eigene Steuerbefehle und Kommandos. GRBL versteht verschiedene G-Codes, M-Codes und Befehle die mit $ beginnen!

Zur Übertragung der G-Code Fräsprogramme vom Host System zum Mikroprozessor wird meist auf dem Host ein Programm verwendet, dass sich allg. „G-Code Sender“ nennt. Hier gibt es verschiedene alternativen an Programmen, die verwendet werden können. Jedes hat wohl seine Vor- und Nachteile! Eine Kleine Auswahl der möglichen Programme kann man sich unter (https://github.com/grbl/grbl/wiki/Using-Grbl) ansehen!

Beispielprogramme

Für die ersten Gehversuche werden oft fertige Beispielprogramme verwendet. Dazu kann man den [Shapeoko] Schriftzug oder unseren von [myhobby-CNC] verwenden. Der Beispiel Code ist relativ kurz und ist ausreichend getestet, so dass es zu keinen Problemen führen sollte. Um den Code sichtbar zu machen, kann in die Fräshalterung ein Filzstift eingesetzt werden, der entweder durch Eigengewicht, oder eine Feder nach unten auf ein Blatt Papier drückt. Dann wird der Beispielcode ausgeführt und es wird der Schriftzug nachgezeichnet.

Verbindung aufbauen

Als Erstes muss natürlich die Verbindung mit dem Microkontroller aufgebaut werden. Dazu ist der Kontroller mit einem geeigneten USB-Kabel mit dem PC zu verbinden. Sollte bisher noch nicht der Treiber für den USB-Baustein des Microkontrollers, auf dem PC/Mac installiert worden sein, so ist dieses spätetstens jetzt nach zu holen. Die Treiber befinden sich auch auf unserer WIKI-Seite (8-bit Microcontroller Boards).

Beim Einstecken des USB-Kabels wird das Microkontroller-Board automatisch erkannt, und eine virtuelle serielle Schnittstelle (com-x) erstellt. Über diese kann mit dem Kontroller kommuniziert werden. Hierbei ist zu beachten, dass in der Software auf dem PC (G-Code Sender) die richtige Übertragungsrate eingestellt werden muss. Für die v0.8 ist das 9600 Baud, für die v0.9 und folgende Versionen 115200 Baud! Bitte unbedingt darauf achten!

Nach dem Start meldet sich der Microcontroller mit seinem Versionsstring und den eingestellten Parametern des EEPROM! Sieht man das alles, ist die Verbindung OK!

Direkte Kommandos

Außer dem G-Code versteht der Kontroller mit der GRBL-Firmware auch noch direkte Kommandos, die an der Eingabezeile auf dem PC eingegeben werden und dann im Microkontroller bestimmte Aktionen ausführen. Die Kommandos beginnen meist mit dem $-Zeichen!

Die Liste der Kommandos sieht wie folgt aus:

Befehl Beschreibung
$$ (GRBL Parameter anzeigen)
$# (#-Parameter anzeigen)
$G (Status anzeigen)
$I (Versionsstring anzeigen)
$N (Startblock anzeigen)
$x=Wert (Wert in Variable x speichern)
$Nx=Zeile (Startblock speichern)
$C (G-Code Modus prüfen)
$X (Alarm Sperre zurücksetzen)
$H (Home-Zyklus einleiten)
~ (Zyklus straten)
! (Bewegung anhalten)
? (aktuellen Status anzeigen)
ctrl-x (reset GRBL)

Die vier letzten Befehle, ohne das vorangestellte $, sind Echtzeitbefehle die während des Laufes der Maschine aufgerufen werden können! Die Liste der Befehle kann auch mit der HILFE-Funktion aufgerufen werden. Die erreicht man durch Eingabe eines einfachen $-Zeichens in der Befehlszeile!

Der am häufigsten verwendetet Befehl wird wohl der zum Setzen einer Variablen sein. Dieses geschieht mit z.B. „$100=33.333“. Bei GRBL werden Punkte als Dezimaltrennzeichen verwendet!

ABC der GRBL Settings

Mit den GRBL-Settings werden verschiedene Parameter fix in der GRBL-Firmware eingestellt. Diese Parameter werden in das so genannte EEPROM des Mikroprozessors einprogrammiert und sind daher auch nach einer Stromabschaltung beim nächsten Start wieder vorhanden (Achtung: Übrigens auch nach einem Softwareupdate!).

Die einzustellenden Parameter betreffen die interne Arbeitsweise der Firmware und der verwendeten Konfiguration der Fräse selbst. Dieses sind Werte zum Timing, dem Verhalten und Justierung der Fräse.

Die Originaldomumentation in englischer Spreche ist hier zu finden:
GRBL 1.1: https://github.com/gnea/grbl/wiki/Grbl-v1.1-Configuration
GRBL 0.9: https://github.com/grbl/grbl/wiki/Configuring-Grbl-v0.9
GRBL 0.8: https://github.com/grbl/grbl/wiki/Configuring-Grbl-v0.8

Die Werte im einzelnen:

>=v0.9 v0.8 Kurzbescheibung Bemerkung
$0 $3 STEP-Impulsbreite in µsec. Min. Impulsbreite für den Steuerbaustein der Schrittmotoren
$1 $7 STEP-Schlafmode in µsec. Entscheidet ab wann die Motoren stromlos geschaltet werden
$2 $6 STEP-Port Maske Die Signale für STEP-Impuls können invertiert werden
$3 $6 DIR-Port Maske Die Signale für DIR-Impulse können invertiert werden
$4 $15 STEP-Enable Pin Der Enable Pin für die Treiber kann invertiert werden
$5 LIMIT-PINsDie Limit-Pins können invertiert werden 1=invertiert, 0=Normal
$6 PROBE-PIN Der PROBE-PIN kann invertiert werden
$10 STATUS Maske Maske um weitere Statuswerte abrufen zu können
$11 $9 Übergangsgeschwindigkeit Mit welcher Geschwindigkeit von einer geraden in eine Kurve gefahren wird
$12 $10 Auflösung von Kreisen Wie fein ein Kreis aufgelöst wird (Std:0,002mm)
$13 $13 Maßsystem Wird intern mit Inches oder Millimetern gerechnet und reportet
$20 Soft-Limits Überprüfung des G-Codes auf Überschreitung der max. Maße der Fräse
$21 $16 Hard-Limits Maschine stoppen, wenn Endschalter ausgelöst werden
$22 $17 HOMING Zyklus Einschalten, ob Homing verwendet werden soll
$23 $18 HOMING Richtungs MaskeInvertiert die Richtung für die Homing Position
$24 $19 HOMING Feineinstellung Geschwindigkeit, in der der Endschalter genau eingestellt wird (mm/min.)
$25 $20 HOMING Suchgeschwindigkeit Geschwindigkeit in der der Homing-Schalter gesucht wird (mm/min.)
$26 $21 HOMING Entprellen Zeitverzögerung zum Entprellen der Endschalter (ms)
$27 $22 HOMING pull-off Gibt an, um wieviel (mm) die Achse zurückfahren muss um den Schalter wieder frei zu gebe
$100 $0 X-STEP pro mm Anzahl Schritte (STEPs) um einen mm Verfahrweg auf der X-Achse zu bekommen (steps/mm)
$101 $1 Y-STEP pro mm Anzahl Schritte (STEPs) um einen mm Verfahrweg auf der Y-Achse zu bekommen (steps/mm)
$102 $2 Z-STEP pro mm Anzahl Schritte (STEPs) um einen mm Verfahrweg auf der Z-Achse zu bekommen (steps/mm)
$110 $5 X Verfahrgeschwindigkeit Max. Geschwindigkeit in der die X-Achse fahren darf (mm/min.)
$111 $5 Y Verfahrgeschwindigkeit Max. Geschwindigkeit in der die Y-Achse fahren darf (mm/min.)
$112 $5 Z Verfahrgeschwindigkeit Max. Geschwindigkeit in der die Z-Achse fahren darf (mm/min.)
$120 $8 Beschleunigung in X-Richtung Max. Beschleunigung der X-Achse (mm/sec²)
$121 $8 Beschleunigung in Y-Richtung Max. Beschleunigung der Y-Achse (mm/sec²)
$122 $8 Beschleunigung in Z-Richtung Max. Beschleunigung der Z-Achse (mm/sec²)
$130 Maschinenbreite in X-Richtung Max. Breite des Verfahrweges in X-Richtung (mm)
$131 Maschinenbreite in Y-Richtung Max. Breite des Verfahrweges in Y-Richtung (mm)
$132 Höhe in Z-Richtung Max. Höhe des Verfahrweges in Z-Richtung (mm)

Die wichtigsten Parameter sind fett markiert: $0: Dauer des Schritt Impulses, der minimal einzustellende Wert muss aus dem Datenblatt des verwendeten Treibers entnommen werden.

$100-$102: (bzw. $0, $1, $2) für die Anzahl der Schritte pro mm. Hier ist die Auflösung des Schrittmotors, eine ev. Über-/Untersetzung und ein ev. eingestelltes Microstepping zu berücksichtigen. Die Variablen $110-$112 sind für die Verfahrgeschwindigkeit und die Parameter $120-$122 für die Beschleunigung. Wenn mit Homing und Softlimits gearbeitet werden soll, dann sind die Parameter $130-$132 noch für die max. Verfahrwege einzustellen!

Berechnung der Step/mm Werte: http://wiki.myhobby-cnc.de/doku.php?id=myhobby-cnc:schritt-bewegung

Der STEP-Schlafmode sollte für Maschinen mit Zahnriemenantrieb auf 255 gesetzt werden. Für Maschinen mit Gewindestangen kann 25 eingestellt werden.

Wenn Achsen in die falsche Richtung fahren, kann das über die DIR-Port Maske angepasst werden.

Die ganzen Variablen, für die eine Maske oder Inverter-Maske eingestellt werden kann, arbeiten nach dem folgenden Prinzip:

Dezimal Maske Invert X Invert Y Invert Z
0 0000 0000 N N N
1 0000 0001 Y N N
2 0000 0010 N Y N
3 0000 0011 Y Y N
4 0000 0100 N N Y
5 0000 0101 Y N Y
6 0000 0110 N Y Y
7 0000 0111 Y Y Y

Das betrifft die v0.9 Parameter: $2, $3, $5 u. $23!

Gegenüberstellung der v0.8 und v0.9 Parameter: http://www.myhobby-cnc.de/forum/thread.php?board=5&thread=32

Standard Parameter

Eine .nc Datei mit den Standardparametern für eine Zahnriemengetriebene Shapeoko2 steht hier zur Verfügung. Diese kann wie ein Fräsauftrag z.B. mit GRBL Controller an GRBL geschickt werden:

GRBL 0.8: http://www.myhobby-cnc.de/forum/download.php?type=file&id=1552043802

GRBL 0.9 und folgende: http://www.myhobby-cnc.de/forum/download.php?type=file&id=1549446135

Hinweis: Von GRBL v0.9 bis GRBL v1.1, hat sich lediglich der $10 status report Parameter geändert und die neuen Parameter $30/ $31 spindle rpm max/min und $32 laser mode settings sind hinzugekommen.

Fräsmotorsteuerung

Seit der GRBL-Version 0.9 ist es jetzt auch möglich, einen Fräsmotor vom G-Code aus zu steuern. Dazu wurden in der Pin-Belegung die Pins mit der ARDUINO Bezeichnung D11 und D12 gegenüber der Version 0.8 vertauscht so dass Pin D11, der ein PWM (Puls Weiten Modulation) Pin ist, als Steuerung für den Fräsmotor verwendet werden kann. Diese Funktion muss in der Firmware bei der Kompilierung eingeschaltet sein. Dieses ist standardmäßig bei der 0.9er Version der Fall.

Der Wertebereich für den Fräsmotor ist 0 - 1000! Damit ist nicht die Drehzahl gemeint, sondern einfach nur ein einstellbarer Wertebereich. Dabei ist 0 = Stillstand des Motors und 1000 = volle Drehzahl! Das Signal wird als PWM an dem Pin D11 ausgegeben, so dass der Wert 500 ein Puls-Breitenverhältniss von 50/50% ergibt. Wer mit diesem Signal ein Relais oder einen Schalttransistor dauerhaft einschalten will, muss einfach den Wert 1000 einstellen. Das bedeutet dann vollständig an!

Manuell kann der Wert an der Kommandozeile z.B. mit „S500“ eingegeben und an die Firmware übergeben werden. Zunächst passiert nichts. Mit den Befehlen M5 wird dann der Motor eingeschaltet, und mit M3 wieder ausgeschaltet. Beides, sowohl der S-Wert wie auch die M3/M5 Kommandos werden von manchen Benutzeroberflächen direkt unterstützt, so dass diese über Schaltknöpfe und Schieberegler erreichbar sind!

Auf unserem GRBL-Controller-Board wird dieses Signal sowohl mit einem Schalttransistor als auch einem SSR (solidStateRelais) unterstützt. Mit dem Transistor (MosFET; 50V, 30A) kann direkt ein DC-Motor gesteuert werden, der mit der Leistungsspannung des Boards versorgt wird. Wenn das SSR bestückt wird, dann ist es auch möglich, eine 220V Spannung zu schalten, die dann für die Versorgung eines 220V Fräsmotors verwendet wird. Prinzipiell ist auch hier eine Drehzahlreglung durch unterschiedliche Pulsbreiten möglich! Der 220V Teil ist natürlich nur für erfahrene Bastler gedacht und wird auf eigene Gefahr genutzt, da hier höchste Vorsicht geboten ist!!!

Um jetzt den Zahlenwert einer Drehzahl zuordnen zu können, müssen bei verschiedenen Pulsbreiten (s-Werte) die Drehzahl des eingesetzten Fräsmotors gemessen werden und daraus der richtige Faktor berechnet werden. Wenn also der eingestellte S-Wert z.B. 500 ist, und die gemessene Drehzahl ist 10.000, dann ist X = 10.000/500 = 20! Möchte ich jetzt mit einer Drehzahl von 15.000 Arbeiten, dann ist 15.000/20 = 750 als S-Wert einzustellen! Natürlich nur, wenn sich die Drehzahl auch wirklich linear verhält.

Cooling

Unter Cooling wird die Möglichkeit eine Kühleinheit zu nutzen verstanden. Eine Kühlung mit Kühlmittel wir in der Regel bei Metallverarbeitenden Prozessen wie Fräsen, Drehen, Sägen und Bohren verwendet. Bei der Verarbeitung von Holz, Kunststoff und Hartschaum wird das meist nicht nötig sein. Obwohl auch hier z.B. mit Pressluft zur Kühlung oder zum Reinigen des Arbeitsbereiches gearbeitet werden kann.

Auf unserem GRBL-Controller-Board befindet sich ein Schalttransistor um eine programmgesteuerte Kühlung zu nutzen. Der Transistor arbeitet mit der Betriebsspannung der Treiberbausteine und kann so etwa ein Relais oder einen geeigneten Lüfter steuern!

Die Kühlung wird mit dem Komando M8 eingeschaltet, und mit M9 ausgeschaltet. Diese Kommandos können direkt im G-Code an entsprechender Stelle eingebaut werden. Es gibt auch verschiedene Oberflächen, die diese Kommandos direkt durch Bedienknöpfe unterstützen.

Homing Zyklus

Tja, das HOMING, auch Referenzfahrt genannt kann kompliziert werden. Daher wollen wir hier etwas ausführlicher darauf eingehen.

Warum wird das HOMING eigentlich benötigt. Wenn bei einem Fräsvorgang z.B. der Strom ausfällt, oder der Fräser abbricht oder unkontrolliert ins Material fährt und Schritte verliert, kann mit dem Homing der Fräsauftrag an jeder beliebigen Stelle wieder fortgesetzt werden. Das Homing wird auch benötigt, wenn z.B. von einem Werkstück die Vorder- und Rückseite bearbeitet werden soll.

Das Homing eicht mir die Maschine immer auf denselben Nullpunkt! Jedes Mal, wenn ich den Homingzyklus einleite!

Was sind die Voraussetzungen für das Homing? Zum Homing werden drei Endschalter benötigt, die fix an der X-, Y-, und Z-Achse befestigt sind. Wo die Endschater montiert sind ist egal, wichtig ist nur, dass die Position, an der alle drei Endschalter ausgelöst werden die Koordinaten X=0, Y=0, Z=0 sind. Man verwendet dafür oft die linke vordere Ecke der Fräse, da dann der Ursprung dem Koordinatensystem im ersten Quadranten entspricht. Das ist auch so bei 3D-Druckern. Wer jedoch den Arbeitsbereich in der Homing-Position frei haben möchte, kann auch den Ursprung nach hinten legen!

Wir gehen hier davon aus, dass die Homing-Position den Nullpunkt in der linken vorderen Ecke hat! Daher sind auch die Endschalter so montiert, dass diese hier auslösen.

Die Endschalter müssen so verschaltet sein, dass sie den jeweiligen Pin des zugeordneten Endschalters auf Masse schalten. In der Standardeinstellung sind die Pin´s des Arduino´s so voreingestellt, dass diese mit dem internen 100k Ohm Widerstand auf HIGH-Level (+5V) eingestellt sind. Das ist der Ruhezustand. Wenn jetzt der Endschalter ausgelöst wird, dann wird dieser HIGH-Level auf Masse (0V) geschaltet und der Eingangspin registriert das.

Die Endschalter haben oft drei Anschlüsse, und zwei aufgedruckte Bezeichnungen. Diese nennen sich NO und NC für „normal open“ und „normal close“. Also der Kontaktverbindung im Schalter im ungeschalteten Zustand. Für unseren Anwendungsfall benötigen wir die beiden Anschlüsse, die der NO-Schalterstellung entspricht. Im Normalzustand ist der Schalter offen und wird geschlossen, wenn der Schalter ausgelöst wird.

Nachdem die drei Endschalter eingebaut und richtig verschaltet sind, müssen einige Einstellungen in den Konfigurationsparametern eingestellt werden. Zunächst ist dafür der Homing-Zyklus mit $22=1 einzuschalten! Dann ist zu überlegen, in welcher Richtung der Homing-Zyklus die Endschalter suchen soll. In der Standardeinstellung versucht der Zyklus die Schalter zu finden, in dem er in plus (+) Richtung verfährt! Wenn wir die Schalter aber bei 0,0,0 haben, müsste die X- und Y-Achse aber in negative Richtung verfahren. Bei der Z-Achse sieht es meist so aus, dass 0 bei ganz hochgefahrener Z-Achse ist, und die Z-Achse dann in negative Richtung nach unten fährt. Wenn die Maschine so wie beschrieben eingestellt ist. dann müsste der INVERT Parameter für die Homimg Position $23=3 lauten! Dann werden die beiden X- und Y-Achsen invertiert, die Z-Achse aber nicht! Wenn das an der eigenen Maschine so nicht passt, dann muss dieser Parameter ausgetestet und entsprechent eingestellt werden.

Übrigens, es müssen immer alle drei Endschalter vorhanden sein! Teilmengen davon sind nicht gestattet! Der übliche Homing-Zyklus fährt nun erst die Z-Achse ganz nach oben, um Kollisionen mit Werkstücken zu vermeiden. Dann verfahren die X- und Y-Achsen zeitgleich zum Nullpunkt. Wurde dieser einmal angefahren und gefunden, fährt die Achse noch einmal zurück um den Schalter dann nochmal langsam anzufahren. So wird der absolut exakte Schaltpunkt des Endschalters ermittelt. Die Verfahrgeschwindigkeiten zum suchen des Schalters, und dann zum exakten anfahren werden mit den Parametern $25=635.000 für`s finden und $24=50.000 für´s Kalibrieren eingestellt. Die Werte entsprechen der Geschwindigkeit in mm/min und können/müssen auf die eigene Maschine angepasst werden!

Wichtig ist noch, dass sobald das Homing eingeschaltet ist, der Kontroller keine G-Codes annimmt und ausführt, bevor der Homimg-Zyklus abgeschlossen ist! Es muss immer als erstes ein HOMIMG-Zyklus mit dem Befehl $H ausgeführt werden. Erst dann wir das interne ERROR (Fehler) Kennzeichen gelöscht, und der Kontroller nimmt G-Code Befehle an.

Alle diese Eigenschaften und Verhaltensweisen können von Experten in der Konfiguration des Quellcodes vor einer erneuten Compilierung der Firmware verändert werden. Dieses sollte aber wirklich nur für Experten notwendig sein!

Soft Limits

Soft Limits sind ein Sicherheitsmerkmal das verhindern soll dass die Fräse zu weit und über die Grenzen des Verfahrwegs hinaus fährt, abstürzt oder etwas Teures kaputt macht. Es funktioniert, indem es die maximalen Verfahrwege für jede Achse und die Position von Grbl in den Maschinenkoordinaten kennt. Immer wenn eine neue G-Code-Bewegung an Grbl gesendet wird, prüft es, ob Sie versehentlich den Raum Ihrer Maschine überschritten haben. Wenn dies der Fall ist, gibt Grbl sofort eine Vorschubunterbrechung aus, wo auch immer sie sich befindet, schaltet die Spindel und das Kühlmittel ab und setzt dann den Systemalarm, der das Problem anzeigt. Die Maschinenposition wird danach beibehalten, da sie nicht wie harte Grenzen durch einen sofortigen Zwangsstopp bedingt ist.

HINWEIS: Softlimits erfordern die Aktivierung des Homings und die Angabe des maximalen Verfahrwegs der Achsen, da Grbl wissen muss, wo sie sich befindet. $20=1 zum Aktivieren und $20=0 zum Deaktivieren.

$130= maximaler Verfahrweg der X-Achse in mm
$131= maximaler Verfahrweg der Y-Achse in mm
$132= maximaler Verfahrweg der Z-Achse in mm

Hard Limits

Hard Limits sind ein physisches Sicherheitsfeature. Zusätzlich zu den Homingschaltern an je einem Achsenende werden am zweiten Ende der X- und Y- Achse weitere Schalter angebracht.

Über den Parameter $21=1 (Ab GRBL 0.9f) werden die Hard Limits aktiviert.

Sobald nun ein Schalter ausgelöst wird, werden die Motoren sofort stromlos geschaltet, die Fräse hält augenblicklich an.

Für den Normalfall der NO (Normal Open) Verdrahtung muss der Schalter bei Auslösung eine leitende Verbindung zwischen dem Limit Pin und Masse herstellen. Bei der NC Verdrahtung muss diese Verbindung im Auslösefall geöffnet werden.

Ab GRBL 0.9 kann über einen weiteren Parameter die Art der Verkabelung konfiguriert werden: Sind die Schalteter NO (Normal Open) verdrahtet, so ist der Parameter $5=0 zu setzen, im anderen Fall ist er auf $5=1 zu setzen.

Endschalter

Zur Verkabelung der Enschalter siehe auch folgende WIKI Seite: Verkabelung der Endschalter

wird fortgesetzt