MarlinKimbra & MK4duo

Junction Speed

0 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 5 (0 votes, average: 0,00 out of 5)
You need to be a registered member to rate this post.
Loading...

Junction Speed

Autore: Simone Persiani

Introduzione

I progetti Marlin ed MK4duo, a partire rispettivamente dalle versioni 1.1.9 e 4.3.6, hanno introdotto un nuovo algoritmo nel tentativo di superare l’ormai datato Jerk Limiting. Tale gestione non ha mai convinto del tutto gli sviluppatori di Marlin e ha causato loro molti grattacapi nel corso degli anni. Nel tentativo di superare tale algoritmo si sono ispirati ai codici sorgente di Grbl, un ben noto firmware per la gestione di macchine CNC, ottenendo e migliorando il Junction Deviation (il tutto nel pieno rispetto delle licenze associate a tale prodotto). Ricordiamo che Marlin stesso è nato nell’agosto del 2011 proprio come fork di Grbl e di Sprinter.

Tali algoritmi (l’uno alternativo all’altro) si rendono necessari nel momento in cui il planner (il modulo software che si occupa dell’ottimizzazione dei movimenti della macchina) si trova a dover scegliere con quale velocità far terminare un blocco e cominciare il successivo, ovvero la Junction Speed (velocità di giunzione tra spostamenti successivi).

Premessa

In un mondo ideale stamperemmo tutti alla velocità della luce e otterremmo i pezzi stampati in un istante. Ciò ovviamente non è possibile: le nostre macchine hanno dei motori che possono raggiungere solo determinate velocità massime, hanno dei telai in grado di assorbire solo una certa quantità di vibrazioni e di sopportare carichi di forze/tensioni limitati, hanno delle parti in movimento con massa sicuramente diversa da zero, ecc. Le vibrazioni che si vengono a creare quando stampiamo ad alte velocità impattano sulla qualità dell’oggetto stampato (vedi effetto ghosting). Si rende quindi necessario trovare una strategia efficiente per gestire le accelerazioni di ciascun asse in modo da trovare un buon compromesso tra qualità e tempi di stampa.

Per la Legge Fondamentale della Dinamica (\vec{F}=m*\vec{a}) le forze esercitate dai motori sul telaio della stampante dipendono contemporaneamente sia dalle masse in movimento sia dalle accelerazioni che esse subiscono. Non è quindi possibile trovare un’accelerazione massima che sia corretta per ogni stampante, perché quest’ultima dipenderà dalle caratteristiche meccaniche di ciascuna macchina. In linea generale è corretto assumere che si possa aumentare la massima accelerazione di un asse nel caso in cui se ne siano alleggerite le parti in movimento, e viceversa.

È quindi possibile definire nel firmware le accelerazioni massime per ciascun asse (compresi gli estrusori!) in base alla loro inerzia (nel linguaggio comune diremmo lentezza e/o pesantezza). Tali accelerazioni definiscono la rapidità con cui l’attuale velocità di un asse possa essere variata per raggiungere una velocità target. In questo modo gli spostamenti pianificati dalla macchina possono essere modellati tenendo correttamente in considerazione anche le masse in movimento.

Il planner si occupa inoltre di concatenare gli spostamenti in modo che la velocità con cui termina un blocco sia la stessa di quella con cui comincia il blocco successivo (\vec{v^{i}}_{finale}=\vec{v^{i+1}}_{iniziale}), con lo scopo di rendere più “fluido” il passaggio da uno spostamento all’altro. La scelta della Junction Speed non è così scontata come potrebbe apparire ad una prima analisi ed è un fattore critico in grado di produrre effetti apprezzabili sui tempi di stampa.

Il jerk

Ogni spostamento è sempre associato ad una velocità: per raggiungerla è necessario effettuare una accelerazione[decelerazione], a seconda che la velocità attuale sia minore[maggiore] rispetto al target.

Supponiamo che la macchina abbia pianificato di dover eseguire due blocchi in successione: il blocco j a velocità \vec{v}_j ed il blocco k a velocità \vec{v}_k. La velocità di giunzione tra i due blocchi (incognita!) è \vec{v}_{junction}. Il blocco j è ora in esecuzione con velocità \vec{v}_j: gli rimane un tempo t_j per raggiungere \vec{v}_{junction}, ciò significa che si renderà necessaria una accelerazione \vec{a}_j = {\Delta \vec{v}}/{\Delta t} = {\vec{v}_{junction} - \vec{v}_j}/{t_j}. A questo punto il blocco k avrà a disposizione un tempo t_k per portarsi alla velocità \vec{v}_k, ciò significa che si renderà necessaria una accelerazione \vec{a}_k = {\Delta \vec{v}}/{\Delta t} = {\vec{v}_k - \vec{v}_{junction}}/{t_k}. In generale \vec{a}_j <> \vec{a}_k: ciò significa che il jerk (derivata dell’accelerazione nel tempo), assumerà un valore diverso da zero solo nell’intervallo di tempo durante la transizione da un’accelerazione all’altra, mentre sarà uguale a zero per il resto del tempo. Esso infatti è calcolato come \vec{jerk} = {\Delta \vec{a}} / {\Delta t} = {\vec{a}_k - \vec{a}_j}/{t_0}, laddove t_0 è un valore molto piccolo dell’ordine di pochi microsecondi. Il jerk è una variazione (aumento/diminuzione) di accelerazione che può produrre effetti indesiderati sulle stampe e questo sistema è in grado di mantenerlo a zero per la maggior parte del tempo.

Se i motori stepper incaricati di eseguire movimenti con jerk non nullo hanno abbastanza coppia (torque in inglese), allora saranno in grado di effettuare tali transizioni senza perdita di step (ovvero senza ridurre la precisione e la qualità di stampa). In caso contrario sarà necessario ridurre la massima accelerazione per gli assi che presentano problemi. Esiste però una funzionalità che permette di mantenere sempre il jerk a zero. Per informazioni, riferirsi alla guida S-Curve Acceleration

Algoritmi implementati

La guida sugli algoritmi attualmente implementati prosegue nelle rispettive pagine dedicate:

Autore: Simone Persiani

Encoder DAV per controllo filamento

0 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 5 (0 votes, average: 0,00 out of 5)
You need to be a registered member to rate this post.
Loading...

Encoder DAV per controllo filamento

Il sistema DAV (realizzato da D’Angella Vincenzo) permette di controllare con grande precisione i movimenti compiuti dal filamento durante la stampa. Tali movimenti vengono letti tramite un encoder che notifica la scheda elettronica inviando dei segnali di interrupt. MK4duo si occupa poi di confrontare i movimenti impartiti via software con quelli che effettivamente vengono rilevati dal DAV: in questo modo è possibile rilevare errori causati dalla fine del filamento o da un blocco avvenuto all’interno dell’estrusore.

Installazione

Trovare una sistemazione in cui l’encoder sia ben stabile e posizionato tra la bobina e l’estrusore in modo che il filo si inserisca e scorra agevolmente senza nessun impedimento o forzatura. L’encoder deve essere fissato ad un supporto che rimanga fermo durante la stampa. L’uscita del filamento dall’encoder deve essere posizionata in prossimità dell’estrusore o collegata ad esso con un tubo bowden di modo che il filamento non fletta durante le retrazioni, che così possono essere lette correttamente dall’encoder.

Collegamenti elettrici

Per questa sezione, a puro titolo di esempio, si è scelto di utilizzare la scheda RAMPS 1.4. I collegamenti elettrici devono essere adattati alla scheda della propria macchina.

L’encoder ha bisogno di alimentazione a 5V e di un terzo pin per inviare il segnale:

Nella RAMPS 1.4 per comodità conviene utilizzare un pin dei servo, in modo da avere i 5V, il GND ed il segnale vicini tra loro. Nella guida viene utilizzato il pin 4 ma è possibile utilizzare qualsiasi altro pin.

Configurazione di MK4duo

Per attivare l’encoder nel firmware, aprire il sito ufficiale di MK4duo e, nel menu a tendina dal titolo Firmware configurator, scegliere una versione >= MK4duo V4.3.3.

Se si sta già usando MK4duo sulla propria macchina, è necessario caricare la più recente versione del file Configuration_Overall.h e cliccare su Next step. Altrimenti, seguire preventivamente la guida del configuratore online.

Per configurare l’encoder DAV si deve accedere alla sezione Estrusori e scegliere il pin a cui è stato collegato (in questo caso il pin 4):

Ora si deve aprire la tab Funzioni e attivare Extruder encoder control. Di seguito sono da impostare due parametri per il corretto funzionamento dell’encoder, ovvero l'Encoder step for error detect ed il Min extruder step for check:

  • Encoder step for error detect: questo parametro indica ogni quanti millimetri di filo il firmware confronta la quantità teoricamente estrusa con quella effettivamente misurata dall’encoder.
  • Min extruder step for check: questo secondo parametro è una sorta di tolleranza o errore accettabile. Se la differenza tra il filo teoricamente estruso e quello misurato è inferiore a tale tolleranza il firmware continua la stampa, viceversa se l’errore è maggiore il firmware bloccherà la stampa mettendo la macchina in pausa.

Per un corretto funzionamento del sistema bisogna impostare il primo parametro per passaggi successivi. Si può iniziare eseguendo un controllo ogni 5mm di filamento estruso, diminuendo poi progressivamente il valore di Encoder step for error detect fino ad quando il firmware riuscirà a riconoscere gli errori “veri” e non metterà erroneamente la stampante in pausa.

Nell’esempio qui sotto è stato inserito 5 volte il valore degli step/mm dell’estrusione (450×5=2250), quindi l’encoder effettuerà un controllo ogni 5mm. Min extruder step for check è impostato a 50 step, circa il 10% di mm di errore tollerato

Configurazione fine di Encoder step for error detect

Per impostare correttamente gli step in base alla lettura seguita dal DAV encoder conviene misurare quanti step intercorrono tra due accensioni consecutive del led dell’encoder. Per avere una stima media degli step tra due accensioni conviene, ad hot end in temperatura, posizionare il filamento fino al punto in cui il led si accende. A questo punto estrudere un quantitativo noto di filamento (es. 100mm) e contare quante accensioni si hanno tra l’inizio e la fine dell’estrusione. Se ad esempio estrudendo 100mm di filamento si contano 97 accensioni, avremo 100/97=1,031mm medi tra due accensioni consecutive. A 450step/mm impostati nel firmware per l’estruder, questo equivale a 464 step medi tra due accensioni dell’encoder.

Nella pagina Funzioni alla voce Encoder step for error detect si dovranno impostare multipli degli steps calcolati con la procedura qui descritta. Se ad esempio misuriamo 464 step medi tra due accensioni e vogliamo eseguire un controllo ogni due secondi in Encoder step for error detect dovremo inserire 928 steps (circa 930).

Messa in pausa della stampante

Infine, nella sezione LCD, è necessario attivare la funzione Advanced Pause Feature:

Una volta impostati tutti i parametri adatti alla propria stampante, deve essere attivato il comando Park Head on Pause:

Compilazione e caricamento

Se sono già stati eseguiti tutti i passaggi descritti sopra, è finalmente possibile scaricare il firmware dalla tab Scarica. Si deve poi decomprimere l’archivio zip appena scaricato (facendo attenzione che tutti i file siano all’interno della cartella MK4Duo).

Aprire il file MK4duo.ino e andare nella scheda Configuration_Overall.h. Premere ctrl+F e cercare la parola “encoder“:

Scorrendo verso il basso è possibile trovare questa riga:

//#define INVERTED_ENCODER_PINS

Tale riga deve essere decommentata togliendo le doppie barre, in questo modo:

#define INVERTED_ENCODER_PINS

Ora non resta che verificare e caricare il firmware sulla propria stampante. Prima di cominciare a stampare, però, bisogna aggiungere il comando M530 S1 nello “Start gcode” e M530 S0 nell'”End gcode” tramite il proprio programma di slicing per attivare il controllo del filamento durante la stampa.