CNDY Shield GRBL CNC Arduino UNO Guida per l'utente
V1.2
Pinout GRBL su Arduino Uno
Analogico 0 = Annulla pulsante*
Analogico 1 = Pulsante Feed Hold* (SAFETY_DOOR è condiviso con Feed Hold. Abilitato da config define)
Analogico 2 = Pulsante avvio/riavvio ciclo*
3 analogico = Uscita abilitazione refrigerante
4 analogico = (Opzionale) Uscita del liquido di raffreddamento della nebbia (o spia diagnostica ALARM_STATE**)
Analogico 5 = Ingresso sonda*
Digitale 13 = Direzione del mandrino
Digitale 12 = Finecorsa Asse Z*
Digitale 11 = Mandrino/Laser Abilita PWM
Digitale 10 = Finecorsa Asse Y*
Digitale 9 = Finecorsa Asse X*
Digitale 8 = Abilita / Disabilita motori passo-passo
Digitale 7 = Direzione Asse Z
Digitale 6 = Direzione Asse Y
Digitale 5 = Direzione Asse X
Digitale 4 = Passo-Asse Z a impulsi
Digitale 3 = Passo impulso asse Y
Digitale 2 = impulso passo asse X
Funzione opzionale a doppio asse
Pin analogico Uno 3 = DUAL_DIRECTION dell'asse A (usato per essere l'uscita di abilitazione del refrigerante)
Pin analogico Uno 4 = Asse A DUAL_STEP (usato per essere l'uscita opzionale del liquido di raffreddamento della nebbia)
Uno Digital 13 = Refrigerante (sostituzione direzione mandrino.)
Dopo aver installato il repository grbl come libreria in Arduino, decommenta le seguenti righe in config.h file nella cartella della libreria grbl.
#define ENABLE_DUAL_AXIS // Predefinito disabilitato. Decommenta per abilitare.
// Seleziona un asse per specchiare un altro motore. Solo l'asse X e Y è supportato in questo momento.
#define DUAL_AXIS_SELECT ASSE_Y // Deve essere X_AXIS o Y_AXIS
NOTA: il limite dell'asse doppio è condiviso con il (Asse Z) pin limite per impostazione predefinita.
La funzione a doppio asse richiede un pin di impulso a gradino indipendente per funzionare. Il perno di direzione indipendente non è assolutamente necessario ma facilita una facile inversione di direzione con un'impostazione Grbl $$. Questi perni sostituiscono la direzione del mandrino e i perni di nebulizzazione del refrigerante opzionali.
Questa funzione opzionale a doppio asse serve principalmente al ciclo di homing per individuare indipendentemente due lati di un cavalletto a doppio motore, ovvero l'auto-quadratura. Ciò richiede un ulteriore finecorsa per il motore clonato. Per eseguire l'autoquadratura, entrambi i finecorsa sull'asse clonato devono essere posizionati fisicamente per attivarsi quando il gantry è in squadra. Consiglio vivamente di mantenere i motori sempre abilitati per garantire che il gantry rimanga quadrato con l'impostazione $1=255.
Per Grbl su Arduino Uno, il finecorsa dell'asse clonato deve essere condiviso e cablato con il pin limite dell'asse z a causa della mancanza di pin disponibili. Il ciclo di homing deve indirizzare l'asse z e l'asse clonato in cicli diversi, che è già la configurazione predefinita.
La funzione a doppio asse funziona clonando un'uscita del passo dell'asse su un'altra coppia di perni di passo e direzione. L'impulso di passo e la direzione del motore clonato possono essere impostati indipendentemente dal motore dell'asse principale. Tuttavia, per risparmiare prezioso flash e memoria, questa funzione a doppio asse deve condividere le stesse impostazioni (passo/mm, velocità massima, accelerazione) del motore principale. Questa NON è una caratteristica per un quarto asse indipendente. Solo un clone del motore.
ATTENZIONE: assicurati di testare le direzioni dei tuoi motori a doppio asse! Devono essere impostati per muoversi nella stessa direzione PRIMA di eseguire il primo ciclo di homing o qualsiasi movimento lungo! I motori che si muovono in direzioni opposte possono causare gravi danni alla vostra macchina! Usa questa funzione a doppio asse a tuo rischio.
NOTA: questa funzione richiede circa 400 byte di flash. Alcune configurazioni possono esaurire la memoria flash per adattarsi a un Arduino 328p/Uno. Sono supportati solo gli assi X e Y. È supportata la modalità mandrino/laser variabile, ma solo per un'opzione di configurazione. Il nucleo XY, il perno di direzione del mandrino e il refrigerante a nebbia M7 sono disabilitati/non supportati.
Per evitare che il ciclo di homing inneschi il doppio asse, quando un limite interviene prima dell'altro a causa di un guasto o del rumore dell'interruttore, il ciclo di homing si interrompe automaticamente se il finecorsa del secondo motore non interviene entro i tre parametri di distanza definiti di seguito. La percentuale di lunghezza dell'asse calcolerà automaticamente una distanza di errore come percentualetage della corsa massima dell'altro asse non doppio, ovvero se la selezione dell'asse doppio è X_AXIS al 5.0%, la distanza di errore verrà calcolata come 5.0% della corsa massima dell'asse y. La distanza di errore max e min sono i limiti di quanto è lontana o piccola una distanza di errore valida.
#define DUAL_AXIS_HOMING_FAIL_AXIS_LENGTH_PERCENT 5.0 // Mobile (percentuale)
#define DUAL_AXIS_HOMING_FAIL_DISTANCE_MAX 25.0 // Virgola mobile (mm)
#define DUAL_AXIS_HOMING_FAIL_DISTANCE_MIN 2.5 // Virgola mobile (mm)
Nota per la porta I2C
Analog 4 (A4) e Analog 5 (A5) vengono utilizzati per la porta I2C su Arduino Uno o 328p. Ciò significa che finché si utilizza la funzione sonda predefinita, il liquido di raffreddamento a nebbia, il doppio asse o la spia di diagnostica LED ALARM_STATE personalizzata, l'utilizzo di I2C non sarà possibile. La comunicazione con un altro Arduino per aumentare la funzionalità dovrà avvenire tramite la connessione seriale su D0 e D1.
Guida introduttiva (driver passo-passo)
Innanzitutto, per collegare i tuoi motori passo-passo a Grbl, avrai bisogno di alcuni driver per motori passo-passo per alimentare gli stepper e collegare gli ingressi del tuo driver ai pin del controller Arduino. Esistono numerosi driver in grado di farlo, disponibili come completamente pre-costruiti, parzialmente pre-costruiti o completamente fai-da-te. I driver stepper dovranno condividere il file pin di abilitazione stepper (D8) ai rispettivi pin di abilitazione, mentre il pin di direzione e impulso di passo (D2-D7) dovranno essere collegati ai rispettivi pin sui driver. Assicurati solo che tutti i tuoi driver e Arduino condividere un terreno comune (stella collegata alla potenza del driver del motore). Questo è tutto ciò di cui avrai bisogno per iniziare.
Interruttori di riferimento e finecorsa
Successivamente, una volta che hai deciso che sei pronto o che vorresti per abilitare l'homing e/o i limiti hard, dovrai collegare a finecorsa normalmente aperto a ciascuno dei pin di limite (D9, D10 e D12). Homing e hard limit utilizzano gli stessi interruttori. Questi pin di limite sono già mantenuti alti con un resistore di pull-up interno, quindi tutto ciò che devi fare è collegarli a terra. Quindi, quando chiudi un interruttore, l'interruttore tirerà il perno di limite a terra. Se desideri avere interruttori di fine corsa rigidi su entrambe le estremità della corsa di un asse, basta collegare due interruttori di finecorsa in parallelo al perno di limite dell'asse e mettere a terra. Assicurati di aver installato gli interruttori prima di tentare di eseguire un ciclo di homing e assicurati di praticare buoni metodi di cablaggio per ridurre al minimo il rumore elettrico esterno sui pin di ingresso.
Le buone pratiche di cablaggio potrebbero includere l'utilizzo di cavi schermati o clamp-su nuclei di cavi in ferrite e utilizzando alcuni condensatori da 0.1uF in parallelo con i finecorsa per il debouncing/filtraggio del rumore. Anche tenere i cavi del motore lontano dai cavi del finecorsa può essere una buona idea.
Se lo si desidera, è possibile configurare GRBL per l'utilizzo di finecorsa normalmente chiusi. Alcuni ritengono che i finecorsa normalmente chiusi possano aiutare a ridurre un incidente catastrofico in caso di guasto di un finecorsa. Molti utenti omettono di utilizzare qualsiasi finecorsa e optano invece per i limiti del software.
In Grbl v0.8 e versioni successive, ci sono pin-out dei comandi di avvio ciclo, mantenimento alimentazione e ripristino runtime, quindi puoi avere pulsanti di controllo fisici sulla tua macchina. Proprio come i pin limit, questi pin sono tenuti in alto con un resistore di pull-up interno, quindi tutto ciò che devi fare è collegare un interruttore normalmente aperto a ciascun pin e alla massa. Ancora una volta assicurati di praticare buoni metodi di cablaggio per ridurre al minimo il rumore elettrico esterno sui pin di ingresso.
Perni del mandrino e del refrigerante
Se hai un desiderio o una necessità per il mandrino (D13) o controllo del liquido di raffreddamento (A3 e A4) , Grbl alzerà questi pin di output in alto o in basso, a seconda dei comandi del codice G che invii a Grbl. Con v0.9+ e PWM del mandrino variabile abilitato, il pin D11 emetterà un intervallo di voltages da 0V a 5V a seconda del comando G-code della velocità del mandrino. 0V indica il mandrino spento in questo caso. Poiché questi pin dipendono tutti dall'applicazione nel modo in cui vengono utilizzati, lasceremo a te determinare come controllarli e utilizzarli per la tua macchina. Puoi anche hackerare il mandrino e la fonte di controllo del refrigerante files per modificare facilmente il modo in cui funzionano e quindi compilare e caricare il tuo Grbl modificato tramite l'IDE di Arduino.
LED diagnostico
Le macchine CNC commerciali spesso hanno almeno un faro LED diagnostico in caso di crash della macchina o codice di allarme. Per chi è nuovo alle macchine CNC GRBL e fai-da-te, questa funzione è molto utile per sapere quando si è verificato un ALARM_STATE (come il mancato home della macchina con homing e finecorsa abilitati).
GRBL per impostazione predefinita non ha una luce LED diagnostica. Questo perché l'Ardunio UNO con il chip 328p ha uno spazio di programmazione limitato e quasi tutto quello spazio è attualmente utilizzato (anche se non tutto!). Non tutte le funzionalità desiderabili possono essere implementate su un dispositivo con così poca memoria, quindi a volte è necessario fare dei sacrifici.
Inoltre, tutte le porte I/O disponibili sono attualmente in uso ed è necessario almeno un pin I/O per tale luce. Fortunatamente questa funzionalità può essere facilmente aggiunta hackerando il codice GRBL C e c'è ancora circa il 3% di memoria disponibile sul chip 328p!
Molte macchine attualmente non utilizzano la funzione MIST COOLANT opzionale su Analog 4, quindi possiamo facilmente ridefinire questo pin per il nostro uso. Un metodo alternativo potrebbe essere quello di codificare tali luci LED su un Arduino esterno che avrebbe quindi tutte le porte I/O disponibili in cui è possibile cablare tutte le luci LED / Buzzer desiderati e comunicare su Serial o I2C.
Per hackerare il codice sorgente GRBL per utilizzare il LED ALARM sul CNDY Shield, eseguire le seguenti operazioni:
Fase 1: Su Linux o Macintosh apri un editor di testo (su Windows usa Notepad++) e modifica il file cpu_map.h file:
Cambia questo:
// Definisce i pin di uscita per l'abilitazione del refrigerante allagamento e nebulizzazione.
#define COOLANT_FLOOD_DDR DDRC
#define COOLANT_FLOOD_PORT PORTC
#define COOLANT_FLOOD_BIT 3 // Uno analogico Pin 3
#define COOLANT_MIST_DDR DDRC
#define COOLANT_MIST_PORT PORTC
#define COOLANT_MIST_BIT 4 // Uno analogico Pin 4
A questo:
// Definisce i pin di uscita per l'abilitazione del refrigerante allagamento e nebulizzazione.
#define COOLANT_FLOOD_DDR DDRC
#define COOLANT_FLOOD_PORT PORTC
#define COOLANT_FLOOD_BIT 3 // Uno analogico Pin 3
//#definisce COOLANT_MIST_DDR DDRC
//#definisce COOLANT_MIST_PORT PORTC
//#define COOLANT_MIST_BIT 4 //Uno Analog Pin 4
//////////////////
// Definisce l'USCITA LED DI ALLARME
#define SIGNAL_LIGHT_DDR DDRC
#define PORTA SIGNAL_LIGHT_PORTC
#define SIGNAL_LIGHT_BIT 4 // Uno analogico Pin 4
// #define signal_light(on) (SIGNAL_LIGHT_DDR |= (1<
// #define signal_light_init() signal_light(off)
#define signal_light_init signal_light_off
#define signal_light_on (SIGNAL_LIGHT_DDR |= SIGNAL_LIGHT_PORT |= (1<
#define signal_light_off (SIGNAL_LIGHT_DDR |= SIGNAL_LIGHT_PORT &= ~(1<
//////////////////
Fase 2: Su Linux o Macintosh apri un editor di testo (su Windows usa Notepad++) e modifica il file protocollo.c file:
Cambia questo:
// Esegue i comandi di runtime, quando richiesto. Questa funzione opera principalmente come stato di Grbl
// macchina e controlla le varie funzionalità in tempo reale che Grbl ha da offrire.
// NOTA: non modificarlo a meno che tu non sappia esattamente cosa stai facendo! void protocol_exec_rt_system()
{
uint8_t rt_exec; // Variabile temporanea per evitare di chiamare volatile più volte.
rt_exec = sys_rt_exec_alarm; // Copia il volatile sys_rt_exec_alarm.
if (rt_exec) { // Immettere solo se qualsiasi bit flag è vero
// Allarme di sistema. Tutto si è spento a causa di qualcosa che è andato gravemente storto. Rapporto
// l'origine dell'errore per l'utente. Se critico, Grbl si disabilita inserendo un infinito
// ciclo fino al ripristino/interruzione del sistema.
sys.state = STATO_ALLARME; // Imposta lo stato di allarme del sistema
report_alarm_message(rt_exec);
A questo:
// Esegue i comandi di runtime, quando richiesto. Questa funzione opera principalmente come stato di Grbl
// macchina e controlla le varie funzionalità in tempo reale che Grbl ha da offrire.
// NOTA: non modificarlo a meno che tu non sappia esattamente cosa stai facendo!
void protocollo_exec_rt_system()
{
uint8_t rt_exec; // Variabile temporanea per evitare di chiamare volatile più volte.
rt_exec = sys_rt_exec_alarm; // Copia il volatile sys_rt_exec_alarm.
///////////////////////
// Definisce l'USCITA LED DI ALLARME
segnale_luce_init; //LED di inizializzazione spento
se (sys.state==STATE_ALARM) {signal_light_on;}
altrimenti se (sys.state!=STATE_ALARM) {signal_light_off;}
// altro {segnale_luce_spenta;}
///////////////////////
if (rt_exec) { // Immettere solo se qualsiasi bit flag è vero
// Allarme di sistema. Tutto si è spento a causa di qualcosa che è andato gravemente storto. Rapporto
// l'origine dell'errore per l'utente. Se critico, Grbl si disabilita inserendo un infinito
// ciclo fino al ripristino/interruzione del sistema.
sys.state = STATO_ALLARME; // Imposta lo stato di allarme del sistema
report_alarm_message(rt_exec);
Quello che abbiamo appena fatto è stato cambiare la funzione definita di Analog 4 (A4) da liquido di raffreddamento a nebbia opzionale a nostra luce a LED. Quindi abbiamo scritto il codice in C per poter scrivere (PC4) Port C 4 (Analog4) alto o basso a seconda che fosse stato detto di essere acceso o spento. Quindi abbiamo scritto una semplice istruzione if-else per controllare la macchina a stati GRBL e dirci se siamo in un ALARM_STATE attivo e quando dobbiamo accendere il LED.
Se tutto va bene, possiamo quindi compilare nell'IDE di Arduino, caricare il codice e ora avremo una luce diagnostica LED ALARM_STATE funzionante! Possiamo opzionalmente collegare un faro a LED esterno da posizionare in alto sopra la macchina che sarà visibile dall'altra parte della stanza.
Possibili problemi
Idealmente, queste modifiche verranno eseguite con il codice sorgente grbl più aggiornato disponibile e verranno apportate PRIMA di aggiungere la "libreria" grbl all'IDE di Arduino. Se hai già grbl nella cartella delle tue librerie Arduino dovrai navigare manualmente ed eliminare la cartella grbl o modificare il files all'interno della libreria arduino. Sulla mia macchina Linux la "libreria" si trova in: /home/andrew/Arduino/libraries/grbl. La versione più recente di grbl può essere trovata all'indirizzo https://github.com/gnea/grbl/releases. Si può scaricare lo zip disponibile file e una cartella denominata grbl-1.1h.20190825 può essere trovata all'interno. All'interno di questa cartella una cartella denominata grbl sarà quella che vorrai aggiungere all'IDE di Arduino come "libreria" "zip" file”. Assicurati di apportare le modifiche a cpu_map.he protocol.c files prima di aggiungerlo all'IDE di Arduino. Altrimenti dovrai modificare il files all'interno delle tue librerie/cartella grbl. C'è un bug noto per la funzione a doppio asse nello zip grbl-1.1h file, viene risolto se invece scarichi il ramo principale di grbl. https://github.com/gnea/grbl
Aggiornamenti ed errori di CNDY Shield
*V1.1: presenta un piccolo errore di serigrafia in cui PWM mandrino e Direzione mandrino vengono scambiati. Questo è stato corretto in V1.2.
V1.2 non ha più i condensatori di riduzione del rumore opzionali sulla linea 5v e ne ha di nuovi sulle altre linee dei pulsanti di ingresso. V1.2 ha un LED opzionale cablato in parallelo al PWM mandrino. Questo può essere utile per le configurazioni laser per la sicurezza.
Aggiornato agosto 28-2021
Ulteriori informazioni sono disponibili all'indirizzo RabbitMountainResearch.com.
Documenti / Risorse
![]() |
CNDY Scudo GRBL CNC Arduino UNO [pdf] Guida utente CNC GRBL, Arduino UNO |