GRBL a použití funkce autosquare

Co je AUTOSQUARE? Jedná se o automatické “vyrovnání” počátků (HOME) dvou motorů použitých na posuv jedné osy CNC stroje. Auto square zajistí, že osa kolmá na osu se dvěma motory bude opravdu kolmá (tedy tak kolmá, jak dobře budou nastaveny koncové spínače).

CNC stroje mohou mít různé pohony jednotlivých os. Na našich strojích LUPA v3.3 a v3.5 používáme na delší ose dva motory. Je to kvůli jednoduššímu mechanickému řešení celé konstrukce. I když by se mohly motory jevit jako na sobě nezávislé, není tomu tak. Ovládací signály STEP a DIR mají společné. Používáme CNC Shield Protoneer v3.0, který umí ovládat 3 osy. Shield je osazen na Arduino UNO. Na shieldu jsou 4 sloty pro drivery X, Y, Z, A. Slot A nemá přivedeny vlastní ovládací signály STEP a DIR. Slot A umožňuje naklonování jednoho z ostatních slotů X, Y, Z. Naklonování se provádí zkratovacími propojkami. Jednoduše si zvolíte osu, kterou chcete naklonovat, a pomocí dvou propojek (jedna pro STEP, druhá pro DIR) na shieldu propojíte požadované piny. V této konfiguraci nelze autosquare použít, jednoduše proto, že ty dva motory na jedné ose nejsou ovládány samostatně.

GRBL nabízí nastavení pro využití autosquare, kdy jsou tyto dva motory na jedné ose ovládány samostatně. Funkci autosquare je vhodné použít u strojů se silnějšími motory a s posuvem os pomocí šroubů nebo pastorků na ozubených hřebenech. Na strojích se slabšími motory a posuvem os řemínky není funkce autosquare nutná.

Pro použití funkce autosquare je třeba GRBL nastavit. GRBL umožňuje v souboru config.h vybrat jeden ze dvou shieldů. 3.51 nebo Protoneer v3.0. I když by se mohlo zdát, že by bylo vhodnější vybrat přímo shield Protoneer v3.0, není tomu tak. Vhodnější je zvolit konfiguraci se shieldem 3.51 a upravit zapojení na shieldu Protoneer v3.0 pomocí drátových propojek. Při použití konfigurace pro Protoneer v3.0 totiž přijdete o možnost ovládat otáčky vřetene (PWM)! Pokud se vám nechce “drátovat” můžete použít přímo originál shieldu 3.51 ($14-15) jehož cena je výrazně vyšší než shieldu Protoneer v3.0 ($3). Na obrázku níže je doporučené nastavení v souboru config.h.

Použití GRBL s funkcí autosquare přináší oproti standardní verzi (bez autosquare) omezení. To je částečně zřejmě z popisu viz. obrázek výše. Jde o to, že Arduino UNO má omezený počet výstupů a pro ovládání dalšího motoru už není volný výstup. Musí se tak obětovat některá z funkcí standardního nastavení. V případě nastavení pro shield 3.51 je to možnost spínání vřetene. Níže najdete popis dvou variant nastavení. První jednodušší, to pokud se smíříte se skutečností, že přijdete o možnost spínání vřetene (funkce PWM zůstává zachována). Druhá s většími úpravami konfiguračních souborů, ale se zachováním spínání vřetene. U této varianty ale přijdete o možnost samostatně spínat chlazení. Holt něco za něco.

Ještě před popisem obou variant řešení video s demonstrací funkce autosquare na Youtube

1. jednodušší – úprava config.h

Pozor, v obou případech je v config.h potřeba vybrat nastavení pro desku 3.51 a nikoliv pro Protoneer v3.0, jak by se dalo očekávat. Na používané desce Protoneer v3.0 se musí druhý motor osy Y zapnout nikoli zkratovacími propojkami, ale musí se připojit na výstupy A4/A3 viz. obrázek.

Při kompilaci GRBL zřejmě vyskočí chyba u souboru report.c a to z důvodu chybějící závorky } v kódu. Je potřeba závorku na konci řádku 581 doplnit. Je ale možné, že chybová hláška nevyskočí.

Koncový spínač druhého motoru bude paralelně připojen ke spínači osy Z. Ostatní spínače zůstávají bez změn.
Při tomto nastavení není standardně k dispozici pin pro spínání relé vřetene (zapnutí / vypnutí). Na pin D13, kde byl původně výstup pro spínání vřetene (přesněji řečeno ovládání směru otáčení vřetene), je nyní přiveden výstup spínání chlazení. Takže pokud potřebujete spínat vřeteno, lze to udělat s využitím výstupu pro chlazení a s ručním dopsáním příkazů pro spuštění / vypnutí chlazení (M8 / M9) do G-kódu. Standardně se v G-kódu pro zapnutí / vypnutí vřetene používá M3 / M5 a tyto příkazy bývají generovány softwary použitými pro vytváření G-kódu.

2. složitější – úprava config.h, grbl.h, cpu_map.h

Toto nastavení zachová spínání vřetene na D13, ale přijdete o výstup pro spínání chlazení. Pozor, opět je v config.h potřeba vybrat nastavení pro desku 3.51 a ne Protoner v3.0. Zapojení je stejné jako v předchozím případě, jen na D13 bude spínání vřetene.

A teď to nejhorší, úprava všech souborů. Autorem úprav je Jakub Kraus.

Změny:

  • v config.h nastavit USE_SPINDLE_DIR_AS_ENABLE_PIN
  • v grbl.h vymazat chybovou hlášku “USE_SPINDLE_DIR_AS_ENABLE_PIN not supported with dual axis feature.”
  • v cpu_map.h:
    •  v části #ifdef DUAL_AXIS_CONFIG_PROTONEER_V3_51 nastavit

      #define COOLANT_FLOOD_DDR   DDRC   … původně DDRB

      #define COOLANT_FLOOD_PORT  PORTC   … původně PORTB

      #define COOLANT_FLOOD_BIT   7   … původně 5

… je to sice trochu prasárna protože bit 7 neexistuje, používat neexistující pin je v lepším případě nedefinované chování a v horším to něco rozbije            

  • v části #ifdef VARIABLE_SPINDLE nastavit

        #define SPINDLE_ENABLE_BIT    5   … původně 3

      #else

        #define SPINDLE_ENABLE_BIT    4

      #endif

Pokud se nechcete s úpravami souborů trápit, tak si je stáhněte zde a nahraďte jimi ty původní ve vaší instalaci GRBL. Velmi doporučuji zálohovat původní soubory.

Závěr

Popsané řešení nevystihuje kompletní zapojení elektroniky potřebné pro ovládání CNC stroje. Je věnováno jen a pouze funkci autosquare a to při použití samostatné desky Arduino UNO a shieldu Protoneer v3.0 resp. jeho kopie. Popsané řešení nemusí být kompatibilní s hotovými ovládacími deskami GRBL (grbl control boards).

Výše popsané platí pro standardní GRBL 1.1. Pokud se chcete zbavit omezení GRBL 1.1, tak přejděte na grblHAL. Veškeré úpravy děláte na vlastní nebezpečí! Neručíme za žádné škody vzniklé v souvislosti s realizací výše popsaných změn.