Firmware GRBL se používá pro řízení CNC strojů ve spojení s řídicí elektronikou osazenou většinou procesorem ATmega328P. Nejčastěji jde o desky Arduino UNO a další desky založené na tomto procesoru. Firmware je dostupný jak ve zdrojovém kódu, tak v předkompilované verzi. Tento návod se zaměřuje na předkompilovanou verzi 1.1, ale s drobnými odchylkami je použitelný i pro jiné verze.

Stažení firmware

Firmware lze stáhnout zdarma z GitHubu. Zde si můžete vybrat požadovanou verzi a také to, zda chcete zkompilovanou verzi ve formátu HEX nebo zdrojové kódy. V tomto návodu se pracuje s verzí HEX.

Instalace firmware

Postup je popisován na desce Arduino UNO, protože je velmi rozšířená. Je však možné použít také Arduino NANO, MINI, případně samotný procesor ATmega328P osazený ve vlastní aplikaci. Existují také hotové desky pro řízení CNC strojů přímo navržené pro použití s firmwarem GRBL.

Pro nahrání firmware ve formátu HEX do desky Arduino UNO je použit program XLoader. Program je jednoduchý: vybere se HEX soubor, cílová deska a COM port, poté se firmware nahraje do desky.

Konfigurace firmware

Po úspěšném nahrání firmware přichází na řadu nastavení parametrů. Každý CNC stroj je jiný, proto je nutné sladit nastavení firmware a konkrétní mechaniky stroje. Pro názornost je postup vztažen k rozšiřující desce CNC Shield v3 a portálové frézce.

GRBL připojení a konfigurace
Ukázka konfigurace GRBL a připojené elektroniky.

Nejprve je potřeba znát parametry použité elektroniky. Na CNC Shieldu lze nastavit mikrokrokování driverů. Podle použitého driveru lze nastavit od full step až po 128 mikrokroků. U běžných driverů A4988 je podporováno až 16 mikrokroků, u DRV8825 až 32 mikrokroků. Pro CNC frézku je vhodné volit spíše nižší hodnoty mikrokrokování, protože s vyšším mikrokrokováním klesá dostupný moment motorů.

Počet mikrokroků8, rozsah podle driveru typicky 1 až 128.
Počet kroků motoru na otáčku200, běžný krokový motor má 1,8 stupně na krok.
Stoupání trapézového šroubu8 mm na jednu otáčku v ukázkovém stroji.
Výpočet kroků na 1 mm8 x 200 / 8 = 200 kroků na 1 mm.

Možnosti konfigurace

Firmware lze konfigurovat třemi metodami. První možností je editace zdrojového kódu před kompilací. Druhou možností je konfigurace přes sériový terminál, která přepisuje hodnoty uložené v EEPROM procesoru, ale je poměrně nepřehledná. Třetí a nejpohodlnější možností je použití konfiguračního nástroje.

V návodu je použit program GrblPanel, který lze později použít i k ovládání CNC stroje. Po spuštění je nutné navázat komunikaci s elektronikou CNC stroje, tedy s deskou Arduino UNO s nahraným firmwarem GRBL. Na kartě COM se vybere port, nastaví se komunikační rychlost 115200 bps a stiskne se Connect.

GrblPanel připojení
Připojení k elektronice přes GrblPanel.

Po úspěšném připojení se přepneme na záložku Settings a pomocí tlačítka Get Grbl Settings načteme všechna nastavení. V tabulce jsou tři sloupce: ID, Value a Description. ID označuje parametr, Value je nastavená hodnota a Description je popis parametru. Hodnotu lze upravit kliknutím do pole Value a uložit klávesou Enter.

Nastavení GRBL
Nastavení parametrů GRBL.

Důležité parametry GRBL

Nyní se podíváme blíže na jednotlivé parametry a něco si k nim řekneme. Nebudu popisovat úplně všechny, protože kromě těch běžně nastavovaných existují i další řídicí hodnoty, pomocí kterých komunikuje ovládací program s firmwarem v desce. Pokud vás zajímá úplný popis, doporučuji prostudovat také originální dokumentaci GRBL.

$0 – Step pulse, microseconds

Výchozí hodnota je 10. Toto nastavení souvisí s použitým driverem a určuje minimální délku kroku. V praxi obvykle není třeba s touto hodnotou nic dělat, nadměrné zvýšení ale může způsobit problémy s řízením pohybu.

$1 – Step idle delay, sec

Výchozí hodnota je 25 v rozsahu 1 až 255. Tato hodnota řídí časovou prodlevu pro vypnutí napájení krokových motorů. Pokud se zastaví pohyby, za definovaný čas se vypne napájení motorů. Pro CNC stroj je to často nežádoucí, protože potřebujeme, aby byly motory stále pod napětím a tím pádem zabrzděné.

Proto je vhodné tuto hodnotu nastavit na 255. Tím se zakáže automatické vypínání motorů a po zapnutí výkonového napájení zůstanou osy držet polohu. Snižuje se tak riziko nechtěného posunutí osy například při výměně nástroje. U některých driverů se tím zároveň předchází ztrátě informace o mikrokroku po vypnutí napájení motoru.

Na druhou stranu mohou být použity motory, kterým dlouhodobé zabrzdění bez pohybu nevyhovuje. V takovém případě je dobré nastavit prodlevu podle jejich specifikace.

$2 – Step port invert mask

Výchozí hodnota je 0 v rozsahu 0 až 7. Toto nastavení podle následující tabulky nastavuje logické úrovně pro řízení driverů krokových motorů, respektive invertuje signály STEP. Používá se hlavně pro speciální drivery. Bližší informace jsou v originálním popisu firmware. Do firmware se zapisuje hodnota ve sloupci Setting Value.

Setting ValueMaskInvert XInvert YInvert Z
000000000NNN
100000001YNN
200000010NYN
300000011YYN
400000100NNY
500000101YNY
600000110NYY
700000111YYY

$3 – Direction port invert mask

Výchozí hodnota je 0 v rozsahu 0 až 7. Tímto nastavením lze invertovat signál pro řízení směru pohybu os DIR. Hodí se to v případě, kdy se některá osa pohybuje opačně a je potřeba ji reverzovat. Někdy stačí otočit konektor motoru, ale ne vždy je to možné nebo vhodné. Pro reverzaci se používá stejná tabulka jako u parametru $2. Pokud například potřebujeme reverzovat osu Y, zadáme hodnotu 2.

$4 – Step enable invert

Výchozí hodnota je 0 v rozsahu 0 až 1. Parametr invertuje logickou úroveň pro zapnutí driverů. Záleží na použitých driverech, u běžně používaných modulů obvykle není nutné nic měnit. Hodnota pro invertování je 1.

$5 – Limit pins invert

Výchozí hodnota je 0 v rozsahu 0 až 1. Parametr invertuje logiku vyhodnocení koncových spínačů. V běžném režimu hodnota 0 znamená, že logická 1 na vstupu je brána jako rozpojený kontakt a spínač není vybavený. Přivedení logické 0 se vyhodnotí jako sepnutí daného koncového spínače. Změna tohoto nastavení může vyžadovat restart procesoru.

$6 – Probe pin invert

Výchozí hodnota je 0 v rozsahu 0 až 1. Funguje podobně jako předchozí parametr, ale týká se sondy v ose Z. Ta se používá například pro korekci nerovnosti pracovní plochy nebo pro nastavení nulové polohy osy Z.

$10 – Status report mask

Výchozí hodnota je 1. Toto nastavení určuje, jaká data jsou v reálném čase hlášena zpět do ovládacího software. Standardně se posílají hlavně aktuální koordináty stroje, ale lze zapnout i rozsáhlejší diagnostiku. Čím více dat se přenáší, tím větší může být zátěž komunikace, takže v běžném provozu je vhodné používat jen to, co opravdu potřebujete.

Report TypeValue
Machine Position1
Work Position2
Planner Buffer4
RX Buffer8
Limit Pins16

Pokud chceme posílat například Machine Position a Work Position, zadáme hodnotu 3, tedy součet vybraných položek.

$11 – Junction deviation

Výchozí hodnota je 0.010 mm. Toto nastavení ovlivňuje brzdění motorů a průjezd změnami směru. Pokud se dráha nástroje blíží k prudké změně směru, musí firmware zajistit, aby motor včas zpomalil a nedošlo ke ztrátě kroků. Obecně platí, že čím větší je nastavená hodnota, tím rychleji bude stroj najíždět do změny směru. Pokud dochází ke ztrátě kroků, je vhodné tuto hodnotu snížit. Podrobnější vysvětlení najdete v článku Improving GRBL cornering algorithm.

$12 – Arc tolerance

Výchozí hodnota je 0.002 mm. Parametr definuje, jak přesně budou vykreslovány kruhové objekty. Nástroj se z principu nepohybuje po dokonale spojité kružnici, ale po krátkých úsecích. Čím nižší je hodnota, tím přesněji bude kruh vykreslen, zároveň ale roste výpočetní zátěž. Ve většině případů není nutné tuto hodnotu měnit. Další informace jsou opět v dokumentaci GRBL.

$13 – Report inches

Výchozí hodnota je 0 v rozsahu 0 až 1. Určuje, v jakých jednotkách se budou zpětně hlásit údaje do ovládacího software. Hodnota 0 znamená milimetry, hodnota 1 palce.

$20 – Soft limits

Výchozí hodnota je 0 v rozsahu 0 až 1. Nastavení zapíná softwarové koncové polohy. Pokud je chcete používat, musí být povoleno referování všech os, správně nastaven pracovní prostor a na stroji musí být namontované referenční koncové spínače. Načtený G-kód je potom analyzován a pokud by se některá osa měla dostat mimo povolený pracovní prostor, stroj se zastaví a vyhlásí problém.

$21 – Hard limits

Výchozí hodnota je 0 v rozsahu 0 až 1. Jde o fyzické koncové spínače. Najetí na libovolný spínač okamžitě zastaví stroj, vřeteno a chlazení a vyvolá alarm. Stroj už nemůže pokračovat v rozpracovaném programu a je nutné provést novou referenci. U tohoto nastavení je důležité dobře ošetřit vstupy proti rušení, aby nedocházelo k nechtěnému zastavování stroje.

$22 – Homing cycle

Výchozí hodnota je 0 v rozsahu 0 až 1. Pokud je parametr povolen, bude nutné po spuštění stroje provést referenci. Souvisí také s tlačítkem pro homing v ovládacím software. Pokud funkce povolena není, software může při pokusu o referování hlásit chybu.

$23 – Homing dir invert mask

Výchozí hodnota je 0 v rozsahu 0 až 7. Určuje, kam se osy rozjedou při referenci. Standardně se osa Z rozjede do plusu a následně se referují osy X a Y. Pokud potřebujete, aby se některá osa referovala opačným směrem, použije se stejná maska jako u parametru $2.

$24 – Homing feed

Výchozí hodnota je 25.000 mm/min. Parametr určuje rychlost finálního najetí referenční pozice. Nejde o rychlost hledání koncového spínače, ale o pomalejší dojetí po jeho nalezení.

$25 – Homing seek

Výchozí hodnota je 500.000 mm/min. Touto rychlostí se stroj pokouší najít koncový spínač při referování.

$26 – Homing debounce

Výchozí hodnota je 250 ms. Parametr definuje ochranu proti zákmitu mechanického spínače. Běžně stačí nastavit přibližně 10 až 30 ms. Mechanický spínač při sepnutí krátce zakmitá a procesor by mohl tyto přechody vyhodnotit jako více sepnutí za sebou.

$27 – Homing pull-off

Výchozí hodnota je 1.000 mm. Používá se v případě, kdy jsou stejné spínače použity jako referenční i koncové. Po nalezení reference osa od spínače o zadanou vzdálenost odjede, aby se předešlo náhodnému vyvolání limitního spínače.

$100, $101 a $102 – kroky na milimetr pro osy X, Y a Z

Výchozí hodnota v ukázce je 250.000 steps/mm. Toto je jeden z nejdůležitějších parametrů. Zadává počet kroků motoru na 1 mm posuvu dané osy. Hodnota se počítá z mikrokrokování driveru, počtu kroků motoru na otáčku a stoupání šroubu, jak bylo popsáno výše.

$110, $111 a $112 – maximální rychlost os X, Y a Z

Výchozí hodnota v ukázce je 500.000 mm/min. Parametr určuje maximální rychlost jednotlivých os. Hodnota musí odpovídat mechanice stroje, použitým motorům, driverům a napájení.

$120, $121 a $122 – akcelerace os X, Y a Z

Výchozí hodnota v ukázce je 10.000 mm/sec². Čím větší číslo, tím rychleji osa akceleruje. Ideální je otestovat každou osu zvlášť, zjistit spolehlivou hodnotu a následně ji o 10 až 20 procent snížit jako rezervu.

$130, $131 a $132 – maximální pracovní rozsah os X, Y a Z

Výchozí hodnota v ukázce je 200 mm. Parametr definuje softwarové koncové polohy, tedy pracovní prostor stroje. Aby správně fungoval, musí být zapnuté referování stroje a správně nastavené hodnoty pro jednotlivé osy.

Tímto jsou probrány nejdůležitější parametry firmware. Popis berte jako praktický úvod, ne jako náhradu kompletní dokumentace. Veškeré nastavení je vhodné ověřit také v oficiální dokumentaci Configuring GRBL. Hodnoty uvedené v článku jsou výchozí nebo ukázkové a nemusí zaručit správnou funkci konkrétního stroje. Vždy je nutné provést korekce podle mechaniky, elektroniky a požadovaného chování vašeho stroje.

Dokumentace

K dispozici je PDF verze původního návodu a diskuse k článku.

Zajímavé odkazy