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.
1.2.G2, G3 – Sposta ad arco
Movimento ad arco da un punto a un altro.
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)
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
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:
A second curvy N that attaches smoothly to this one can now be made without specifying I and J:
1.5.G7 - Laser raster base64
Coming soon
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
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
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
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
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 |
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.
This one is useful to be used on the end-script of a print, it will raise the Z-pos by Z-park.
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
- Z 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…
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.
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:
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
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 |
1.14.G31 - Dock Sled
Dock the Z probe sled.
Usage
G31
Notes
Requires Z_PROBE_SLED
.
Example
Dock the sled
1.15.G32 - Undock Sled
Undock the Z probe sled.
Usage
G32
Example
Undock the sled
1.16.G33 - Delta Auto Calibration 1
Cooming soon
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>] |
|
[T<bool>] |
Enable or disable tower angle corrections calibration ( |
[V<0|1|2>] |
Set the verbose level
|
Examples
Default (Verbose 1)
Verbose 2
Using V0
for Dry Run with no calibration.
Using the T
flag for no tower angles.
Use a single point (P1
) to check the height.
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
.
1.19.G60 - Save current position coordinates
Coming Soon
1.20.G61 - Apply/restore saved coordinates
Coming Soon
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.
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.
Specify that the nozzle’s current XYZ position is 0, 0, 0.
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
Display a message, stop, and wait
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%
Turn on the laser at full power
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%
Turn on the laser at full power
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
2.5.M6 - Tool change CNC
Coming Soon
2.6.M17 - Enable Steppers
Enable power on all stepper motors.
Usage
M17
Examples
Enable power on all stepper motors
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
Disable all steppers immediately
Disable Z and E steppers immediately