CNC jednoduše – 3. část: Konfigurační příkazy Grbl v0.8

Program Grbl má pro uživatelské nastavení parametrů k dispozici soubor příkazů, začínajících znakem dolaru ($).

Poznámka autora: Tento český překlad manuálu programu Grbl vzniká za pochodu jako kompilace z několika různých zdrojů. Budu vám velmi vděčen za odhalení všech chyb a nepřesností, kterých jsem se dopustil a to jak nepřesností faktických, tak v názvosloví.


Ke Grbl se můžete připojit pomocí libovolného sériového terminálu komunikační rychlostí 9600 Bd, (pokud jste tuto rychlost nezměnili v souboru config.h). Formát dat nastavte na na 8-N-1 (8-bitů, bez parity a 1 stop bit).

Pokud spojení proběhne úspěšně, Grbl vypíše toto úvodní hlášení:

Grbl 0.8c [‚$‘ for help]

Napište znak $ a stiskněte klávesu Enter. Grbl odpoví touto zprávou:

$$ (view Grbl settings)

$# (view # parameters)

$G (view parser state)

$N (view startup blocks)

$x=value (save Grbl setting)

$Nx=line (save startup block)

$C (check gcode mode)

$X (kill alarm lock)

$H (run homing cycle)

~ (cycle start)

! (feed hold)

? (current status)

ctrl-x (reset Grbl)

První čtyři z těchto příkazů jsou konfigurační [$$, $x = value, $N, $Nx = line], zatímco zbytek jsou systémové příkazy, které buď hlásí aktuální stav Grbl, nebo upravují jeho vlastnosti.

$$, $x=val, $N, $Nx=line

$$           – zobraz nastavení
$x=val    – ulož aktuální nastavení

Napište do okna terminálu $$ a příkaz odešlete. Grbl vypíše seznam aktuálního nastavení systému, podobně, jak je uvedeno v následujícím textu.

$0=755.906 (x, step/mm)

$1=755.906 (y, step/mm)

$2=755.906 (z, step/mm)

$3=30 (step pulse, usec)

$4=500.000 (default feed, mm/min)

$5=500.000 (default seek, mm/min)

$6=28 (step port invert mask, int:00011100)

$7=25 (step idle delay, msec)

$8=50.000 (acceleration, mm/sec^2)

$9=0.050 (junction deviation, mm)

$10=0.100 (arc, mm/segment)

$11=25 (n-arc correction, int)

$12=3 (n-decimals, int)

$13=0 (report inches, bool)

$14=1 (auto start, bool)

$15=0 (invert step enable, bool)

$16=0 (hard limits, bool)

$17=0 (homing cycle, bool)

$18=0 (homing dir invert mask, int:00000000)

$19=25.000 (homing feed, mm/min)

$20=250.000 (homing seek, mm/min)

$21=100 (homing debounce, msec)

$22=1.000 (homing pull‑off, mm)

Všechny údaje jsou zapsány do paměti EEPROM, takže jejich hodnoty zůstanou uloženy i po vypnutí napájení.

Chcete-li například změnit délku pulsu STEP z 30 na 10 μs, zadejte příkaz:

$3=10

Pokud komunikace proběhne bezchybně, Grbl odpoví ok a uloží všechna nastavení do paměti EEPROM, v níž zůstanou uložena až do další změny. Povelem $$ můžete opět zkontrolovat aktuální systémová nastavení Grbl.

$N – zobrazení spouštěcího bloku
$Nx=line – uložení spouštěcího bloku

$Nx jsou spouštěcí bloky, tedy řada G‑kódů, které se v Grbl spustí po každém zapnutí nebo resetu Grbl. V současné době jsou v Grbl připraveny dva bloky G‑kódů pro výchozí nastavení systému, ale úpravou konfiguračního souboru config.h a jeho opětovným zkompilováním můžete těchto bloků vytvořit až pět.

Napište do okna terminálu příkaz $N a odešlete. Grbl zareaguje krátkou zprávou, například:

$N0=

$N1=

ok

Znamená to, že ve spouštěcích blocích $N0 a $N1 není uložen žádný G‑kód, který se má po startu spustit.

Chcete-li vytvořit spouštěcí blok, napište příkaz: $N0= následované blokem platných G‑kódů a odešlete. Grbl blok spustí a zkontroluje jeho správnost; je-li v pořádku odpoví ok, pokud ne, odpoví error.

Řekněme, že chcete do prvního spouštěcího bloku $N0 vložit G‑kód G54 (souřadný systém), G21 (nastavení jednotek na milimetry) a G17 (pracovní rovina x‑y).

Zadejte tedy $N0 = G21 G54 G17 a odešlete; Grbl odpoví ok. Pak můžete příkazem $N zkontrolovat, zda byl tento blok opravdu uložen do paměti; pokud ano, odpověď bude $N0=G21G54G17.

Jakmile budete mít spouštěcí blok uložen v EEPROM Grbl, po každém startu nebo resetu uvidíte výpis jeho obsahu ihned za úvodním hlášením. Pokud jste vložili spouštěcí blok podle předchozího příkladu, po startu uvidíte:

Grbl 0.8c [‚$‘ for help]

G21G54G17

ok

Pokud používáte více spouštěcích bloků, zobrazí se v úvodním výpisu pod sebou. Chcete-li některý z bloků vymazat, zapište do něj prázdný řetězec ($N0=).

Pokud je povolena inicializace stroje do výchozí pozice, budou bloky příkazů provedeny až po této inicializaci, nikoli ihned po spuštění programu.

Důležité: Buďte velmi opatrní při ukládání jakýchkoli příkazů pro ovládání pohybu (G0/1, G2/3, G28/30) do spouštěcích bloků. Tyto příkazy se provedou vždy po startu nebo resetu Grbl, takže pokud máte nouzový spínač připojen na reset, může spuštění takového bloku způsobit nechtěné kolize.

Grbl’s $x=val

$0, $1 and $2 – počet kroků motoru na mm pro osy X[$0], Y[$1], a Z[$2]

Do programu Grbl musíte zadat počet kroků pro posuv každé osy vašeho stroje o jeden mm. Pro výpočet počtu kroků / mm pro jednotlivé osy vašeho stroje musíte znát:

  • Posuv v mm na jednu otáčku pohybového mechanismu
  • Počet kroků, které vykoná váš krokový motor na jednu otáčku (typicky 200)
  • Nastavení mikrokrokování na vašem ovladači (typicky 1, 2, 4, 8, 16, 32, 64 nebo 128).

Použití zbytečně velkého počtu mikrokroků (např. 128) ale může snížit točivý moment krokového motoru.

Počet kroků motoru, potřebný pro jeden jeden milimetr posuvu osy vypočtete ze vzorce:

SPMM = (SPR * MS) / FPR

Kde:

SPMM               je hledaný počet kroků na milimetr posuvu osy

SPR                    je počet kroků na jednu otáčku motoru

MS                     je počet mikrokroků

FPR                    je posuv osy v milimetrech na jednu otáčku motoru

Vypočtěte tyto hodnoty pro každou osu zvlášť a zadejte je do Grbl.

$3 – délka pulsu STEP [mikrosekundy]

Ovladače krokových motorů potřebují pro správnou činnost jistou minimální délku pulsu signálu STEP. Tuto hodnotu naleznete v dokumentaci ovladače, nebo ji zjistíte experimentálně, čímž si zároveň prakticky ověříte minimální délku pulsu STEP, kterou je váš ovladač ještě schopen spolehlivě zpracovat.

Pokud nastavíte délku pulsů STEP zbytečně velkou, můžete se setkat s problémy při vyšších rychlostech posuvu.

Běžná délka pulsu STEP by se měla pohybovat v rozsahu 5 až 50 μs.

$4 – Rychloposuv [mm/min]

Tato volba umožňuje nastavit při inicializaci Grbl maximální rychlosti pro kód G0 (rychloposuv).

Rychloposuv slouží k pohybu mezi body A a B, obvykle pro co nejrychlejší přesun nástroje do pracovní polohy. Velikost této rychlosti by měla být nastavena tak, aby váš stroj spolehlivě pracoval všech osách pohybu.

Nastavení rychlosti rychloposuvu bude budoucích verzích Grbl aktualizováno tak, že uživatel bude moci zadat rychlost pohybu pro každou osu zvlášť.

$5 – Pracovní rychlost [mm/min]

Výchozí rychlosti pro pracovní posuv se obvykle nepoužívají – jejich hodnota je nastavována parametry povelů G‑kódu; pokud ale parametr chybí, Grbl  pro pohyb použije přednastavenou výchozí rychlost.

V budoucích verzích Grbl bude nastavení rychlosti pracovního posuvu zrušeno. Standardem G‑kódů je určeno, že pokud u povelů G1, G2, G3 chybí parametr rychlosti, nepoužívá se výchozí hodnota, ale hlásí se chyba „F“ – chybějící parametr rychlosti u daného příkazu.

$6 – Inverze signálů řídícího portu [int:binary]

Směr otáčení motoru (signál DIR) je určen logickou úrovní L nebo H na příslušném pinu, požadavek na krok (signál STEP) je představován krátkým pulsem logické úrovně H. Pokud některé ovladače krokových motorů potřebují pro vstupy STEP nebo DIR opačnou polaritu řídících signálů, lze toho dosáhnout inverzí vybraných signálů přímo v Grbl.

Na signály DIR a STEP je aplikována operace XOR s maskou, která je parametrem příkazu $6 a výsledná hodnota je odeslána na výstupní port. Zjednodušeně řečeno, kde je v masce jednička, tam je příslušný signál invertován, kde je nula, zachovává se původní logická úroveň. Bity v masce odpovídají pinům přiřazeným v config.h jednotlivým krokovým motorům. Všimněte si, že bity 0 a 1 se nikdy neinvertují. Ve výchozím stavu jsou bity přiřazeny takto:

#define X_STEP_BIT 2

#define Y_STEP_BIT 3

#define Z_STEP_BIT 4

#define X_DIRECTION_BIT 5

#define Y_DIRECTION_BIT 6

#define Z_DIRECTION_BIT 7

Ve výchozím stavu je maska 00000000, tj. v desítkovém formátu také 0.

Pokud byste chtěli změnit směr pohybu os X a Y, změňte nastavení masky na 11000000, což se rovná 96 (k převodu z binární hodnoty na dekadickou použijte kalkulačku), takže formát příkazu pro obrácení směru pohybu os X a Y je:

$6=96

Když si nyní zobrazíte aktuální nastavení, měli byste vidět hodnotu masky v souladu s binární reprezentaci čísla (bity 5 a 6 by nyní měl vypsat 1 tak, aby indikoval inverzi.)

$6=96 (step port invert mask. int:110000)

$7 – Prodleva před odpojením buzení motorů po vykonaném posledním kroku, [ms]

Grbl může odpojit buzení krokových motorů po každém dokončeném pohybu. Povelem $7 nastavíme délku délka prodlevy mezi posledním krokem motoru a odpojením buzení motorů. Pokud žádnou prodlevu mezi posledním krokem motoru a vypnutím nevyžadujete, nastavte hodnotu $7=0. Většinou je ale nutné nastavit prodlevu 25 až 50 milisekund, během níž odezní mechanické kmity stroje, a není již nutné je tlumit.

Všechny osy můžete také ponechat trvale aktivní nastavením $7=255.

 $8 – Zrychlení [mm/s2]

Tímto parametrem nastavujete zrychlení v jednotkách mm/sec2. Postačí, když budeme vědět, že nižší hodnota parametru znamená menší zrychlení, zatímco vyšší hodnota zrychlení větší. Čím větší je hodnota zrychlení, tím rychleji dosáhneme požadované rychlosti posuvu, ale tím je také větší nebezpečí ztráty kroku motoru. Nastavte proto hodnotu zrychlení experimentálně tak, aby u žádné z os ke ztrátám kroků zaručeně nedocházelo.

Nastavte tento parametr s dostatečnou rezervou, protože když dojde ke ztrátě kroků, Grbl to nemůže nijak zjistit, protože krokové motory nemají zpětnou vazbu a bude pokračovat v další práci s chybou.

$9 – Junction deviation [mm]

Parametr zpomalení při změně směru se používá při výpočtech zrychlení. Určuje, jak rychlý může být pohyb po zakřivené (lomené) dráze. Matematický výpočet parametru je v tomto případě trochu komplikovanější, ale obecně vyšší hodnota dává rychlejší, případně až trhavý pohyb. Při nižších hodnotách parametru bude pohyb hladší, ale pomalejší.

$10 – Oblouk [mm/segment]

Grbl skládá kružnice a oblouky z mnoha krátkých přímek (segmentů), napojených na sebe pod určitým úhlem. Délku těchto segmentů pravděpodobně nebude nutno měnit, ale pokud se vám zdá, že kruhy jsou příliš nepravidelné (hranaté), zkuste zmenšit hodnotu tohoto parametru. Nižší hodnoty sice zvyšují přesnost, ale zároveň mohou nastat problémy s výkonem motorů.

$11 – Počet nekorigovaných segmentů oblouku [int]

Jedná se o pokročilé nastavení, jehož hodnota by měla být měněna jen ve zvláštních případech. Příkazy G02/03 (kruhová interpolace) provádí Grbl tak, že směr počátečních segmentů vypočítá přibližnou metodou a teprve po několika krocích použije přesný, ovšem výpočetně náročný postup. N-arc korekce je počet segmentů oblouku, jejichž směr je určen jen přibližně předtím, než Grbl vypočítá přesný segment oblouku ke korekci chyby přibližných výpočtů. Tento parametr je třeba upravit pouze v některých extrémních případech, jako jsou oblouky s malým poloměrem a velkou délkou kroku obloukového segmentu.

Nastavení změňte pouze v případě, že skutečně máte problémy s oblouky; nedoporučuje se ale hodnotu snižovat pod 3, protože to může vést k podtečení vyrovnávací paměti a tím ke zpomalenému a trhavému pohybu.

$12 – Počet desetinných míst [int]

Určuje, kolik míst za desetinnou čárkou Grbl zobrazuje ve zprávách.

$13 – Formát zprávy, přepínání jednotek mm / palce [bool]

Grbl v0.8 zasílá v reálném čase zprávy o okamžité poloze jednotlivých os stroje a poskytuje tak uživateli zpětnou vazbu.

Ve výchozím nastavení jsou délkové jednotky těchto zpáv nastaveny na mm, ale odesláním příkazu $13=1 můžete formát jednotek změnit na palce (inch). Příkazem $13=0 změníte formát zpět na mm.

$14 – Automatický start [bool]

Povoluje nebo zakazuje automatický start zaslaných příkazů. Profesionální stroje pracují tak, že načtou celý program a spustí jej teprve po stisku tlačítka Start cyklu. Grbl umožňuje totéž, ale nikoli ve výchozím nastavení. Při výuce a ladění programů je výhodnější, když se každý příkaz k pohybu začne provádět okamžitě po přijetí. To usnadňuje pochopení funkce příkazů a ladění stroje řízeného Grbl. V opačném případě by bylo nutné neustále používat tlačítko „Start cyklu“, kdykoli byste chtěli spustit pohyb.

Jakmile se seznámíte se svým strojem a získáte praxi v používání G‑kódu, můžete automatický start pohybu zakázat zasláním příkazu $14=0. Pro akceptování této změny je nutné Arduino restartovat.

$15 – Inverze výstupu enable [bool]

V obvyklém případě má vstup enable na driveru krokového motoru aktivní úroveň H (vypne motor při vysoké úrovni). Pokud váš driver potřebuje opačné logické úrovně, invertujte funkci vstupu enable zadáním $15=1. Původní funkci obnovíte příkazem $15=0. Pro akceptování změny je nutné Arduino restartovat.

$16 – Koncové spínače [bool]

Koncové spínače mají bezpečnostní funkci, která zabraňuje poškození stroje při přejetí koncové polohy. Tyto spínače – mechanické, optické nebo indukční – musí být umístěny na koncích všech os. Jakmile je kterýkoli z těchto spínačů sepnut, zastaví se okamžitě veškerý pohyb stroje, uzavře se přívod chladicí kapaliny a vypne se vřeteno (pokud je jeho ovládání připojeno na Grbl). Grbl přejde do nouzového režimu, aby umožnil  kontrolu stroje a odstranění závady.

Jako koncové spínače se většinou používají běžné mikrospínače se spínacím kontaktem. K Arduinu se připojují k odpovídajícím pinům a GND. Na těchto pinech je již aktivován pull‑up rezistor. Funkci koncových spínačů aktivujeme příkazem $16=1, zakážeme je příkazem $16=0. Koncové spínače obou konců jedné osy připojte paralelně k odpovídajícímu pinu Arduina.

Sepnutí koncového spínače je považováno za chybu, krokové motory se okamžitě zastaví a pravděpodobně přitom dojde ke ztrátě kroků. Grbl přejde do nekonečné smyčky režimu ALARM, která vám dá možnost zkontrolovat stroj a přinutí vás Grbl resetovat. Uvědomte si, že se jedná o bezpečnostní prvek.

Pokud koncové spínače po resetu neustále aktivují režim ALARM, protože stroj stojí v nevhodné pozici a některé z nich jsou dosud sepnuté, můžete funkci koncových spínačů zakázat příkazem $16=0 a příkazem $X alarm vypnout.

Druhou možností je zapojení rozpínacího tlačitka do série se zemí (GND) všech koncových spínačů a jeho stiskem tyto spínače dočasně odpojit, takže je možno spustit příkazy, potřebné k mechanickému uvolnění aktivovaných koncových spínačů.

$17 – Naváděcí cyklus [bool]

Naváděcí cyklus se používá pro přesnou lokalizaci referenční pozice stroje (home position) pokaždé, když Grbl spouští nový pracovní cyklus. Možnost opakovaného nastavení přesné referenční pozice stroje je velmi důležitá v případě, že došlo při práci stroje k nějakým problémům, například ke ztrátě kroku nebo k výpadku napájení a stroj tak ztratil svou aktuální pozici. Tuto pozici můžete obnovit opětovným spuštěním naváděcího cyklu a pak pokračovat v práci.

Koncové spínače, které používáte zároveň jako spínače referenční, musíte je mít velmi dobře upevněny, protože pokud se spínač při sepnutí pohne nebo posune (třeba jen nepatrným propružením držáku) bude se nastavení výchozí pozice pokaždé lišit.

Referenční spínače, určující výchozí pozici, jsou obvykle umístěny v nejvzdálenějších bodech os +X, +Y, +Z.

Po spuštění naváděcího cyklu Grbl nejprve zdvihne osu Z do nejvyšší možné polohy, dané konstrukcí stroje, aby předešel možné kolizi nástroje s překážkami na pracovní ploše a a teprve potom začne pohybovat i osami X a Y v kladném směru.

Potřebujete-li upravit chování naváděcího cyklu, použijte výše popsaná nastavení, nebo vlastnosti cyklu upravte v konfiguračním souboru a pak program Grbl znovu zkompilujte.

Před dokončením naváděcího cyklu jsou všechny pracovní osy uzamčeny a nemohou pohybovat. Jak bude vysvětleno dále, toto uzamčení je možno v případě nutnosti zrušit příkazem $X. Toto uzamčení má bezpečnostní funkci, která zabrání neúmyslným kolizím.

Poznámka: V souboru config.h má pokročilý uživatel mnoho možností ke změně vlastností naváděcího cyklu Grbl. Můžete v něm například trvale vypnout blokování pohybu před provedením naváděcího cyklu, nastavit pořadí a směr pohybu jednotlivých os a mnoho dalšího.

$18 – Inverze směru pohybu při naváděcím cyklu [int:binary]

Ve výchozím nastavení program Grbl předpokládá, že referenční spínače, označující výchozí polohu, jsou umístěny na kladném konci jednotlivých os.

Pokud musí mít váš stroj referenční spínače umístěné na opačném konci os, může se směr pohybu os při naváděcím cyklu invertovat stejně, jako se invertují pulsy STEP a DIR, tedy tím, že piny, které chcete invertovat, nastavíte maskou v parametru příkazu $18  na hodnotu log. 1.

$19 – Rychlost přesného nastavení referenční pozice [mm/min]

Při naváděcím cyklu nejprve vyhledává svou referenční pozici osa Z, teprve potom následují osy X a Y současně kladným směrem, až do okamžiku sepnutí referenčního spínače. Pak se každá osa začne pohybovat pomalu zpět a přesná poloha referenčního bodu je určena okamžikem rozpojením spínače.

Příkazem $19 se nastavuje rychlost tohoto zpětného posuvu. Zvolte ji tak, aby byl výchozí bod každé z os lokalizován s nejvyšší možnou přesností.

$20 – Rychlost posuvu při naváděcím cyklu [mm/min]

Touto rychlostí se budou pohybovat osy při vyhledávání referenčních spínačů. Rychlost nastavte co nejvyšší, ale takovou, aby při nájezdu na referenční spínače nedošlo k jejich deformaci nebo dokonce poškození.

Protože při vyhledávání referenčních spínačů nepotřebují být osy mezi sebou závislé, může se každá z nich pohybovat maximální rychlostí, což znamená, přibližně o 41% rychleji, než při přesunu příkazem G1.

Pokud by ovšem tato vlastnost byla na překážku, můžete ji změnit v konfiguračním souboru config.h.

$21 – Potlačení zákmitů kontaktů referenčních spínačů [ms]

Po sepnutí spínače s mechanickými kontakty vždy dochází po dobu několika milisekund k odskokům a zákmitům těchto kontaktů a přitom dochází k rychlému opakovanému sepnutí a rozpojení. Tento problém je možno odstranit použitím některého z obvodů pro úpravu signálu nebo ošetřením této vlastnosti v programu.

Program Grbl pro potlačení zákmitů kontaktu vkládá před zahájení zpětného pohybu při vyhledávání referenční pozice krátkou prodlevu. Nastavte délku trvání této prodlevy takovou, aby zaručeně odezněly všechny zákmity vámi použitého spínače.

Ve většině případů vyhoví hodnota 5 až 25 milisekund.

$22 – Homing pull‑off [mm]

Protože jeden spínač je používán zároveň jako koncový i referenční, nesmí být jeho sepnutí při hledání refrenčních bodů vyhodnoceno zároveň jako sepnutí koncového spínače.

Tento příkaz nastavuje vzdálenost v mm, o kterou se musí osa po nalezení referenčního bodu posunout, než začne být spínač znovu aktivní jako koncový.