Gcode – G29 – Auto bed level Cartesian & Core

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 Auto Bed Leveling o ABL.

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 (dove n è AUTO_BED_LEVELING_GRID_POINTS) 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]

 

Quindi sono fondamentali i valori che andiamo a settare nel FW per un corretto ABL.

AUTO_BED_LEVELING_GRID

Se abilitato definiamo la griglia quindi successivamente il numero dei punti

AUTO_BED_LEVELING_GRID_POINTS

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 la griglia non è definita allora andremo a settare esattamente le coordinate dei 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_EXTRUDER 0 // X offset: -left [of the nozzle] +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front [of the nozzle] +behind
#define Z_PROBE_OFFSET_FROM_EXTRUDER -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

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_RAISE_BEFORE_PROBING 10 //How much the extruder will be raised before travelling to the first probing point.
#define Z_RAISE_BETWEEN_PROBINGS 5 //How much the extruder will be raised when travelling from between next probing points
#define Z_RAISE_AFTER_PROBING 5 //How much the extruder will be raised after the last probing point.

Questi dicono al FW quanto si deve alzare il nozzle di Z prima (BEFORE) 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 un RAISE AFTER, cioè dopo aver fatto tutti i probe si alza per poter portare la sonda a posto senza eventualmente toccare il piano (vedi servo).

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_PROBE_SLED

Z_PROBE_MECHANICAL

Z_PROBE_FIX_MOUNTED

La 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 MECHANICAL è di tipo fisso non c’è movimento alcuno, un sonda di tipo meccanico per esempio è il nozzle stesso che o a pressione sul piano o con qualche connessione elettrica particolare abilita il pin.

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

 

Arriviamo al comando vero e proprio.

G29

uso

  • G29 P<#> S<# speed> D V<#> T F<#> B<#> L<#> R<#>

parametri

  • P numero di punti della griglia se si vuole variare quello di default.
  • S travel speed in mm/min
  • D Flag per il Dryrun mode. Praticamente fa completamente tutto, ma non varia la matrice vettoriale. E’ un test.
  • V Verbose level 0 – 4. Setta quante informazioni ci deve dare il fw indietro, 0 nessuna 4 massimo. Da mettere solo nella fase di controllo.
  • T fa un report della topologia del piano con tutte le informazioni possibili (Verbose 4 fa la stessa cosa oltre a tante altre info).
  • F posizione frontale della griglia, utile per cambiare i punti di probe solo nello spazio utilizzato dal pezzo.
  • B posizione posteriore della griglia, utile per cambiare i punti di probe solo nello spazio utilizzato dal pezzo.
  • L posizione sinistra della griglia, utile per cambiare i punti di probe solo nello spazio utilizzato dal pezzo.
  • R posizione destra della griglia, utile per cambiare i punti di probe solo nello spazio utilizzato dal pezzo.

 

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…

Un altro modo di livellare il piano con il FW è quello del MBL Mesh Bed Level che vedremo nel prossimo post, per ora il vostro Mago vi augura come sempre delle buone stampe…

 

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

Gcode – G28 – Home

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

Il comando per la home…

Questo comando serve per azzerare gli assi e le posizioni nello spazio del nozzle. Ricordo per l’ennesima volta che il punto fondamentale è il nozzle quello che disegna nello spazio il nostro oggetto. Non ci sono piatti, carrelli o altre cose che contano solo ed esclusivamente il nozzle…

La home viene fatta nelle posizioni dei tre endstop X Y Z, se si trova sul min il valore di quell’asse una volta toccato l’endstop prenderà il valore min messo nella configurazione, viceversa se è sul max, il valore max inserito.

Esempio faccio una home di X che è sul min, una volta toccato l’endstop X_MIN il valore minimo di X è uguale X_MIN_POS. Se invece faccio una home di Y che è sul max, una volta toccato l’endstop y sarà uguale a Y_MAX_POS.

I valori _MIN_POS e _MAX_POS possono essere variati anche in negativo, per ciò che riguarda _MIN_POS, per fare in modo che il nozzle sia sempre nel piatto di disegno sia in posizione min che max.

uso

Questo comando può essere utilizzato senza alcun parametro aggiuntivo. Per la Delta non esiste la Home per singolo asse, solo la home complessiva.

  • G28 X Y Z B

parametri

  • X Flag per fare la home X
  • Y Flag per fare la home Y
  • Flag per fare la home Z
  • B Flag per tornare al punto prima della home

L’ordine della home è sempre X Y Z, nel caso di una Delta le tre carriage tornano indietro contemporaneamente fino al tocco di una delle carriage sugli endstop, a quel punto il firmware farà la home singola per ogni torre.

In caso in cui si fosse abilitato lo Z_SAFE_HOMING (no DELTA), dopo la home di X e Y il fw farà la home di Z spostandosi nel punto Z_SAFE_HOMING_X_POINT Z_SAFE_HOMING_Y_POINT per fare la home di Z, di solito si usa quando si hanno le probe per fare la home sul piano e non fuori dal piano, o anche se si hanno meccaniche particolari dove l’endstop Z è messo in un punto particolare della meccanica…

Il comando B serve per tornare nel punto noto prima della home, vale solo se già è stata fatta una home precedentemente…

Esempio il nozzle si trova a X 12,75 Y 56,28 Z 1,2 e per qualche motivo la stampante ha perso i passi, si può mettere in pausa il tutto, dare il comando G28 B,  il firmware farà la home azzerando cosi gli assi per poi riportarsi nei punti su detti e riprendere la stampa. Naturalmente se la home prevede la sonda al centro è impossibile poter fare questo comando perché oramai al centro c’è il pezzo in stampa…