Differenza tra velocità di stampa e velocità d’estrusione.

3 votes, average: 4.67 out of 53 votes, average: 4.67 out of 53 votes, average: 4.67 out of 53 votes, average: 4.67 out of 53 votes, average: 4.67 out of 5 (3 votes, average: 4.67 out of 5)
You need to be a registered member to rate this post.
Loading...

Spero di farvi cosa gradita, facendo questa piccola guida sulla differenza delle due velocità:

  1. Quella di stampa
  2. Quella di estrusione

Chiedo scusa se i calcoli li facilito per essere più comprensivo, normale che andrebbero fatti più seriamente, ma quello che conta è il risultato finale che più o meno è quello giusto.

Ho notato che anche dai più esperti c’è un po di confusione su queste due velocità, quindi vediamo di capirci…

Immaginiamo di stampare con un nozzle da 0,4 mm di diametro e di stampare esattamente a 100 mm/s un layer da 0,4 mm (faccio cosi per semplificare poi capirete del perché).

Ora se noi dobbiamo fare una linea di 100 mm alta quindi 0,4 mm impiegheremo 1 s alla velocità di stampa. Ma questo non vuol dire che stiamo estrudendo a 100 mm/s, perché no?? E ora ve lo spiego.

Se utilizziamo un filamento di 1,75 mm di diametro e ipotizziamo di estrudere a 100 mm/s in 1 s abbiamo estruso appunto 100 mm di filo, quindi un cilindro alto 100 mm e largo 1,75, ora sappiamo che il volume di questo cilindro si calcola con la formula:

V = (π • r • r) • h

Quindi nel nostro caso è 0,875 * 0,875 * 3,14 * 100 = 240,40 mm3

Ora calcoliamo invece il volume del nostro filo depositato sul piatto lungo 100 mm e alto 0,4 (ripeto per facilitare i calcoli mi baso su un cilindro depositato, anche se non è esattamente cosi)

0,2 * 0,2 * 3,14 * 100 = 12,56 mm3

Molto molto di meno di quello che l’estrusore ha estruso… Quindi??? Semplice l’estrusore non va a 100 mm/s. E a quanto va se deve estrudere solo 12,56 mm3 di materiale??

Sapendo il diametro del filo che è appunto 1,75 e di conseguenza il raggio che è di 0,875 sappiamo che il volume che deve estrudere quello che ci serve sapere quanto altro deve essere il cilindro, quindi la lunghezza di filo che deve spingere nell’hotend.

La formula è quindi H = 12,56 / (0,875 * 0,875 * 3,14) = 5, 2244 circa. Questo è la lunghezza di filo da 1,75 mm di diametro che l’estrusore deve spingere nel nozzle per fare uscire un cilindro di 0,4 di diametro per 100 mm di lunghezza. E in quanto tempo lo deve spingere? Semplicemente nello stesso tempo che lo deposita quindi 1s, di conseguenza la velocità dell’estrusore è “udite udite”:

5,22 mm/s

E si è proprio cosi 5 mm/s…

E se facessimo un layer da 0,2 mm sempre lungo 100 mm, più o meno la metà quindi si muoverà a 2,5 mm/s……

RIPETO sono calcoli grezzi non sono esattamente cosi, perché vanno tenute in considerazioni altre variabili oltre al fatto che reputo il filo depositato cilindrico, ma che non è esattamente cosi. Ma i valori sono approssimativamente molto vicini…

Quindi non impazzite a chiedere all’estrusore velocità oltre i 50 mm/s perché non avrebbe alcun senso, per estrudere a quella velocità dovreste stampare a velocità più alte di 10 volte i 100 mm/s cioè 1000 mm/s…

Cercate invece di inserire valori esatti per le velocità d’estrusione nel fw e non pensate di avere estrusori da F1 che non serve a nulla…

Questi calcoli vengono fatti appositamente dallo slicer che sapendo il filamento che avete calcola il volume da estrudere e in base a questo di quanto effettivamente deve muoversi l’estrusore.

Un altro sistema è quello di usare il volumetrico, quindi lo slicer non calcola più quanto deve estrudere il vostro estrusore in base al filo inserito, ma comanda la stampante con un numero che è il volume da estrudere, sarà poi il fw a calcolarne l’effettivo movimento in base al filo inserito nell’estrusore. Qual’è il vantaggio di questo sistema è quello di avere un gcode creato dallo slicer universale sia che usiate filo da 1,75 sia che usiate quello da 3. Ancora meglio se usate il sensore di grandezza del filamento in questo modo il fw si adatta in maniera dinamica a secondo del diametro rilevato dal sensore stesso…

Un saluto da vostro MagoKimbra.

Gcode – G29 – Mesh Bed Level o Auto Bed Level

1 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 51 vote, average: 5.00 out of 5 (1 votes, average: 5.00 out of 5)
You need to be a registered member to rate this post.
Loading...

Finalmente arriviamo al comando più complesso che a molti crea non pochi problemi, G29 Mesh Bed Level o Auto Bed Leveling.

Prima di tutto vediamo la geometria che sta dietro al comando e come teoricamente va ad aggiustare il livellamento del piano.

Quando la stampante con la sua probe prende un punto del piano viene memorizzato in una matrice che contiene le tre coordinate di quel punto (X, Y, Z), la matrice poi viene usata da Vector che crea dei vettori di collegamento da punto a punto. La stampante muoverà il nozzle nello spazio tenendo conto di quei vettori.

Esempio: Se nel punto X 10 Y 10 ho una Z pari a 0 e nel punto X 150 Y10 ho una Z pari a 2 ho un vettore che va da (10, 10, 0) a (150, 10, 2) quindi un vettore che sale leggermente da sinistra verso destra.

Cosi per tutti i punti del piano, naturalmente il sistema non fa altro che collegare con vettori tutti i punti del piano che sono stati sondati, senza sapere minimamente cosa succede nel mezzo…

Esistono due modi per fare i vari probe, uno è con una griglia di punti n * n  e l’altro invece è tre punti, ricordando che una regola di geometria ci dice che per tre punti nello spazio passa uno solo piano.

bed-leveling-method-1[1]

 

La prima cosa è decidere che tipo di compensazione vogliamo, per ke Cartesiane e Core:

  • MESH_BED_LEVELING
  • AUTO_BED_LEVELING_LINEAR
  • AUTO_BED_LEVELING_BILINEAR
  • AUTO_BED_LEVELING_3POINT

Per le Delta ne esiste solo uno che è:

AUTO_BED_LEVELING_FEATURE (Che è di tipo bilinear come per le cartesiane e core)

Quindi sono fondamentali i valori che andiamo a settare nel FW per MBL.

  • MESH_INSET 10
  • MESH_MIN_X
  • MESH_MAX_X
  • MESH_MIN_Y
  • MESH_MAX_Y

Per i sistemi MBL, LINEAR e BILINEAR (anche Delta) dobbiamo definire il numero dei punti della griglia

  • GRID_MAX_POINTS_X
  • GRID_MAX_POINTS_Y
  • GRID_MAX_POINTS (SOLO DELTA)

E infine i punti minimi e massimi per le due coordinate sul piano cioè X e Y

#define LEFT_PROBE_BED_POSITION 20
#define RIGHT_PROBE_BED_POSITION 180
#define FRONT_PROBE_BED_POSITION 20
#define BACK_PROBE_BED_POSITION 180

Left è il minimo a sinistra e Right è il massimo a destra, Front è il minimo avanti mentre Back è il massimo indietro. Questi punti dovrebbero essere all’interno del piano. All’interno di questi punti viene creata la nostra griglia n * n. Se la griglia è di 2 allora saranno esattamente i punti di probe, altrimenti verranno creati (n – 2) punti all’interno di quest’area.

Se invece abbiamo definito il 3 POINT definiamo i tre punti di probe.

#define ABL_PROBE_PT_1_X 15
#define ABL_PROBE_PT_1_Y 180
#define ABL_PROBE_PT_2_X 15
#define ABL_PROBE_PT_2_Y 15
#define ABL_PROBE_PT_3_X 180
#define ABL_PROBE_PT_3_Y 15

Ora veniamo a qualcosa di fondamentale la distanza tra la probe e il nozzle nello spazio definita con i seguenti comandi:

#define X_PROBE_OFFSET_FROM_NOZZLE 0 // X offset: -left [of the nozzle] +right
#define Y_PROBE_OFFSET_FROM_NOZZLE 0 // Y offset: -front [of the nozzle] +behind
#define Z_PROBE_OFFSET_FROM_NOZZLE -1 // Z offset: -below [of the nozzle] (always negative!)

Come vedete è spiegato abbastanza bene come devono essere messi i valori… Se X offset è negativo vuol dire chela sonda è a sinistra del nozzle, se positivo starà a destra. Cosi se Y è negativo vuol dire che è davanti al nozzle, altrimenti starà dietro. Questi due valori devono essere interi, non essenziale una precisione enorme. Questi due valori però andranno a influire sui punti di probe.

Sia che sia una griglia che siano i tre punti, la posizione X Y è della probe e non del nozzle, quindi il nozzle si troverà spostato rispetto al punto di probe di un tot determinato dagli offset. Vado a farvi un esempio abbiamo un offset su X di -25 quindi la sonda è a sinistra del nozzle di 25 mm. Ora andiamo a fare la probe nel primo punto cosi come settato di default:

LEFT_PROBE_BED_POSITION 20

La probe andrà sul punto 20 e il nozzle? Il nozzle andrà a 20 + 25 quindi a 45 nel piano. Fin qui tutto bene.  Andiamo a fare la probe sul secondo punto a destra:

RIGHT_PROBE_BED_POSITION 180

Quindi la sonda starà a 180 mentre il nozzle a 180 + 25 = 205, Se abbiamo messo come valore X_MAX_POS 200 ecco che in compilazione del FW quest’ultimo ci avvertirà con un warning (che non è un errore come tanti e tanti dicono perché non leggono ciò che è scritto) che la posizione massima è stata superata e che non è possibile fare una probe nel punto 180, il massimo che possiamo raggiungere è 175. Stessa identica cosa vale per Y.

Cosa invece serve lo Z_PROBE_OFFSET che come dice il FW DEVE essere solo negativo. Perché negativo? Perché la sonda deve rilevare il piano prima che il nozzle lo tocchi altrimenti crash…

Questo valore è indipendente se la sonda stia più alta del nozzle (vedi pibot o sonde ottiche, oppure quelle di prossimità) o che tramite un movimento meccanico (Servo e/o Bltouch) stia più in basso del nozzle, l’importante è solo che deve rilevare il piano n mm prima del nozzle, questo valore n è il nostro Z_OFFSET.

Questo valore può essere trovato in diversi modi e poi inserito direttamente nel fw con il comando M666 P.

Uno di questi modi è quello di misurare l’altezza vera del nozzle con il solito metodo del foglio, a quel punto dovremmo avere un valore di Z pari a zero, quindi saliamo per poi riscendere piano fino a che non vediamo attivarsi la nostra sonda, magari aiutandoci con il comando M119 che ci dirà se la probe è triggered o meno. a quel punto la differenza d’altezza sarà il nostro offset.

Ricordatevi che esistono i comandi M401 e M402 per le sonde con servo (anche BLTOUCH) che faranno scendere la probe o risalire…

Quindi come è chiaro questo valore Z_PROBE_OFFSET deve essere preciso al centesimo di mm questo perché andrà a influire sull’ABL.

Altri setting da fare sono:

#define XY_TRAVEL_SPEED 10000               // X and Y axis travel speed between probes, in mm/min

#define Z_PROBE_SPEED_FAST 120            // Speed for the first approach when double-probing (with PROBE_DOUBLE_TOUCH)

#define Z_PROBE_SPEED_SLOW 60           // Speed for the “accurate” probe of each point

#define PROBE_DOUBLE_TOUCH               // Use double touch for probing

Come ben spiegato la velocità di spostamento da un punto all’altro dei vari probe, espressa in mm al minuto, quindi 10000 sono circa 166 mm/s.

#define Z_PROBE_DEPLOY_HEIGHT  10    // Z position for the probe to deploy/stow
#define Z_PROBE_BETWEEN_HEIGHT 5  // Z position for travel between points

Questi dicono al FW quanto si deve alzare il nozzle di Z prima (DEPLOY) di iniziare a sondare, per esempio per chi ha probe con il servo. Se per caso la probe è sul piano e il servo farà scendere la probe potremmo causare un altro crash… Poi c’è il valore BETWEEN cioè tra una probe e l’altra, tendenzialmente può essere anche di soli pochi mm, ma ci sono alcune sonde vedi Pibot, che necessitano di arrivare da lontano per avere una misura più precisa, anche quelle di prossimità, quindi meglio allontanarsi di diversi mm anche 10 mm per fare in modo che la sonda rilevi il piano con maggior accuratezza..

Infine ultimamente è possibile dire anche che tipo di sonda abbiamo montato, se di tipo servo lo si farà nel solito modo, altrimenti dobbiamo solo dire al fw che tipo abbiamo:

  • Z_ENDSTOP_SERVO_NR
  • PROBE_MANUALLY
  • Z_PROBE_FIX_MOUNTED
  • BLTOUCH (Solo originale altrimenti settare servo)
  • Z_PROBE_SLED (Solo Cartesiane e Core)
  • Z_PROBE_ALLEN_KEY (Solo Delta)

Servo sono tutte quelle probe che hanno come base un movimento fatto da un servo anche emulato, tranne i BLTOUCH originali che hanno il loro setting.

La PROBE_MANUALLY permette di poter prendere i vari punti di probe manualmente cioè proprio muovendo su e giù il nozzle con i comandi gcode regolare la giusta altezza con distanziometri o il classico foglio di carta.

La Z_PROBE_FIX_MOUNTED sono tutte quelle sonde fissate, anch’esse non hanno movimento alcuno e sono per esempio il PiBot o quelle di prossimità.

La Z_PROBE_SLED è una sonda che normalmente rimane staccata dal carrello X, viene parcheggiata fuori e agganciata solo quando serve in maniera magnetica e ha la sonda fissa non si muove quindi abbastanza precisa. Una cosa simile è stata fatta sulla Prusa I3 EVO di NicolaP.

La Z_PROBE_ALLEN_KEY è la classica sonda della Kossel con la barretta a L con molla, che ha bisogno di un movimento particolare per lo sgancio e aggancio finale, quindi bisognerà definire bene i punti di partenza e di stop dei due movimenti.

 

Arriviamo al comando vero e proprio, per MBL:

Uso

G29 S<0|1|2|3|4|5>

Argument Description
S<0|1|2|3|4|5>

S0: Produce a mesh report (see example 1)

S1: Start probing mesh points

S2: Probe the next mesh point

S3: Manually modify a single point

S4: Set Z-Offset, positive away from bed, negative closer to bed.

S5: Reset and disable mesh

 

Per ABL:

Uso

G29 [A<bool>] [B<pos>] [D<flag>] [F<pos>] [J<bool>] [L<pos>] [P<int>] [Q<bool>] [R<pos>] [S<rate>] [T<flag>][V<1|2|3|4>] [W<bool>] [X<int/float>] [Y<int/float>] [Z<float>]

Argument Description
[A<bool>] Abort leveling procedure in-progress (PROBE_MANUALLY)
[B<pos>] Set the back limit of the probing grid (AUTO_BED_LEVELING_LINEAR and AUTO_BED_LEVELING_BILINEAR)
[D<flag>] Dry-Run mode. Just probe the grid but don’t update the bed leveling data
[F<pos>] Set the front limit of the probing grid (AUTO_BED_LEVELING_LINEAR and AUTO_BED_LEVELING_BILINEAR)
[J<bool>] Jettison the leveling data stored in SRAM and turn off leveling compensation. Data in EEPROM is not affected.
[L<pos>] Set the left limit of the probing grid (AUTO_BED_LEVELING_LINEAR and AUTO_BED_LEVELING_BILINEAR)
[P<int>] Set the size of the square grid that will be probed – P x P points (AUTO_BED_LEVELING_LINEAR,)
[Q<bool>] Query the current leveling state (PROBE_MANUALLY, DEBUG_LEVELING_FEATURE)
[R<pos>] Set the right limit of the probing grid (AUTO_BED_LEVELING_LINEAR and AUTO_BED_LEVELING_BILINEAR)
[S<rate>] Set the XY travel speed between probe points (AUTO_BED_LEVELING_LINEAR and AUTO_BED_LEVELING_BILINEAR)
[T<flag>] Generate a Bed Topology Report (AUTO_BED_LEVELING_LINEAR)
[V<1|2|3|4>] Set the verbose level
[W<bool>] Write a mesh Z offset (PROBE_MANUALLY). W requires X, Y, and Z.
[X<int/float>] Override the X-size of the grid that will be probed (Linear). Specify X when setting a mesh value (PROBE_MANUALLY).
[Y<int/float>] Override the Y-size of the grid that will be probed (Linear). Specify Y when setting a mesh value (PROBE_MANUALLY).
[Z<float>] Specify the Z offset when setting a mesh value (PROBE_MANUALLY).

Uno dei problemi che noto spesso è quello del montaggio della probe. Io ho sempre cercato di metterla più vicina possibile al nozzle:

20141117_161557

Questo perché? Semplice il problema nasce quando la probe è molto spostata rispetto al nozzle visto che va a sondare un punto, ma il nozzle è totalmente da un’altra parte, questo crea una matrice vettoriale falsata e non precisa. Mi spiego, se la sonda è 50 mm alla destra del nozzle quando la sonda va a sondare il punto 50 di X il nozzle è nel punto X = 0 quindi va inserire un altezza nella matrice X Y Z di un punto che non centra nulla… Quindi si creano dei vettori falsati rispetto al piano..

Il mio consiglio è sempre quello di mettere la sonda il più vicino possibile al nozzle, difatti la miglior posizione sarebbe il nozzle stesso…

Un altro problema è la precisione stessa della sonda, una sonda che rileva nello stesso punto diversi valori che si discostano di decimi di mm non è affidabile, per provarla basta fare la home di Z al centro diverse volte per verificare che l’altezza di Z rilevata sia si diversa (è impossibile averla sempre uguale), ma con differenze di non più di centesimi di mm…

MagoKimbra

Update V4.2.85

2 votes, average: 5.00 out of 52 votes, average: 5.00 out of 52 votes, average: 5.00 out of 52 votes, average: 5.00 out of 52 votes, average: 5.00 out of 5 (2 votes, average: 5.00 out of 5)
You need to be a registered member to rate this post.
Loading...
Update V4.2.85
* Add Stop and Save for Restart (SSR)
 
Per ora proviamo solo la funzione poi aggiungeremo il check di un pin per la mancanza di tensione…
 
Da LCD c’è il comando Stop and Save (Stop e Salva)
Da Host M33 in qualsiasi momento mentre sta stampando da SD.
 
Il FW salva in SD un file chiamato restart.gcode con posizione corrente, temperature, nome del file in stampa e linea di file SD letta.
 
Il FW farà per le delta una home totale e per le altre solo di X Y, spegne tutto e si mette in pausa, In caso di vera mancanza di corrente questo naturalmente, a meno di usare UPS, non sarà possibile.
 
Quando si rivuole iniziare basterà far partire il file restart.gcode, il quale non farà altro che rifare la home, portare a temperatura i riscaldatori, bed e chamber compresi, spostarsi nell’ultima posizione nota, riaprire il file precedente in SD e cominciare a leggere dall’ultima riga letta.
 
Si può usare anche per fermare la stampa se si hanno dei problemi o per qualsiasi altro motivo…
 
Buone stampe dal vostro MagoKimbra.

Update V4.2.84

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...

Update V4.2.84
* Add Mesh Bed Level (MBL)

Il Mesh Bed Level è da un po che c’è su Marlin dev, ma non gli avevo dato molta importanza. Dopo una chiacchierata con Josef Prusa sulla sua MK2, che mi ha detto che per funzionare bene il suo sistema di bed level ha bisogno proprio del Mesh Bed Level, ho deciso d’implementarlo…
In Pratica è un Bed Level manuale o con sonda, ma che poi memorizza i valori in eeprom per non doverlo rifare ogni volta. In più può essere abilitato o meno con il comando M420 e modificare i valori in singoli punti.

Per esempio posso fare un test in punto qualsiasi del piano e viene aggiornata la mappatura, senza dover rifare tutto…
Mi sembra molto interessante, peccato non averlo capito prima… Ma non si può sempre avere tutto o no?

Sono consigliati endstop ottici o di prossimità. Questo perché funziona alla rovescia dell’ABL.
Non misura l’altezza del piano, ma si regola la Z in determinati punti con il classico metodo del foglio e quindi magari scendendo oltre l’endstop. Con un sistema meccanico tipo switch (con servo o meno) questo è impossibile per via del fatto che non si può scendere oltre allo switch stesso, pena rottura di qualcosa…
Per esempio il sistema di Josef Prusa prevede il prossimetro, con delle parti in metallo infilate nel suo piano fatto ad Hoc. In questo nodo c’è il margine per scendere oltre lo zero fatto dal prossimetro…


Buone stampe dal vostro Mago Kimbra!!!

Update V4.2.83

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...

* Add Cooler and Hot Chamber

* Add Laser Beam PWM and raster base64

* Add DONDOLO_DUAL_MOTOR for DONDOLO bowden and dual extruder

* Add reader TAG width MFRC522