Algoritmo "Jerk Limiting"

Autore: Simone Persiani

Strategia

Come spiegato nella guida sulla Junction Speed, tra uno spostamento e l'altro si rendono in generale necessarie delle fasi di accelerazione. Le accelerazioni e le decelerazioni però richiedono tempo: un tempo che, pur essendo relativamente piccolo, moltiplicato per i milioni di movimenti richiesti per una stampa può incidere di molto sui tempi di realizzazione dei pezzi.

Si è deciso quindi di evitare il più possibile tali fasi di accelerazione: è stata introdotta la possibilità di non eseguirle nel caso in cui la variazione di velocità fosse abbastanza piccola da permettere ai motori stepper di effettuare la transizione senza perdita di passi. I parametri del Jerk Limiting sono quindi variazioni di velocità, definite indipendentemente per ciascun asse (estrusori compresi).

Attenzione! È importante fare attenzione a non cadere nella facile confusione generata da un'infelice scelta di nomi: tali valori sono stati chiamati "jerk" solo perché rappresentano i parametri del Jerk Limiting, che è l'unico algoritmo in grado di incidere sul jerk istantaneo. Da questo momento in poi, con il termine jerk ci riferiremo solamente ai parametri dell'algoritmo.

L'algoritmo

Ipotizziamo due spostamenti successivi: il blocco j a velocità \vec{v}_j ed il blocco k a velocità \vec{v}_k. Avremo quindi una variazione di velocità pari a \Delta \vec{v} = \vec{v}_k - \vec{v}_j:

  • se almeno una tra le componenti XYZ di \Delta \vec{v} supera il relativo jerk impostato, il firmware realizzerà il passaggio da \vec{v}_j a \vec{v}_k tramite accelerazioni. Stabilirà il valore incognito di \vec{v}_{junction} in modo tale che le variazioni di velocità lungo i tre assi non superino quelle impostate tramite i parametri jerk. In realtà l'algoritmo è nei fatti un po' più complesso di così: deve infatti tener conto anche di altri fattori tra i quali eventuali cambi di direzione degli assi (un qualunque asse deve rallentare fino a fermarsi prima di poter invertire la direzione del proprio moto);
  • altrimenti il passaggio da una velocità all'altra sarà istantaneo e non si perderà tempo per le accelerazioni/decelerazioni intermedie.

Configurazione dei parametri

In questo algoritmo il jerk è quindi la minima variazione di velocità che richiede un'accelerazione: se \vec{v}_j e \vec{v}_k fossero abbastanza simili tra loro, il passaggio dall'una all'altra sarebbe istantaneo. Questo trucchetto permette di ridurre leggermente i tempi di stampa ma va impostato correttamente: più i valori di jerk vengono aumentati, maggiori saranno gli spostamenti (statisticamente) che verranno gestiti con il cambio di velocità istantaneo (e maggiori saranno quindi le vibrazioni prodotte).

Riassumendo, i jerk devono essere impostati tenendo a mente che abbassando tali valori si riducono le vibrazioni e i rumori prodotti dai motori ma si allungano conseguentemente i tempi di stampa, e viceversa.

Per abilitare il Jerk Limiting è sufficiente assicurarsi che il Junction Deviation sia disabilitato. Ecco un esempio di configurazione dei suoi parametri:

//#define JUNCTION_DEVIATION
#define DEFAULT_XJERK 10
#define DEFAULT_YJERK 10
#define DEFAULT_ZJERK 0.4
#define DEFAULT_EJERK {5,5,5,5,5,5}

DEFAULT_?JERK è un parametro salvato in EEPROM e può essere modificato anche senza ricompilare il firmware: basta utilizzare il comando M205 X<?> Y<?> Z<?>. Al termine delle modifiche, se si è soddisfatti del valore impostato è possibile salvarlo permanentemente tramite comando M500 (richiede l'attivazione del supporto alla EEPROM).

Autore: Simone Persiani