Tutorial · Intermedio · 30 min
Homing con finecorsa: coordinate macchina e lavoro
Zero macchina e zero di parte non coincidono: scopri la ricerca in tre fasi e i limiti software di una macchina che accende senza conoscere la posizione.
Il problema risolto dall’homing
Un asse con motore passo-passo che funziona ad anello aperto ha una memoria perfetta di tutto ciò che gli è stato detto di fare e nessuna conoscenza di dove si trovi. All’accensione il suo contatore di posizione interno segna zero: non perché il carro sia a zero, ma perché quello è il valore con cui si inizializza un intero.
Peggio, il contatore può essere sbagliato anche mentre la macchina è in funzione. Un passo perso è silenzioso: il driver del motore continua a contare i impulsi, il firmware continua a credergli e il carro è ora sfalsato in modo permanente di un multiplo di quattro passi completi. Nulla nel ciclo di controllo lo noterà mai, perché un ciclo non esiste.
L’homing risolve entrambi i problemi. È l’unico momento del funzionamento di una macchina in cui la posizione viene misurata dal mondo fisico anziché accumulata da un conteggio, e tutto ciò che segue dipende da esso.
La ricerca in tre fasi
Avanza verso l’interruttore, fermati quando scatta, chiamalo zero. Funziona ed è ripetibile a circa mezzo millimetro, una precisione inutilizzabile. Ogni macchina reale esegue il procedimento in tre passaggi:
- Ricerca rapida. Avanza verso l’interruttore a una velocità scelta per l’impazienza, non per la precisione. Questo passaggio serve soltanto ad avvicinarsi e può percorrere tutta la lunghezza dell’asse.
- Arretramento. Rientra di pochi millimetri finché l’interruttore non si rilascia. È questo che rende possibile il terzo passaggio e dimostra anche che l’interruttore è un interruttore e non un ingresso bloccato.
- Nuova ricerca lenta. Avvicinati di nuovo a una piccola frazione della prima velocità e registra il punto di scattamento. Questa è la misura.
Il motivo per cui il passaggio lento è importante è meccanico. Un microinterruttore a leva scatta quando il suo cursore ha percorso una distanza precisa, ma il carro continua a muoversi mentre il firmware reagisce e mentre l’asse decelera. A 50 mm/s con una latenza di rilevamento di 2 ms, il carro percorre 0.1 mm oltre il punto di scattamento prima che qualcuno lo sappia. A 2 mm/s, percorre 0.004 mm. L’avvicinamento lento converte la ripetibilità propria dell’interruttore, qualche micron su un buon microinterruttore, nella ripetibilità della macchina, invece di lasciare che la distanza di decelerazione la domini.
Le impostazioni tipiche sono queste:
| Parametro | Valore tipico | Motivo |
|---|---|---|
| Avanzamento per la ricerca rapida | 30–50 mm/s | Abbastanza veloce da non risultare fastidioso |
| Distanza di arretramento | 3–5 mm | Sufficiente a rilasciare completamente l’interruttore |
| Avanzamento per la ricerca lenta | 1–3 mm/s | La distanza di decelerazione diventa trascurabile |
| Distacco dopo l’homing | 1–5 mm | Lascia l’interruttore rilasciato, così può fungere anche da limite |
Collegare un interruttore di fine corsa
L’interruttore è lo stesso microinterruttore a leva che un robot usa come paraurti e la regola di collegamento è la stessa:
const int X_MIN_PIN = 9;
void setup() {
pinMode(X_MIN_PIN, INPUT_PULLUP); // NO to ground, pin pulled up
}
bool endstopTriggered() {
return digitalRead(X_MIN_PIN) == LOW;
}
Collega COM a massa e NO al pin, con la resistenza di pull-up interna attiva. Un filo interrotto viene allora letto come «non scattato», che per un interruttore di homing è il guasto sicuro: la macchina non trova la posizione iniziale e si ferma, invece di decidere che si trovi già lì.
È l’opposto della regola per l’arresto di emergenza, per il quale vuoi la configurazione normalmente chiusa in modo che un filo tagliato fermi la macchina. Un interruttore di homing e un arresto di emergenza hanno stati sicuri opposti e collegarli allo stesso modo è un errore reale, non una questione di stile.
Due dettagli causano gran parte dei problemi con i finecorsa:
- Applica l’eliminazione del rimbalzo. Una singola pressione produce circa nove transizioni in 4.7 ms. Durante l’homing stai interrogando in un ciclo stretto, quindi vuoi il primo fronte e devi ignorare tutto ciò che segue per qualche millisecondo. Non collegare mai un interrupt che conta i fronti.
- Devia il filo del finecorsa lontano dai fili del motore. Un filo lungo non schermato che corre parallelo a un cavo di un motore passo-passo con corrente commutata raccoglie esattamente il tipo di rumore che sembra la chiusura di un interruttore. Se l’homing funziona con i motori disattivati e fallisce mentre sono in funzione, la ragione è questa.
Coordinate della macchina e coordinate di lavoro
Dopo l’homing, la macchina conosce una sola cosa con precisione: dove si trova l’interruttore di fine corsa. Quel punto, più uno scostamento fisso, definisce lo zero macchina, il sistema di coordinate G53 nel G-code. È una proprietà del sistema di riferimento. Non si sposta ed è lo stesso dopo ogni ciclo di homing.
Quasi mai è il punto da cui vuoi misurare il lavoro. Per questo le macchine mantengono una seconda origine mobile: il sistema di coordinate di lavoro, da G54 a G59, definito come offset rispetto allo zero macchina.
| Coordinate macchina (G53) | Coordinate di lavoro (G54…) | |
|---|---|---|
| Origine | Fissata dai finecorsa e dal sistema di riferimento | Dove la imposti tu |
| Impostata da | Homing | Da te, per ogni lavoro |
| Sopravvive al riavvio | Sì, dopo un nuovo homing | Sì, memorizzata nel controllore |
| Usata per | Limiti software, cambi utensile, posizioni di parcheggio | Ogni riga del lavoro reale |
| Cambia quando rifissi il pezzo | No | Sì: è proprio questo lo scopo |
La separazione si ripaga dalla prima volta che esegui lo stesso lavoro due volte. Il G-code dice «disegna un quadrato di 50 mm a partire da X0 Y0». Fissa la carta in un punto comodo, spostati fino all’angolo, imposta lì le coordinate di lavoro ed esegui. Sposta la carta, azzera di nuovo ed esegui lo stesso file. Il programma non è cambiato; lo scostamento sì.
Lo zero macchina è ciò che il sistema di riferimento conosce. Lo zero di lavoro è ciò che il lavoro conosce. Tenerli separati è il motivo per cui non devi modificare un file per spostare un pezzo.
Limiti software
Con un’origine macchina nota, il firmware può rifiutare movimenti che uscirebbero dall’inviluppo prima che il carro vi arrivi. Sono i limiti software e sono decisamente migliori di quelli hardware, perché fermano la macchina con una decelerazione pianificata anziché mediante una collisione.
; GRBL
$20=1 ; soft limits on
$130=200.0 ; X max travel, mm
$131=200.0 ; Y
$132=60.0 ; Z
Una macchina con limiti software attivi e senza ciclo di homing ha limiti software che non può applicare, perché l’inviluppo viene misurato da un’origine che non possiede. Perciò la maggior parte dei firmware si rifiuta di funzionare finché non viene eseguito l’homing e il messaggio di errore che ne deriva non è un fastidio: è l’interblocco che funziona.
Gli interruttori hardware di limite in fondo a ciascun asse sono un fermo di sicurezza separato e più grossolano per quando i limiti software sono sbagliati. Molte macchine di piccole dimensioni li omettono e si affidano solo a quelli software, un compromesso ragionevole quando nulla sulla macchina può farti del male.
La macchina a stati
L’homing è naturalmente una piccola macchina a stati finiti e implementarlo come tale mantiene onesta la gestione dei timeout:
enum HomeState { IDLE, SEEK_FAST, BACK_OFF, SEEK_SLOW, HOMED, FAILED };
HomeState state = IDLE;
long stateStartedAt = 0;
void homingStep() {
switch (state) {
case SEEK_FAST:
if (endstopTriggered()) { stopNow(); enter(BACK_OFF); }
// an axis that never finds its switch must give up, not grind
else if (travelled() > AXIS_LENGTH_MM + 10) enter(FAILED);
break;
case BACK_OFF:
if (!endstopTriggered() && travelled() >= BACKOFF_MM) enter(SEEK_SLOW);
break;
case SEEK_SLOW:
if (endstopTriggered()) {
stopNow();
machinePosition = HOME_OFFSET_MM; // the one real measurement
enter(HOMED);
} else if (travelled() > BACKOFF_MM * 2) enter(FAILED);
break;
}
}
I rami FAILED sono la parte da copiare. Un asse che esegue la ricerca e non fa mai scattare l’interruttore ha un interruttore scollegato, un carro bloccato oppure sta perdendo tutti i passi ricevuti. In tutti e tre i casi la risposta giusta è fermarsi e segnalarlo. Una routine di homing priva di timeout spingerà il carro contro una struttura per tutto il tempo che le consenti.
Quando va storto
| Sintomo | Causa | Soluzione |
|---|---|---|
| Ogni volta esegue l’homing in un punto leggermente diverso | Nessun secondo passaggio lento, oppure è troppo veloce | Aggiungi la nuova ricerca; riducila a 1–3 mm/s |
| Si muove nella direzione sbagliata e si schianta | Direzione dell’homing o del motore invertita | Inverti l’impostazione della direzione oppure una coppia di avvolgimenti |
| «Interruttore di fine corsa scattato» prima di muoversi | Interruttore collegato normalmente chiuso oppure bloccato | Controlla NO e NC; verifica che il pin legga alto quando è rilasciato |
| Funziona a freddo, ma fallisce quando i motori girano | Il filo del finecorsa raccoglie il rumore del driver del motore | Spostalo lontano dai cavi dei motori; aggiungi un condensatore da 100 nF verso massa |
| Esegue l’homing correttamente, poi ogni movimento è sfalsato | HOME_OFFSET o distacco errati |
Misura dal finecorsa al punto in cui vuoi lo zero |
| La macchina si rifiuta di muoversi dopo l’accensione | Limiti software attivi, homing non eseguito | Esegui l’homing: è l’interblocco, non un guasto |
| Ripete bene, ma il pezzo è nel posto sbagliato | Scostamento di lavoro, non homing | Reimposta G54 dove si trova realmente il lavoro |
| L’homing dell’asse Z entra nel piano | Direzione Z invertita oppure offset della sonda non impostato | Controlla la direzione prima di fidarti di qualsiasi offset |
Dove si inserisce
L’homing è il modo in cui una macchina ad anello aperto recupera l’unica cosa che non può misurare strutturalmente. Vale la pena essere chiari su ciò che offre e non offre: rende corretta la posizione della macchina all’inizio di un lavoro, e nulla di più. Se l’asse perde passi durante il lavoro perché il limite di corrente o il profilo di accelerazione è sbagliato, l’homing tra un’esecuzione e l’altra azzera soltanto l’errore ogni volta senza mai correggerlo.
Il segnale è semplice. Una macchina che esegue l’homing con precisione e finisce un lavoro nel posto sbagliato ha un problema di movimento, non di homing.
Esplora il grafo
Fa parte di queste costruzioni
Progetti e percorsi di apprendimento che includono questo tutorial.
Per approfondire