CNDY Shield GRBL CNC Arduino UNO Podręcznik użytkownika
V1.2

Pinout GRBL na Arduino Uno
Analogowy 0 = przycisk przerwania*
Analog 1 = Przycisk wstrzymania posuwu* (SAFETY_DOOR jest współdzielony z funkcją wstrzymania posuwu. Włączane przez zdefiniowanie konfiguracji)
Analogowy 2 = Przycisk Start/Restart cyklu*
Analogowy 3 = Wyjście włączenia chłodziwa
Analogowy 4 = (Fakultatywny) Wyjście chłodziwa mgły (lub lampka diagnostyczna ALARM_STATE**)
Analog 5 = Wejście sondy*
Cyfrowy 13 = Kierunek wrzeciona
Cyfrowy 12 = Wyłączniki krańcowe Oś Z*
Cyfrowy 11 = Wrzeciono / Laser Włącz PWM
Cyfrowy 10 = Wyłączniki krańcowe Oś Y*
Cyfrowy 9 = Wyłączniki krańcowe Oś X*
Cyfrowy 8 = silniki krokowe włączone / wyłączone
Cyfrowy 7 = Kierunek Oś Z
Cyfrowy 6 = Kierunek Oś Y
Cyfrowy 5 = Kierunek Oś X
Cyfrowy 4 = impuls krokowy oś Z
Cyfrowy 3 = impuls krokowy w osi Y
Cyfrowy 2 = impuls krokowy w osi X
Opcjonalna funkcja podwójnej osi
Uno Analog Pin 3 = Oś A PODWÓJNY_KIERUNEK (wcześniej był wyjściem włączenia chłodziwa)
Uno Analog Pin 4 = Oś A DUAL_STEP (kiedyś był opcjonalnym wyjściem chłodziwa mgłą)
Uno Digital 13 = Chłodziwo (zamiana kierunku wrzeciona.)
Po zainstalowaniu repozytorium grbl jako biblioteki w Arduino, odkomentuj następujące wiersze w config.h file w folderze biblioteki grbl.
#define ENABLE_DUAL_AXIS // Domyślnie wyłączone. Odkomentuj, aby włączyć.
// Wybierz jedną oś, aby odzwierciedlić inny silnik. Obecnie obsługiwane są tylko osie X i Y.
#zdefiniuj DUAL_AXIS_SELECT Y_AXIS // Musi być X_AXIS lub Y_AXIS
UWAGA: Limit dla dwóch osi jest współdzielony z (Oś Z) domyślnie pin ograniczający.
Funkcja podwójnej osi wymaga do działania niezależnego kołka impulsowego. Niezależny kołek kierunkowy nie jest absolutnie konieczny, ale ułatwia łatwe odwracanie kierunku z ustawieniem Grbl $$. Te kołki zastępują kierunek wrzeciona i opcjonalne kołki mgły chłodziwa.
Ta opcjonalna funkcja podwójnej osi służy przede wszystkim cyklowi bazowania do niezależnego lokalizowania dwóch stron suwnicy dwusilnikowej, tj. samoczynnego ustawiania pod kątem prostym. Wymaga to dodatkowego wyłącznika krańcowego dla sklonowanego silnika. Aby ustawić samoczynnie prostopadle, oba wyłączniki krańcowe na sklonowanej osi muszą być fizycznie ustawione w celu wyzwolenia, gdy suwnica jest kwadratowa. Zdecydowanie zalecam utrzymywanie silników zawsze włączonych, aby zapewnić, że suwnica pozostanie prostopadła przy ustawieniu 1 = 255 USD.
W przypadku Grbl na Arduino Uno, wyłącznik krańcowy sklonowanej osi musi być współdzielony i podłączony do pinu limitującego osi Z ze względu na brak dostępnych pinów. Cykl bazowania musi bazować oś z i sklonowaną oś w różnych cyklach, co jest już domyślną konfiguracją.
Funkcja podwójnej osi działa poprzez klonowanie wyjścia kroku osi na inną parę pinów kroku i kierunku. Impuls krokowy i kierunek sklonowanego silnika można ustawić niezależnie od silnika osi głównej. Jednak, aby zaoszczędzić cenną pamięć flash i pamięć, ta funkcja podwójnej osi musi mieć te same ustawienia (krok/mm, maksymalna prędkość, przyspieszenie) co silnik nadrzędny. NIE jest to cecha niezależnej czwartej osi. Tylko klon silnika.
OSTRZEŻENIE: Upewnij się, że przetestowałeś kierunki silników dwuosiowych! Muszą być ustawione tak, aby poruszały się w tym samym kierunku PRZED uruchomieniem pierwszego cyklu naprowadzania lub jakimkolwiek długim ruchem! Silniki poruszające się w przeciwnych kierunkach mogą spowodować poważne uszkodzenie maszyny! Korzystaj z tej funkcji podwójnej osi na własne ryzyko.
UWAGA: Ta funkcja wymaga około 400 bajtów pamięci flash. W niektórych konfiguracjach może zabraknąć pamięci flash, aby zmieścić się w Arduino 328p/Uno. Obsługiwane są tylko osie X i Y. Obsługiwany jest zmienny tryb wrzeciona/lasera, ale tylko dla jednej opcji konfiguracji. Rdzeń XY, kołek kierujący wrzecionem i chłodziwo mgłowe M7 są wyłączone/nieobsługiwane.
Aby zapobiec uszkodzeniu podwójnej osi przez cykl samonaprowadzania, gdy jedna granica wyzwala się przed drugą z powodu awarii przełącznika lub hałasu, cykl samonaprowadzania zostanie automatycznie przerwany, jeśli wyłącznik krańcowy drugiego silnika nie uruchomi się w ramach trzech parametrów odległości zdefiniowanych poniżej. Procent długości osi automatycznie obliczy odległość awaryjną jako procenttage maksymalnego przesuwu innej niepodwójnej osi, tj. jeśli wybrana oś dwuosiowa to X_AXIS przy 5.0%, wówczas odległość uszkodzenia zostanie obliczona jako 5.0% maksymalnego przesuwu osi y. Maksymalna i minimalna odległość awarii to limity określające, jak daleko lub jak mała jest prawidłowa odległość awarii.
#define DUAL_AXIS_HOMING_FAIL_AXIS_LENGTH_PERCENT 5.0 // liczba zmiennoprzecinkowa (procent)
#define DUAL_AXIS_HOMING_FAIL_DISTANCE_MAX 25.0 // Pływak (mm)
#define DUAL_AXIS_HOMING_FAIL_DISTANCE_MIN 2.5 // Float (mm)
Uwaga dotycząca portu I2C
Analog 4 (A4) i Analog 5 (A5) są używane dla portu I2C w Arduino Uno lub 328p. Oznacza to, że tak długo, jak używana jest domyślna funkcja sondy, mgiełka chłodziwa, dwuosiowa lub niestandardowa lampka diagnostyczna LED ALARM_STATE, korzystanie z I2C nie będzie możliwe. Komunikacja z innym Arduino w celu zwiększenia funkcjonalności będzie musiała odbywać się przez połączenie szeregowe na D0 i D1.
Rozpoczęcie pracy (sterowniki krokowe)
Po pierwsze, aby podłączyć silniki krokowe do Grbl, będziesz potrzebować sterowników silników krokowych do zasilania silników krokowych i podłączenia wejść sterownika do pinów kontrolera Arduino. Istnieje wiele sterowników, które mogą to zrobić, dostępne jako w pełni gotowe, częściowo gotowe lub całkowicie DIY. Sterowniki krokowe będą musiały dzielić się pin włączania krokowego (D8) do odpowiednich pinów zezwalających, podczas gdy kołki kierunkowe i impulsowe (D2-D7) będą musiały być podłączone do odpowiednich pinów na sterownikach. Tylko upewnij się, że wszystkie sterowniki i Arduino dzielić wspólną płaszczyznę (gwiazda uziemiona z mocą sterownika silnika). To wszystko, czego potrzebujesz, aby zacząć.
Bazowanie i wyłączniki krańcowe
Potem, gdy zdecydujesz, że jesteś gotowy lub chcesz aby włączyć bazowanie i/lub sztywne limity, musisz połączyć normalnie otwarty wyłącznik krańcowy do każdego z kołków granicznych (D9, D10 i D12). Homing i twarde limity używają tych samych przełączników. Te piny graniczne są już utrzymywane wysoko za pomocą wewnętrznego rezystora podciągającego, więc wszystko, co musisz zrobić, to podłączyć je do masy. Więc kiedy zamkniesz przełącznik, przełącznik pociągnie bolec krańcowy do masy. Jeśli chcesz mieć twarde wyłączniki krańcowe na obu końcach ruchu osi, po prostu podłącz dwa wyłączniki krańcowe równolegle do sworznia ograniczającego osi i uziemienia. Upewnij się, że masz zainstalowane przełączniki przed próbą wykonania cyklu bazowania i upewnij się, że ćwiczysz dobre metody okablowania, aby zminimalizować zewnętrzny szum elektryczny na stykach wejściowych.
Dobre praktyki okablowania mogą obejmować stosowanie kabli ekranowanych lub clamp-na rdzeniach kabli ferrytowych i przy użyciu niektórych kondensatorów 0.1uF równolegle z wyłącznikami krańcowymi do odbicia/filtrowania szumów. Dobrym pomysłem może być również trzymanie przewodów silnika z dala od przewodów wyłącznika krańcowego.
Możliwe jest skonfigurowanie GRBL do używania normalnie zamkniętych wyłączników krańcowych, jeśli sobie tego życzysz. Niektórzy uważają, że normalnie zamknięte wyłączniki krańcowe mogą pomóc zmniejszyć katastrofalną awarię w przypadku awarii wyłącznika krańcowego. Wielu użytkowników w ogóle pomija jakiekolwiek wyłączniki krańcowe i zamiast tego wybiera limity oprogramowania.
W Grbl v0.8 i nowszych istnieją wyprowadzenia poleceń uruchomienia cyklu, wstrzymania posuwu i resetowania, dzięki czemu możesz mieć fizyczne przyciski sterujące na swojej maszynie. Podobnie jak piny ograniczające, te piny są utrzymywane wysoko za pomocą wewnętrznego rezystora podciągającego, więc wszystko, co musisz zrobić, to podłączyć normalnie otwarty przełącznik do każdego pinu i do masy. Ponownie upewnij się, że ćwiczysz dobre metody okablowania, aby zminimalizować zewnętrzny szum elektryczny na pinach wejściowych.
Wrzeciono i kołki chłodziwa
Jeśli masz ochotę lub potrzebujesz wrzeciona (D13) lub kontrola chłodziwa (A3 i A4) , Grbl przełączy te piny wyjściowe na wysokie lub niskie, w zależności od poleceń kodu G, które wyślesz do Grbl. Z włączoną wersją v0.9+ i zmienną PWM wrzeciona, pin D11 wyprowadzi zakres voltages od 0 V do 5 V w zależności od polecenia kodu G prędkości wrzeciona. 0V oznacza w tym przypadku wyłączenie wrzeciona. Ponieważ wszystkie te szpilki zależą od aplikacji i sposobu ich użycia, pozostawimy tobie określenie, jak je kontrolować i używać w swojej maszynie. Możesz także zhakować wrzeciono i źródło sterowania chłodziwem files, aby łatwo zmienić sposób ich działania, a następnie skompilować i przesłać zmodyfikowany Grbl za pośrednictwem Arduino IDE.
Diagnostyczna dioda LED
Komercyjne maszyny CNC często mają co najmniej jedną diagnostyczną lampkę ostrzegawczą LED na wypadek awarii maszyny lub kodu alarmowego. W przypadku nowych użytkowników maszyn CNC GRBL i DIY ta funkcja jest bardzo przydatna, aby wiedzieć, kiedy wystąpił stan ALARM_STATE (na przykład nieudane położenie maszyny z włączonym bazowaniem i wyłącznikami krańcowymi).
GRBL domyślnie nie ma diagnostycznej diody LED. Dzieje się tak, ponieważ Ardunio UNO z układem 328p ma ograniczoną przestrzeń do programowania i prawie cała ta przestrzeń jest obecnie wykorzystywana (choć nie wszystkie!). Nie każda pożądana funkcja może być zaimplementowana na urządzeniu o tak małej ilości pamięci, więc czasami trzeba poświęcić.
Dodatkowo wszystkie dostępne porty I/O są obecnie używane i do takiej lampki potrzebny jest co najmniej jeden pin I/O. Na szczęście tę funkcjonalność można łatwo dodać, zhakując kod GRBL C, a na chipie 3p wciąż jest dostępne około 328% pamięci!
Wiele maszyn nie korzysta obecnie z opcjonalnej funkcji MIST COOLANT w Analog 4, więc możemy łatwo przedefiniować ten pin do naszego użytku. Alternatywną metodą może być zakodowanie takich diod LED na zewnętrznym Arduino, które następnie będzie miało dostępne wszystkie porty I/O, gdzie można by podłączyć tyle diod LED / brzęczyków, ile potrzeba i komunikować się przez port szeregowy lub I2C.
Aby zhakować kod źródłowy GRBL i użyć diody ALARM na tarczy CNDY, wykonaj następujące czynności:
Krok 1: W systemie Linux lub Macintosh otwórz edytor tekstu (w systemie Windows użyj Notepad ++) i edytuj cpu_map.h file:
Zmień to:
// Zdefiniuj styki wyjściowe umożliwiające zalewanie i zamglenie chłodziwa.
#zdefiniuj COOLANT_FLOOD_DDR DDRC
#zdefiniuj port COOLANT_FLOOD_PORT
#define COOLANT_FLOOD_BIT 3 // Uno pin analogowy 3
#zdefiniuj COOLANT_MIST_DDR DDRC
#zdefiniuj port COOLANT_MIST_PORT
#define COOLANT_MIST_BIT 4 // Uno analogowy pin 4
Do tego:
// Zdefiniuj styki wyjściowe umożliwiające zalewanie i zamglenie chłodziwa.
#zdefiniuj COOLANT_FLOOD_DDR DDRC
#zdefiniuj port COOLANT_FLOOD_PORT
#define COOLANT_FLOOD_BIT 3 // Uno pin analogowy 3
//#definiuj COOLANT_MIST_DDR DDRC
//#zdefiniuj port COOLANT_MIST_PORT
//#define COOLANT_MIST_BIT 4 // Uno analogowy pin 4
//////////////////
// Zdefiniuj WYJŚCIE LED ALARMU
#zdefiniuj SIGNAL_LIGHT_DDR DDRC
#zdefiniuj PORT SIGNAL_LIGHT_PORT
#define SIGNAL_LIGHT_BIT 4 // Uno pin analogowy 4
// #define signal_light(on) (SIGNAL_LIGHT_DDR |= (1<
// #zdefiniuj sygnał_światło_init() sygnał_światło(wyłączone)
#zdefiniuj sygnał_światła_init sygnał_wyłączenia_światła
#define signal_light_on (SIGNAL_LIGHT_DDR |= SIGNAL_LIGHT_PORT |= (1<
#define signal_light_off (SIGNAL_LIGHT_DDR |= SIGNAL_LIGHT_PORT &= ~(1<
//////////////////
Krok 2: W systemie Linux lub Macintosh otwórz edytor tekstu (w systemie Windows użyj Notepad ++) i edytuj protokół.c file:
Zmień to:
// Wykonuje polecenia w czasie wykonywania, gdy jest to wymagane. Ta funkcja działa głównie jako stan Grbl
// maszyna i steruje różnymi funkcjami czasu rzeczywistego, które oferuje Grbl.
// UWAGA: Nie zmieniaj tego, chyba że wiesz dokładnie, co robisz! nieważny protokół_exec_rt_system()
{
uint8_t rt_exec; // Zmienna temp, aby uniknąć wielokrotnego wywoływania volatile.
rt_exec = sys_rt_exec_alarm; // Skopiuj nietrwały sys_rt_exec_alarm.
if (rt_exec) { // Wpisz tylko wtedy, gdy dowolna flaga bitowa jest prawdziwa
// Alarm systemowy. Wszystko zostało zatrzymane przez coś, co poszło nie tak. Raport
// źródło błędu dla użytkownika. Jeśli jest krytyczny, Grbl wyłącza się, wprowadzając nieskończony
// pętla do zresetowania/przerwania systemu.
sys.state = STAN_ALARM; // Ustaw stan alarmu systemowego
report_alarm_message(rt_exec);
Do tego:
// Wykonuje polecenia w czasie wykonywania, gdy jest to wymagane. Ta funkcja działa głównie jako stan Grbl
// maszyna i steruje różnymi funkcjami czasu rzeczywistego, które oferuje Grbl.
// UWAGA: Nie zmieniaj tego, chyba że wiesz dokładnie, co robisz!
nieważny protokół_exec_rt_system()
{
uint8_t rt_exec; // Zmienna temp, aby uniknąć wielokrotnego wywoływania volatile.
rt_exec = sys_rt_exec_alarm; // Skopiuj nietrwały sys_rt_exec_alarm.
////////////////////////
// Zdefiniuj WYJŚCIE LED ALARMU
sygnał_światła_init; //dioda inicjująca w stanie wyłączonym
jeśli (sys.state==STATE_ALARM) {signal_light_on;}
w przeciwnym razie (sys.state!=STATE_ALARM) {signal_light_off;}
// inaczej {signal_light_off;}
////////////////////////
if (rt_exec) { // Wpisz tylko wtedy, gdy dowolna flaga bitowa jest prawdziwa
// Alarm systemowy. Wszystko zostało zatrzymane przez coś, co poszło nie tak. Raport
// źródło błędu dla użytkownika. Jeśli jest krytyczny, Grbl wyłącza się, wprowadzając nieskończony
// pętla do zresetowania/przerwania systemu.
sys.state = STAN_ALARM; // Ustaw stan alarmu systemowego
report_alarm_message(rt_exec);
To, co właśnie zrobiliśmy, to zmiana zdefiniowanej funkcji Analog 4 (A4) z opcjonalnego chłodziwa mgłą na naszą lampę LED. Następnie napisaliśmy kod w C, aby móc pisać (PC4) Port C 4 (Analog4) na wysokim lub niskim poziomie w zależności od tego, czy został on powiedziany, czy ma być włączony, czy wyłączony. Następnie napisaliśmy prostą instrukcję if-else, aby sprawdzić maszynę stanów GRBL i powiedzieć nam, czy jesteśmy w aktywnym stanie ALARM_STATE i kiedy mamy włączyć diodę LED.
Jeśli wszystko pójdzie dobrze, możemy skompilować w Arduino IDE, wgrać kod, a teraz będziemy mieli działającą lampkę diagnostyczną LED ALARM_STATE! Opcjonalnie możemy podłączyć zewnętrzną lampę sygnalizacyjną LED, aby umieścić ją wysoko nad maszyną, która będzie widoczna w całym pomieszczeniu.
Możliwe problemy
Idealnie, te zmiany zostaną wykonane przy użyciu najbardziej aktualnego dostępnego kodu źródłowego grbl i zostaną wprowadzone PRZED dodaniem „biblioteki” grbl do Arduino IDE. Jeśli masz już grbl w folderze bibliotek Arduino, musisz ręcznie przeglądać i usuwać folder grbl lub edytować files w bibliotece arduino. Na moim komputerze z Linuksem „biblioteka” znajduje się w: /home/andrew/Arduino/libraries/grbl. Najnowsze wydanie grbl można znaleźć na https://github.com/gnea/grbl/releases. Można pobrać dostępny zip file a wewnątrz znajduje się folder o nazwie grbl-1.1h.20190825. Wewnątrz tego folderu folder o nazwie grbl będzie tym, który chcesz dodać do Arduino IDE jako „bibliotekę” „zip file”. Pamiętaj, aby wprowadzić zmiany w cpu_map.h i protocol.c files przed dodaniem go do Arduino IDE. W przeciwnym razie będziesz musiał edytować filesw twoim folderze library/grbl. Znany jest błąd funkcji podwójnej osi w pliku zip grbl-1.1h file, jest to naprawione, jeśli zamiast tego pobierzesz główną gałąź grbl. https://github.com/gnea/grbl
Aktualizacje i błędy CNDY Shield
*V1.1: ma mały błąd sitodruku, w którym zamieniono PWM wrzeciona i kierunek wrzeciona. Zostało to poprawione w wersji 1.2.
V1.2 nie ma już opcjonalnych kondensatorów redukcji szumów na linii 5v i ma nowe na innych liniach przycisków wejściowych. V1.2 ma opcjonalną diodę LED podłączoną równolegle do PWM wrzeciona. Może to być przydatne w przypadku konfiguracji lasera ze względów bezpieczeństwa.
Zaktualizowano 28 sierpnia-2021
Dodatkowe informacje można znaleźć na RabbitMountainResearch.com.
Dokumenty / Zasoby
![]() |
CNDY Tarcza GRBL CNC Arduino UNO [plik PDF] Instrukcja użytkownika GRBL CNC, Arduino UNO |




