V Ustawienia GrblCzas napić się kawy bo będzie potrzebne trochę myślenia. Żeby dobrze skonfigurować maszynę musimy wiedzieć co możemy ustawić i jak poszczególne ustawienia mogą na nią wpłynąć. Inaczej będziemy ustawiali ploter wykorzystujący do przesuwu osi pręt gwintowany (szpilkę) załóżmy M8 a inaczej maszynę wyposażoną w paski zębate.
Tylko od Was zależy czy maszyna będzie szybka, cicha i dokładna czy wprost przeciwnie.
Po podłączeniu się do sterownika on zgłasza swoją gotowość przedstawiając się numerem wersji oprogramowania Grbl. Numer wersji jest dość istotny ponieważ od niego zależy jak całość będzie działać.
I teraz ciekawostka wersja 0.9a ma wszelkie ustawienia jeszcze z wersji 0.8.
Natomiast "prawdziwą" wersję 0.9g można znaleźć na:
https://github.com/grbl/grblUstawienia dla wersji 0.8Zaraz po podłączeniu dostaniemy numer wersji oprogramowania wgranego do Arduino, tutaj 0.9a:
Kod:
Grbl 0.9a ['$' for help]
a także po wpisaniu znaku dolara $ listę możliwych opcji do wpisania:
Kod:
Grbl 0.9a ['$' for help] - wyświetlenie tej pomocy
$$ (view Grbl settings) - wyświetl ustawienia GRBL
$# (view # parameters) - wyświetl pojedynczy parametr o numerze $# pod krzyżyk podstaw numer
$G (view parser state) - wyświetlenie wszystkich obługiwanych komend gcode'u ([G0 G54 G17 G21 G90 G94 M0 M5 M9 T0 F500.000])
$N (view startup blocks) - wyświetlenie bloków startowych, domyślnie zapisane 2 wartości, maksymalnie może być ich 5, grbl przetrzymuje tu komendy gcode, które są uruchamiane przy starcie systemu i ustawiają wartości domyślne. Po wgraniu oprogramowania są puste.
$x=value (save Grbl setting) - wpisanie i zapamiętanie ustawienia GRBL
$Nx=line (save startup block) - zapisanie bloków startowych, możemy tu wysłać np komendę $N0=G20 G54 G17
czyli ustawienie trybu parsera G54, tryb cali G20,oraz G17 XY-plane
$C (check gcode mode) - pozwala wgrać i uruchomić gcode, ale nie steruje napędami ani wrzecionem
$X (kill alarm lock) - usunięcie blokującego alarmu
$H (run homing cycle) - uruchomienie cyklu homing czyli powrót do wcześniej zapamiętanej pozycji domowej
~ (cycle start) - jeśli macie w opcjach ustawiony autostart nie będziecie używali tej opcji służy do ręcznego uruchomienia programu gcode
! (feed hold) - zatrzymanie w czasie rzeczywistym, nie gubimy więc programu i możemy wznowić działanie wpisując ~
? (current status) - zwróci stan maszyny orac koordynaty programu i maszyny, coś w stylu:
<Idle,MPos:5.529,0.560,7.000,WPos:1.529,-5.440,-0.000>
Możliwe statusy to: Idle, Queue, Run, Hold, Home, Alarm, Check
ctrl-x (reset Grbl) - programowy reset systemu, zalecany przed KAŻDYM URUCHOMIENIEM gcode
Wszystkie komendy wpisujemy w tym miejscu, potwierdzając enterem:
Załącznik:
komendy.jpg [ 268.73 KiB | Przeglądane 109340 razy ]
Pamiętajcie, że na tym etapie dalej nie musimy mieć podłączonych driverów ani silników - wystarczy goła płytka Arduino lub taka z podpiętym CNC SHield.
Wpisujemy $$, dostaniemy w odpowiedzi listę wszystkich ustawień:
Załącznik:
ustawienia_txt_08.jpg [ 51.05 KiB | Przeglądane 109340 razy ]
Pierwsze znaki opisują numer ustawienia, potem po znaku "=" mamy aktualnie przypisaną wartość dla tego ustawienia a w nawiasie opis słowny - żeby nie trzeba było pamiętać wszystkiego.
Wprowadzenie zmiany polega na wpisaniu numeru ustawienia i nowej wartości. Gdybyśmy więc chcieli zmienić ustawienie dotyczące ilości kroków na przesunięcie osi X o 1 mm, znajdujemy właściwy wpis:
Kod:
$0 = 0.000 (x steps/mm)
wpisujemy:
Kod:
$0 = 40.200
Pamiętajcie żeby zawsze wpisywać nowe wartości w formacie jaki dla danego pola obowiązuje, czyli w tym przypadku dodanie kropki i 3 zer. Po wysłaniu sterownik odpowie nam
'ok'
Jeśli ktoś nie lubi pisać może użyć interfejsu graficznego i tu wpisać potrzebne wartości:
Załącznik:
ustawienia_soft.jpg [ 59.74 KiB | Przeglądane 109340 razy ]
Po wpisaniu naciskamy Apply
W zależności od wersji oprogramowania (w tym przypadku 0.9a) ustawienia mogą być inne. Przypomnę że wersja 0.9a bazuje na ustawieniach 0.8.Pełna lista dla tej wersji to:
Kod:
$0 = 40.200 (steps/mm x)
$1 = 40.200 (steps/mm y)
$2 = 320.000 (steps/mm z)
$3 = 30 (microseconds step pulse)
$4 = 500.000 (mm/min default feed rate)
$5 = 500.000 (mm/min default seek rate)
$6 = 0 (step port invert mask. int = 00000000)
$7 = 255 (step idle delay, msec)
$8 = 25.000 (acceleration in 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 = (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)
OPIS kolejnych ustawień$0, $1 i $2 – [X,Y,Z] steps/mmIlość kroków silnika na mm. GRBL musi wiedzieć ile kroków musi wysłać do sterownika żeby w rzeczywistości przemieścić daną oś o 1mm. Liczymy więc:
- musimy znać ilość kroków na 1 pełny obrót przy sterowaniu pełnokrokowym nazwijmy to jak reszta świata: "steps_per_revolution"
- musimy wiedzieć jak sterujemy naszym silnikiem (przypomnę zworki M0,M1,M2) pełnokrokowo, półkrokowo, itd podstawiamy: 1, 2, 4, 8, lub 16 dla "microsteps"
- ilość mm przejechanych przez oś w czasie 1 obrotu silnika - "mm_per_rev"
Podstawiamy do wzoru:
steps_per_mm = (steps_per_revolution*microsteps)/mm_per_revTo co nam wyjdzie wstawiamy do ustawień:
$0 dla osi X,
$1 dla osi Y,
$2 dla osi Z.
Powyższe łatwiej się liczy dla śrub metrycznych (szpilek) - dla przykładu gwint M8 i M9 ma skok 1,25
weźmy do tego silnik ustawiony na półkrok (2) który normalnie robi 200 kroków na 1 obrót:
(2 microsteps/step) x (200 steps/motor_rev) x (1 motor_rev/screw_turn) / (1.25 mm/screw_turn) = 320 microsteps/mm
wpisujemy 320 i gotowe

Teraz możemy tjuningować (śruby nie zmieniamy bo już kupiliśmy), a reszta:
200-step-per-rev motor, full stepping: 160 microsteps/mm
200-step-per-rev motor, half stepping: 320 microsteps/mm
200-step-per-rev motor, 8x microstepping: 1280 microsteps/mm
200-step-per-rev motor, 16x microstepping: 2560 microsteps/mm
400-step-per-rev motor, full stepping: 320 microsteps/mm
400-step-per-rev motor, half stepping: 640 microsteps/mm
400-step-per-rev motor, 8x microstepping: 2560 microsteps/mm
400-step-per-rev motor, 16x microstepping: 5120 microsteps/mm
Spore różnice, prawda?
Dla paskowców (napęd osi to pasek zębaty i rolka zębata) i do tego jest kalkulator:
http://homepage.ntlworld.com/r.j.noble/ ... /grblcalc/$3 - (microseconds step pulse)Każdy silnik krokowy może przyjąć jakąś minimalną długość impulsu dla kroku w mikrosekundach. Szczęśliwcy będą mieli to podane w nocie katalogowej silnika, inni muszą znaleźć eksperymentalnie. Zaczynamy od 10. Za długie mogą spowodować nachodzenie ich na siebie. Zazwyczaj sprawdza się liczba z przedziału 5-50.
$4 (mm/min default feed rate), $5 (mm/min default seek rate)Dwie zmienne, które mówią o prędkości przesuwu w mm na minutę. Normalnie wysyłamy tą informację w kodzie do cięcia (g-code) Jednak nie wszystkie programy CAM ją ustawiają. Stąd GRBL ma ustawiony te dwie prędkości jako domyślne.
seek to komenda - G0
feed to komendy - G1,G2,G3
Seek ($5) powinien być ustawiony na maksymalną możliwą prędkość maszyny gdyż jest używany na podróż narzędzie gdy nie pracuje => skok do następnego punktu
Feed ($4) jest prawie zawsze wysyłany przez programy typu CAM, więc rzadko używamy ten z konfiguracji często ustawiany też na maksymalną prędkość lub nieco mniejszą niż dla seek.
$4 = 500.000
$5 = 500.000
Niektórzy ustawiają je na tą samą wartość.
UWAGA! W kolejnych wersjach konfiguracji domyślny "feed rate" zostanie usunięty na rzecz sterowania nim z gcode.$6 (step port invert mask. int = 00000000)Odwrócenie sygnału kroku (step) dla wszystkich osi. Jeden z zaawansowanych paramaterów używany gdy nasze sterowniki (drivery) silników tego potrzebują lub dla małego oszustwa wprowadzającego sztuczną zwłokę pomiędzy wysłaniem 2 komunikatów STEP i DIR.
Normalnie sygnały są wysyłane jako wysoki lub niski dla kierunku (DIR) a następnie wysoki opadający na niski w ciągu kilku mikrosekund dla sygnału kroku.
Wartości wprowadzamy jako liczbą dzisiętną na podstawie tabelki, z której program tłumaczy sobie to na zapis dwójkowy.
X_STEP_BIT 2
Y_STEP_BIT 3
Z_STEP_BIT 4
X_DIRECTION_BIT 5
Y_DIRECTION_BIT 6
Z_DIRECTION_BIT 7
Jeśli więc chcemy odwrócić kierunek (DIRECTION) dla X i Y musimy wykonać przesunięcie bitowe:
(1<<X_DIRECTION_BIT)|(1<<Y_DIRECTION_BIT)
czego wynikiem jest 96
i taką liczbę wpisujemy:
$6=96
co da nam 1 na bitach 5 i 6:
$6=96 (step port invert mask. int:1100000)
$7 (step idle delay, msec)Po każdym wykonanym kroku silnik ma okres zatrzymania - w tym czasie możemy utrzymywać jego stan jako włączony (enable) lub wyłączony (disable). Ta zmienna ustawia blokadę na silnik, może przyjmować 3 stany:
$7=255 silniki zawsze włączone (enable)
$7=0 silniki zawsze wyłączone (disable)
$7=1 do $7=244 czas w mikrosekundach dla silnika po każdym kroku na dokończenie zatrzymania.
Wszystko zależy więc od silników które macie, są takie które w czasie ciągłego włączenia/wyłączenia pogubia kroki, są takie które muszą to mieć ustawione na np 25-50 a są takie które muszą być cały czas włączone lub będą pracowały bez względu na to co tu wpiszecie. Czyli wpisujemy, testujemy, wpisujemy, testujemy, wpis.....
$8 (acceleration in mm/sec^2)Przyspieszenie.
http://pl.wikipedia.org/wiki/Przyspieszenie
"Normalnie" w fizyce w układzie Si opisujemy je jako metr na seukndę do kwadratu. Tutaj jest to milimetr na sekundę do kwadratu.

Składnik określa maksymalne możliwe przyspieszenie dla wszystkich osi maszyny. Jest więc dość ważny gdyż on niego między innymi będzie zależało ile rozkazów popłynie do silników w określonym czasie.
Dla przykładu jeśli mamy silnik 200 kroków na obrót, ustawiony na mikrokroki 1/16, podłączony do szpilki M8 (skok 1,25) da nam to 2560 kroków na przesunięcie o 1mm.
Jest fajny kalkulator na samym końcu strony który pokaże czy i jak długo utrzymacie swoją spodziewaną prędkość
http://www.prusaprinters.org/calculator/wpiszcie np 300 w Acceleration
200 w Distance or axis length
150 w Desired speed
Oznacza to, że maszyna z przyspieszeniem 300 mm/sec^2 osiągnie spodziewaną prędkość po przejechaniu 37,5mm, jednak nie osiągnie maksymalnego pułapu prędkości gdyż przy ok 250 mm/sec^2 (i dystansie przebytym 100mm) zacznie hamować osiągając koniec naszej spodziewanej prędkości przy 162,5mm
Czyli krótkie maszyny będą przyspieszać żeby po chwili hamować. Większe maszyny będą mogły pracować szybciej i mniej obciążać silniki.
$9 = 0.050 (junction deviation, mm)Wartość wykorzystywana przez algorytm zarządzający prędkością w czasie pokonywania zakrętów. Dla wymagających można sobie poczytać o całej podstawie matematycznej:
https://onehossshay.wordpress.com/2011/09/24/improving_grbl_cornering_algorithm/Reszta może zacząć od 0.05. Jeśli w zakrętach maszyna ma problemy zmniejszamy tę liczbę, jeśli pracuje za wolno ale widać, że mogłaby szybciej zwiększamy.
Większa liczba oznacza większą prędkość.
$10 = 0.100 (arc, mm/segment)W większości przypadków nie musimy tu nic ruszać. Wartość wykorzystywana przy wycinaniu kół i łuków ponieważ grbl tnie je na malutkie proste kawałeczki.
Jeśli więc Twoje kółko lub łuk jest zbyt "surowe" i wygląda jak pocięte siekierką a nie zaawansowaną maszyną można się pokusić o zmianę.
Mniejsza liczba = większa precyzja ale też mniejsza prędkość.
$11 = 25 (n-arc correction, int)Kolejny zaawansowany punkt. W 999999 przypadkach na milion nie warto jej ruszać. Postało żeby było możliwe stosowanie kodów dla łuków G02/03. GRBL oblicza w przybliżeniu położenie następnego segmentu za pomocą kolejnych N-łuków i ich mniejszych kątów. Im więcej wpiszemy tym więcej liczenia ma program. Domyślne wartości są dobre. Aksjomat taki.
$12 = 3 (n-decimals, int)Mówi z jaką precyzją GRBL pokazuje liczby zmienno przecinkowe, tu ustawione na 3 miejsca. Raczej nie ruszamy.
$13 = 0 (report inches, bool)W jakich jednostkach pracuje grbl 0 to milimetry, 1 to cale. Domyślnie pracuje w milimetrach.
$14 = 1 (auto start, bool)Autostart. Profesjonalne maszyny mają swój przycisk, który uruchamia ich pracę. Grbl też może mieć ale niedomyślnie. Domyślnie sam się uruchamia jeśli tylk o mamy dla niego dane - więc nie potrzebuje też fizycznych przycisków. Jeśli więc zdecydujecie się na takie profesjonalne sterowanie jak w dużych maszynach doróbcie przycisk "cycle" oraz "feed-hold" i zmieńcie wartość tego pola na 0.
$15 = 0 (invert step enable, bool)Zachowanie pinu enable. Domyślnie low = enable a high = disable jeśli ze względu na sterowniki silników potrzebujecie na odwrót wpisujecie tu 1.
$16 = 0 (hard limits, bool)Bezpieczeństwo. Ten przełącznik włącza używanie krańcówek. Domyślnie jak widzicie ma je wyłączone jeśli więc chcecie je stosować trzeba tu wtawić 1. Zwarcie dowolnej krańcówki spowoduje natychmiastowe wyłaczenie wszystkich osi, wrzeciona oraz chłodzenia wrzeciona (jeśli ktoś go używa). Po takim zatrzymaniu maszyna jest w ciemnym lesie i raczej nie będzie możliwe ponowne wystartowanie gdyż część kroków z pewnością bezpowrotnie utraciliśmy.
$17 = 0 (homing cycle, bool)Są dwa typy krańcówek. Jedne dla opcji homing drugie dla "hard limits" W sumie może być ich 6. Na osi X 2 szt, na Y 2szt i na Z 2szt. Krańcówki dla homing montujemy w najdalszym możliwym położeniu dla wartości +X, +Y i +Z.
Z kolei krańcówki "hard limits" montujemy w najdalszym skrajnym położeniu dla wartości -X, -Y i -Z.
Wartość 1 oznacza włączoną funkcję homing. Od teraz wystarczy wysłać maszynę do domu - homing i ona już sobie go znajdziec, co ważne zawsze w tym samym miejscu.
$18 = (homing dir invert mask, int:00000000)Domyślnym ustawieniem jest położenie domu w części dodatniej koordynatów maszyny czyli +X, +Y i +Z co z kolei oznacza, że najpierw oś Z zostanie skierowana do swojego dodatniego końca a następnie X i Y. Jeśli chcemy żeby krańcówki zamieniły się miejscami (hard limits na homing) odwracamy je podobnie jak ustawienie
$6 $19 = 25.000 (homing feed, mm/min)Prędkość dla posuwu homing w celu znalezienia krańcówki "limit" i ustawieniu maszyny na 0. Najpierw wykorzystuje się następne ustwienie homing seek a po znalezieniu krańcówki w celu dokłądnego ustawienia homing feed.
Zazwyczaj feed($4) jest ustawiany mniejszy od seek($5). Program najpierw steruje w kierunku początku układu właśnie z prędkością seek($5) a następnie po znalezieniu krańcówki zwalnia do prędkości feed($4) dojeżdżając do zera (0,0)
$20 = 250.000 (homing seek, mm/min)Może być ustawiony szybszy niż nasza najwyższa prędkość dla G1
$21 = 100 (homing debounce, msec)Czas zwłoki dla ustania drgania styków wszystkich krańcówek, zazwyczaj ustawiany na 5-25. Dla żądnych teorii co to jest, polecam świetny artykuł:
http://mikrokontrolery.blogspot.com/2011/04/przycisk-drgania-stykow-debouncing.html$22 = 1.000 (homing pull-off, mm)Ile mm poza zadziałanie krańcówki dla homingu wyjedzie maszyna żeby znaleźć punkt 0, od zadziałania krańcówki do tego miejsca użyje prędkości z punku
$19Wszystkie ustawienia $$ są trzymane w EEPROM więc nie utracicie ich po odłączeniu zasilania.
c.d.n.