Guida G-code

1.G - code #

1.1.G0, G1 - Sposta #

Con questo post iniziamo a vedere i comandi RepRap Gcode nella loro interezza.

Un RepRap Gcode è un elenco di campi separati da spazi bianchi o interruzioni di riga. Un campo può essere interpretato come un comando, un parametro o per qualsiasi altro scopo speciale. Si compone di una lettera direttamente seguita da un numero o può essere solo una lettera stand-alone (Flag). La lettera fornisce informazioni sul significato del campo. I numeri possono essere numeri interi (128) o numeri frazionari (12.42), a seconda del contesto.

Iniziamo con il classico e primo comando G0 e G1.

  • G0 Rapido movimento lineare
  • G1 Spostamento lineare

uso

  • G0 Xnnn Ynnn Znnn Ennn Fnnn Pnnn
  • G1 Xnnn Ynnn Znnn Ennn Fnnn Pnnn

parametri

Non tutti i parametri devono essere utilizzati, ma almeno uno deve essere usato.

  • Xnnn La posizione per spostarsi sull’asse X
  • Ynnn La posizione per spostarsi sull’asse Y
  • Znnn La posizione per spostarsi sull’asse Z
  • Ennn L’importo da estrudere tra il punto di partenza e il punto finale
  • Fnnn L’avanzamento per minuto del movimento tra il punto di partenza e il punto finale
  • Pnnn Questo comando si usa solo con l’utilizzo del Flusso Canalizzatore. Purge (Pulizia Nozzle) di nnn. La differenza con il parametro E è che l’avanzamento dell’estrusore di nnn è calcolato tramite la percentuale Color Density che vedremo dopo.

esempi

  • G0 X12 (spostare a 12 mm sull’asse X)
  • G0 F1500 (Impostare la velocità di avanzamento a 1500 mm minuto)
  • G1 X90.6 Y13.8 E22.4 (Sposta 90,6 millimetri sull’asse X e 13,8 millimetri sull’asse Y mentre estrude 22,4 millimetri di materiale)

 

Vi ricordo che i parametri di movimento sono riferiti alle coordinate relative o assolute.

Se ci troviamo nelle coordinate assolute il movimento è assoluto cioè il valore dato nel primo esempio (G0 X12) vuol dire sposta a X 12 quindi nella coordinata X 12 esatta.

Se ci troviamo nelle coordinate relative il valore è relativo alla coordinata attuale, quindi sempre nel primo esempio il valore X 12 vuol dire sposta di 12 di X rispetto alla posizione attuale.

Anche l’estrusore ha delle coordinate, in questo caso lineari (LUNGHEZZA), un esempio di errore comune quando si cerca di estrudere un tot di mm di filo. Per esempio un G1 E10 non vuol dire estrudi 10 mm, ma a secondo del sistema di coordinate ha un suo funzionamento. Nelle Coordinate assolute vuol dire sposta l’estrusore nella posizione 10, vuol dire che se si trova nella posizione di filo 0 allora spostandosi a 10 estruderà 10 mm, ma se si trova in una posizione superiore a 10, per esempio 15,  vorrà dire che farà una ritrazione di 5 per arrivare a 10.

Nelle coordinate relative allora il funzionamento è esattamente quello di spostarsi di 10 rispetto alla posizione attuale, mentre un G1 E-10 farà una ritrazione di 10.

esempi

  • Posizione di E attuale 7, coordinate assolute, G1 X10 -> estrude 3 mm (nuova coordinata E 10)
  • Posizione di E attuale 7, coordinate assolute, G1 X-5 -> ritrae 12 mm (nuova coordinata E -5)
  • Posizione di E attuale 7, coordinate relative, G1 X10 -> estrude 10 mm (nuova coordinata E 17)
  • Posizione di E attuale 7, coordinate relative, G1 X-5 -> ritrae 5 mm (nuova coordinata E 2)

Successivamente spiegherò il comando per cambiare il sistema di coordinate, di default il sistema è assoluto.

Yes No
Last updated on 26th May 2017

1.2.G2, G3 – Sposta ad arco #

Movimento ad arco da un punto a un altro.

g2[1]

uso

  • G2 xnnn Ynnn Innn Jnnn Ennn Fnnn (Arco in senso orario)
  • G3 xnnn Ynnn Innn Jnnn Ennn Fnnn (Arco in senso antiorario)

parametri

  • Xnnn La posizione per spostarsi sull’asse X
  • Ynnn La posizione per spostarsi sull’asse Y
  • Innn Il punto nello spazio X dalla posizione X corrente per mantenere una distanza costante
  • Jnnn Il punto nello spazio Y dalla posizione Y corrente per mantenere una distanza costante
  • Ennn L’importo da estrudere tra il punto di partenza e il punto finale
  • Fnnn L’avanzamento per minuto del movimento tra il punto di partenza e il punto finale

esempi

  • G2 X90.6 Y13.8 I5 J10 E22.4 (Muovi ad arco in senso orario dal punto corrente al punto (X = 90,6, Y = 13,8), con un punto centrale a (X = current_X + 5, Y = current_Y + 10), estrusione 22,4 millimetri di materiale tra partenza e arrivo)
  • G3 X90.6 Y13.8 I5 J10 E22.4 (Muovi ad arco in senso antiorario dal punto corrente al punto (X = 90,6, Y = 13,8), con un punto centrale a (X = current_X + 5, Y = current_Y + 10), estrusione 22,4 millimetri di materiale tra partenza e arrivo)

 

Yes No
Last updated on 23rd May 2016

1.3.G4 - Pausa #

Comando per pausa.

uso

  • G4 Pnnn o Snnn

parametri

  • Pnnn Tempo di attesa, in millisecondi
  • Snnn Tempo di attesa, in secondi

esempio

  • G4 P200 pausa di 200 millisecondi
  • G4 S10 pausa di 10 secondi
Yes No
Last updated on 23rd May 2016

1.4.G5 - Bézier cubic spline #

G5 creates a cubic B-spline in the XY plane with the X and Y axes only. P and Q must both be specified for every G5 command. For the first G5 command in a series of G5 commands, I and J must both be specified. For subsequent G5 commands, either both I and J must be specified, or neither. If I and J are unspecified, the starting direction of this cubic will automatically match the ending direction of the previous cubic (as if I and J are the negation of the previous P and Q).


Usage

G5 I<pos> J<pos> P<pos> Q<pos> X<pos> Y<pos>

Argument Description
I<pos> X incremental offset from start point to first control point
J<pos> Y incremental offset from start point to first control point
P<pos> X incremental offset from start point to first control point
Q<pos> Y incremental offset from start point to first control point
X<pos> A coordinate on the X axis
Y<pos> A coordinate on the Y axis

Notes

It is an error if an axis other than X or Y is specified.

Examples

For example, to program a curvy N shape:

G0 X0 Y0
G5 I0 J3 P0 Q-3 X1 Y1

A second curvy N that attaches smoothly to this one can now be made without specifying I and J:

G5 P0 Q-3 X2 Y2
Yes No
Last updated on 26th May 2017

1.5.G7 - Laser raster base64 #

Coming soon

Yes No
Last updated on 26th May 2017

1.6.G10, G11 - Ritrai e Recupera #

Ritrai e recupera solo in caso in cui si sia abilitato il FWRETRACT.

uso

  • G10 ritrae filamento in base alle impostazioni di M207
  • G11 recupera filamento in base alle impostazioni di M208
Yes No
Last updated on 23rd May 2016

1.7.G12 - Clean the Nozzle #

Start the nozzle cleaning process. Two types of cleaning patterns are supported ”=>” stroke-based and zigzag-based. This feature requires a dedicated cleaning area on or outside the bed, but within reach of the nozzle.

Usage
G12 [P<0|1>] [S] [T]
Argument Description
[P<0|1>]
Pattern style selection

[S]
Number of strokes (i.e. back-and-forth movements)

[T]
Number of repetitions

Notes
Default behavior is defined by NOZZLE_CLEAN_STROKES, NOZZLE_CLEAN_START_POINT, NOZZLE_CLEAN_END_POINT and NOZZLE_CLEAN_PARK.

With NOZZLE_CLEAN_PARK enabled, the nozzle automatically returns to the XYZ position before G12.

Examples
The most basic example is to use the command without any arguments, this will default to a stroke based pattern which will be stroked NOZZLE_CLEAN_STROKES times.

G12 ; stroke pattern (default)
To generate a three triangle zig-zag pattern which will be stroked one time use the following command.

G12 P1 S1 T3 ; zig-zag pattern with 3 triangles

Yes No
Last updated on 26th May 2017

1.8.G20 - Unità in pollici #

Setta l’unità di misura in pollici. In questo modo tutte le posizioni, gli offsets, le velocità, le accelerazioni, etc., specificate nei parametri del G-Code sono interpretate in pollici.

USO: G20

Yes No
Last updated on 11th May 2017

1.9.G21 - Unità in millimetri #

Setta l’unità di misura in millimetri. In questo modo tutte le posizioni, gli offsets, le velocità, le accelerazioni, etc., specificate nei parametri del G-Code sono interpretate in millimetri.

USO: G21

Yes No
Last updated on 11th May 2017

1.10.G27 - Park the nozzle #

Park the nozzle at a predefined XYZ position.


Usage

G27 [P<0|1|2>]

Argument Description
[P<0|1|2>] Z axis action

P0: If current Z-pos is lower than Z-park then the nozzle will be raised to reach Z-park height

P1: No matter the current Z-pos, the nozzle will be raised/lowered to reach Z-park height

P2: The nozzle height will be raised by Z-park amount but never going over the machine’s limit of Z_MAX_POS

Notes

Requires NOZZLE_PARK_FEATURE.

The park position is defined by NOZZLE_PARK_POINT.

Examples

The most basic example is to use the command without any arguments, this will default to a move the the parking position and raising the Z-pos if lower than the default Z-park position.

G27 ; raise Z if lower

This one is useful to be used on the end-script of a print, it will raise the Z-pos by Z-park.

G27 P2 ; always raise Z
Yes No
Last updated on 11th May 2017

1.11.G28 - Home #

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…

Yes No
Last updated on 23rd May 2016

1.12.G29 - Mesh Bed Level or Auto Bed Level #

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

Yes No
Last updated on 9th August 2017

1.13.G30 - Single Z-Probe #

Do a single Z probe at a specified position. By default probe in the current position.


Usage

G30 [X<pos>] [Y<pos>]

Argument Description
[X<pos>]

X probe position

[Y<pos>]

Y probe position

Yes No
Last updated on 26th May 2017

1.14.G31 - Dock Sled #

Dock the Z probe sled.


Usage

G31

Notes

Requires Z_PROBE_SLED.

Example

Dock the sled

G31
Yes No
Last updated on 26th May 2017

1.15.G32 - Undock Sled #

Undock the Z probe sled.


Usage

G32

Example

Undock the sled

G32
Yes No
Last updated on 26th May 2017

1.16.G33 - Delta Auto Calibration 1 #

Cooming soon

Yes No
Last updated on 26th May 2017

1.17.G33 - Delta Auto Calibration 2 #

With the G33 command you can:

  • Probe a circular grid of points,
  • calibrate Delta Height,
  • calibrate endstops,
  • calibrate Delta Radius, and
  • calibrate Tower Angles.

Usage

G33 [P<1|2|3|4-7>] [T<bool>] [V<0|1|2>]

Argument Description
[P<1|2|3|4-7>]
  • P1:

    Probe center and set height only.

  • P2:

    Probe center and towers. Set height, endstops, and delta radius.

  • P3:

    Probe all positions – center, towers and opposite towers. Set all.

  • P4-7:

    Probe all positions at different locations and average them.

[T<bool>]

Enable or disable tower angle corrections calibration (P3P7)

[V<0|1|2>]

Set the verbose level

  • V0:

    Dry run, no calibration

  • V1:

    Report settings

  • V2:

    Report settings and probe results

Examples

Default (Verbose 1)

G33

> G33 Auto Calibrate
> Checking... AC
> .Height:295.00    Ex:+0.00  Ey:+0.00  Ez:+0.00    Radius:100.00
> .Tower angle :    Tx:+0.00  Ty:+0.00  Tz:+0.00
> Iteration : 01                                    std dev:2.665
> .Height:297.85    Ex:-0.18  Ey:-0.13  Ez:+0.00    Radius:100.68
> .Tower angle :    Tx:-0.05  Ty:+0.08  Tz:+0.00
> Iteration : 02                                    std dev:0.128
> .Height:297.77    Ex:-0.19  Ey:-0.09  Ez:+0.00    Radius:100.80
> .Tower angle :    Tx:-0.07  Ty:+0.15  Tz:+0.00
> Iteration : 03                                    std dev:0.025
> .Height:297.78    Ex:-0.17  Ey:-0.09  Ez:+0.00    Radius:100.78
> .Tower angle :    Tx:-0.09  Ty:+0.20  Tz:+0.00
> Iteration : 04                                    std dev:0.022
> .Height:297.80    Ex:-0.14  Ey:-0.07  Ez:+0.00    Radius:100.79
> .Tower angle :    Tx:-0.10  Ty:+0.22  Tz:+0.00
> Iteration : 05                                    std dev:0.019
> .Height:297.81    Ex:-0.13  Ey:-0.06  Ez:+0.00    Radius:100.80
> .Tower angle :    Tx:-0.10  Ty:+0.25  Tz:+0.00
> Calibration OK                                    rolling back.
> .Height:297.80    Ex:-0.14  Ey:-0.07  Ez:+0.00    Radius:100.79
> .Tower angle :    Tx:-0.10  Ty:+0.22  Tz:+0.00
> Save with M500 and/or copy to Configuration.h

Verbose 2

G33 V2

> G33 Auto Calibrate
> Checking... AC
> .Height:297.80    Ex:-0.14  Ey:-0.07  Ez:+0.00    Radius:100.79
> .Tower angle :    Tx:-0.10  Ty:+0.22  Tz:+0.00
> .      c:+0.01     x:+0.06   y:+0.04   z:+0.01
> .                 yz:-0.02  zx:-0.01  xy:+0.01
> Iteration : 01                                    std dev:0.028
> .Height:297.81    Ex:-0.10  Ey:-0.04  Ez:+0.00    Radius:100.81
> .Tower angle :    Tx:-0.10  Ty:+0.24  Tz:+0.00
> .      c:-0.03     x:-0.01   y:-0.02   z:-0.03
> .                 yz:-0.05  zx:-0.05  xy:-0.06
> Calibration OK                                    rolling back.
> .Height:297.80    Ex:-0.14  Ey:-0.07  Ez:+0.00    Radius:100.79
> .Tower angle :    Tx:-0.10  Ty:+0.22  Tz:+0.00
> Save with M500 and/or copy to Configuration.h

Using V0 for Dry Run with no calibration.

G33 V0

> G33 Auto Calibrate
> Checking... AC (DRY-RUN)
> .Height:295.00    Ex:+0.00  Ey:+0.00  Ez:+0.00    Radius:100.00
> .Tower angle :    Tx:+0.00  Ty:+0.00  Tz:+0.00
> .      c:-2.86     x:-2.68   y:-2.62   z:-2.56
> .                 yz:-2.55  zx:-2.61  xy:-2.78
> End DRY-RUN                                       std dev:2.668

Using the T flag for no tower angles.

G33 T

> G33 Auto Calibrate
> Checking... AC
> .Height:297.79    Ex:-0.13  Ey:-0.06  Ez:+0.00    Radius:100.83
> Iteration : 01                                    std dev:0.024
> .Height:297.82    Ex:-0.09  Ey:-0.05  Ez:+0.00    Radius:100.82
> Calibration OK                                    rolling back.
> .Height:297.79    Ex:-0.13  Ey:-0.06  Ez:+0.00    Radius:100.83
> Save with M500 and/or copy to Configuration.h

Use a single point (P1) to check the height.

G33 P1

> G33 Auto Calibrate
> Checking... AC
> .Height:297.79
> Calibration OK
> .Height:297.80
> Save with M500 and/or copy to Configuration.h
Yes No
Last updated on 26th May 2017

1.18.G38.2, G38.3 - Probe target #

The Probe Target commands are used to probe towards a workpiece and determine its precise position. The Z endstop doubles as the probe for these commands. You might, for example, use a grounded metal workpiece, with a metal probe spliced into the Z endstop circuit.

  • G38.2 probes towards a target and stops on contact, signaling an error if it reaches the target position without triggering the Z endstop.
  • G38.3 probes towards a target and stops on contact. No error is given if it fails to trigger the Z endstop.

These commands use the current homing feedrate, by default.


Usage

G38.2 [F<rate>] [X<pos>] [Y<pos>] [Z<pos>]

Argument Description
[F<rate>]

Feedrate for the move

[X<pos>]

Target X

[Y<pos>]

Target Y

[Z<pos>]

Target Z

Notes

These commands require G38_PROBE_TARGET.

Yes No
Last updated on 26th May 2017

1.19.G60 - Save current position coordinates #

Coming Soon

Yes No
Last updated on 26th May 2017

1.20.G61 - Apply/restore saved coordinates #

Coming Soon

Yes No
Last updated on 26th May 2017

1.21.G90 - Absolute Positioning #

In absolute mode all coordinates given in G-code are interpreted as positions in the logical coordinate space. This includes the extruder position unless overridden by M83.


Usage

G90

Notes

Absolute positioning is the default.

Yes No
Last updated on 26th May 2017

1.22.G92 - Set Position #

Set the current position to the values specified. In Marlin 1.1.0 and up, the software endstops are adjusted to preserve the physical movement limits. Thus you could use G92 to set the middle of the bed to 0,0 and then run .gcode that was sliced for a Deltabot.


Usage

G92 [E<pos>] [X<pos>] [Y<pos>] [Z<pos>]

Argument Description
[E<pos>] New extruder position
[X<pos>] New X axis position
[Y<pos>] New Y axis position
[Z<pos>] New Z axis position

Notes

In earlier versions of Marlin G92 doesn’t update the software endstops, so it was unsupported to set coordinates outside these boundaries. In Marlin 1.1.0 and up, the physical boundaries are maintained. This means you can no longer use G92 to move below the bed, for example.

Examples

Specify that the nozzle’s current X position is 10 and the current extruder position is 90.

G92 X10 E90

Specify that the nozzle’s current XYZ position is 0, 0, 0.

G92 X0 Y0 Z0
Yes No
Last updated on 26th May 2017

2.M - code #

2.1.M0, M1 - Unconditional stop #

The M0 and M1 commands pause after the last movement and wait for the user to continue.


Usage

M0 [P<ms>] [S<sec>] [string]

Argument Description
[P<ms>]

Expire time, in milliseconds

[S<sec>]

Expire time, in seconds

[string]

An optional message to display on the LCD

Notes

If both S and P are included, S takes precedence.

Without an LCD controller or EMERGENCY_PARSER this command is ignored.

With EMERGENCY_PARSER enabled the M108 command can be used to continue.

Examples

Stop and wait

M0

Display a message, stop, and wait

M0 Click to continue
Yes No
Last updated on 26th May 2017

2.2.M3 - Spindle CW / Laser On #

Wait for moves to complete, then set the spindle speed (clockwise) or laser power.


Usage

M3 [S<power>]

Argument Description
[S<power>]

Spindle speed or laser power

Examples

Set spindle rotation clockwise at 50%

M3 S128

Turn on the laser at full power

M3
Yes No
Last updated on 26th May 2017

2.3.M4 - Spindle CCW / Laser On #

Wait for moves to complete, then set the spindle speed (counter-clockwise) or laser power.


Usage

M4 [S<power>]

Argument Description
[S<power>]

Spindle speed or laser power

Examples

Set spindle rotation counter-clockwise at 50%

M4 S128

Turn on the laser at full power

M4
Yes No
Last updated on 26th May 2017

2.4.M5 - Spindle / Laser Off #

Wait for moves to complete, then turn off the spindle / laser power and PWM.


Usage

M5

Examples

Turn off the spindle or laser

M5
Yes No
Last updated on 26th May 2017

2.5.M6 - Tool change CNC #

Coming Soon

Yes No
Last updated on 26th May 2017

2.6.M17 - Enable Steppers #

Enable power on all stepper motors.


Usage

M17

Examples

Enable power on all stepper motors

M17
Yes No
Last updated on 26th May 2017

2.7.M18, M84 - Disable steppers #

This command can be used to set the stepper inactivity timeout (S) or to disable one or more steppers (X,Y,Z,E).

If a timeout is given with S, this command just sets the stepper inactivity timeout.

If no steppers are specified, this command disables all steppers immediately.

If one or more axes are specified, this command disables the specified steppers immediately.


Usage

M18 [E<flag>] [S<seconds>] [X<flag>] [Y<flag>] [Z<flag>]

Argument Description
[E<flag>]

E Disable

[S<seconds>]

Inactivity Timeout. If none specified, disable now.

[X<flag>]

X Disable

[Y<flag>]

Y Disable

[Z<flag>]

Z Disable

Examples

Set the stepper inactivity timeout to 1 minute

M18 S60

Disable all steppers immediately

M18

Disable Z and E steppers immediately

M18 Z E
Yes No
Last updated on 26th May 2017