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:

Posizione dell'asse in millimetri rispetto al tempo in secondi, con un ciclo di homing. La prima fase, una ricerca rapida, avanza da 46 millimetri fino alla linea di scattamento dell'interruttore a 2.4 millimetri. La seconda fase si ritira a 7 millimetri. La terza si riavvicina lentamente e fa scattare di nuovo l'interruttore a 2.55 millimetri, dove il tracciato si stabilizza. Una linea rossa tratteggiata indica dove scatta l'interruttore, una linea continua a zero indica lo zero macchina G53 e una linea tratteggiata a 18 millimetri indica uno zero di lavoro G54 scelto come offset.
Rapido, arretramento, lento. Il primo passaggio deve soltanto trovare l'interruttore; il secondo avvicinamento è quello che imposta il numero ed è lento proprio perché rende ripetibile il punto di scattamento dell'interruttore. Scarica SVG
  1. 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.
  2. 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.
  3. 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

Fonti