Zero Utensile su reprap/Duet2

Sezione dedicata all'elettronica di controllo cnc.
Rispondi
Avatar utente
Peppazzz91
Newbie
Newbie
Messaggi: 6
Iscritto il: giovedì 27 giugno 2024, 20:24

Zero Utensile su reprap/Duet2

Messaggio da Peppazzz91 » giovedì 11 luglio 2024, 23:21

Buonasera a tutti.
Di recente ho acquistato per la mia macchina un tool probe per poter effettuare cambi utensili un po più agevoli e veloci.
Attualmente dopo un cambio utensile azzero la Z col metodo del foglio di carta, che oltre ad essere lento e snervante a volte risulta pericoloso (una volta al quarto cambio utensile ho schiacciato per distrazione z-10 anziché -0.1, immaginate che fine ha fatto il pezzo da lavorare).
In ogni caso, volevo automatizzare il tutto tramite questo strumento, ma mi sono reso conto che di fatto non so ben quale sia la procedura da inserire nella opportuna macro.
Premesso che la mia CNC utilizza una duet 2 come elettronica, che non prevede il comando M6 ma ha la facoltà di implementarlo tramite macro, mi sfugge quale sia la corretta sequenza per portare a termine la procedura.
Lo strumento presenta 2 switch: uno che si apre per primo appena lo strumento tocca il pulsante, un secondo che si apre quando il pulsante arriva a fine corsa, collegati sugli ingressi dedicati agli endstop degli estrusori E0 ed E1.
Dato che gli ingressi della scheda hanno le resistenze di pullup, tramite la configurazione la scheda considera l'apertura del primo switch come trigger per lo z-probe #0 e l'apertura del secondo switch come trigger per lo stop d'emergenza.

La mia idea era quella di iniziare, in ogni caso, con un azzeramento manuale, quindi settando lo zero nel sistema di coordinate con la fresa che sfiora il grezzo.
Da questo momento in poi Z=0 equivale al punto più alto del grezzo (che poi è come imposto il cam).
Al cambio utensile dovrei chiamare la macro M6, che inizierebbe con

Codice: Seleziona tutto

G53 G91 G0 X0 Y0 Z0
per passare alle coordinate macchina e spostare il mandrino in una posizione comoda per il cambio utensile (visto dall'alto, spigolo in basso a sinistra, z in alto).

Successivamente

Codice: Seleziona tutto

M291 R"Cambio utensile" P"Inserisci il nuovo utensile" S2

per generare il popup che avvisa del cambio utensile ed attende la conferma.
Il popup non specifica quale utensile perché purtroppo la duet supporta solo 50 utensili, ed io col mio sistema di numerazione li ho superati.

A questo punto

Codice: Seleziona tutto

G0 Y495
per spostare il mandrino sopra al tool probe (visto dall'alto, spigolo in alto a sinistra, z in alto).

Quì viene il dubbio:
se dovessi prendere spunto dal manuale reprap dovrei fare un probe con:

Codice: Seleziona tutto

G38.2 K0
che blocca l'utensile nel punto in cui riceve il trigger dal probe.

Ora, nel sistema di coordinate macchina a questo punto avrei in Z la coordinata dell'altezza esatta in cui il nuovo utensile tocca il probe, ma non ho idea di come fare a far calcolare alla macchina quale offset applicare per riazzerare l'utensile in modo che Z=0 equivalga di nuovo al punto più alto del grezzo.

Qualche idea?

Grazie a chi vorrà aiutarmi :D

safe60
Senior
Senior
Messaggi: 756
Iscritto il: venerdì 29 maggio 2009, 8:43
Località: Ferrara
Contatta:

Re: Zero Utensile su reprap/Duet2

Messaggio da safe60 » venerdì 12 luglio 2024, 8:38

La prima riga "G53 G91 G0 X0 Y0 Z0" non produrrà alcun movimento. L'utensile resterà fermo nel punto in cui si trova perche' il codice G91 mette la macchina in modalità incrementale che, essendo modale, resta attiva. Di conseguenza, anche la riga G0 Y495 non andrà alla coordinata Y495 in origine macchina ma si sposterà di 495 mm rispetto al punto in cui si trova.
io toglierei G91.
Ex arduis perpetuum nomen.

Avatar utente
Peppazzz91
Newbie
Newbie
Messaggi: 6
Iscritto il: giovedì 27 giugno 2024, 20:24

Re: Zero Utensile su reprap/Duet2

Messaggio da Peppazzz91 » venerdì 12 luglio 2024, 13:46

errore mio #-o
Ciò che intendevo fare era effettivamente passare alla modalità assoluta.
Purtroppo non ho ancora molta dimestichezza col gcode ed attualmente quando scrivo qualche riga devo sempre farlo col manuale aperto.
Ciò che intendevo comunque era G90

Avatar utente
Peppazzz91
Newbie
Newbie
Messaggi: 6
Iscritto il: giovedì 27 giugno 2024, 20:24

Re: Zero Utensile su reprap/Duet2

Messaggio da Peppazzz91 » martedì 16 luglio 2024, 22:53

Salve a tutti.
Dopo varie prove sono finalmente riuscito a resettare l'utensile sulla CNC basata su Duet.

Il codice che ne è risultato è questo:

Codice: Seleziona tutto

var OldProbeZ = 0                                                                                   ;dichiaro variabile per Z attuale
var NewProbeZ = 0                                                                                   ;dichiaro variabile per Z dopo cambio utensile
var OldOffsetZ = 0                                                                                  ;dichiaro variabile per offset attuale
var NewOffsetZ = 0                                                                                  ;dichiaro variabile per offset dopo cambio utensile
var Delta = 0                                                                                       ;dichiaro variabile per Delta
M291 R"Cambio utensile" P"Avvio misura utensile attuale" K{"OK","ANNULLA"} S4                       ;avviso inizio procedura misura
if input == 1                                                                                       ;Se "ANNULLA"
    M291 R"ATTENZIONE!" P"cambio utensile annullato" S2                                             ;messaggio annullamento macro
    M99                                                                                             ;blocca Macro
set var.OldOffsetZ = {move.axes[2].workplaceOffsets[0]}                                             ;imposta la variabile con il valore di offset di Z relativo al workspace 1 (G54)
echo var.OldOffsetZ                                                                                 ;stampo la variabile acquisita
G53 G90 G0 Z0                                                                                       ;coordinate macchina, assolute, movimento rapido a Z=0
G53 G90 G0 X0 Y495                                                                                  ;coordinate assolute, movimento rapido a X=0 Y=495 ( su tool setter )
M558 K0 F600                                                                                        ;imposto la velocità del probe #0 a 600mm/min
G38.2 K0 Z-200                                                                                      ;probe fino a Z-200mm con probe #0
G53 G91 G0 Z1                                                                                       ;coordinate relative, alzo Z di 1mm
M558 K0 F60                                                                                         ;imposto la velocità del probe #0 a 60mm/min
G38.2 K0 Z-200                                                                                      ;probe fino a Z-200mm con probe #0
set var.OldProbeZ = {move.axes[2].machinePosition}                                                  ;Imposto la variabile Z attuale con posizione assoluta (coordinate machcina) dell'asse Z
G53 G90 G0 Z0                                                                                       ;coordinate assolute, movimento rapido a Z=0
M291 R"Cambio utensile" P"Inserisci nuovo utensile" T5 S1                                           ;richiesta inserimento nuovo utensile, timeout 5 secondi
M291 R"Cambio utensile" P"Conferma inserimento nuovo utensile" S2                                   ;richiesta conferma nuovo utensile inserito
G53 G90 G0 X0 Y495 Z0                                                                               ;coordinate assolute, movimento rapido a X=0 Y=495 ( su tool setter )
M558 K0 F600                                                                                        ;imposto la velocità del probe #0 a 600mm/min
G38.2 K0 Z-200                                                                                      ;probe fino a Z-200mm con probe #0
G53 G91 G0 Z1                                                                                       ;coordinate relative, alzo Z di 1mm
M558 K0 F60                                                                                         ;imposto la velocità del probe #0 a 60mm/min
G38.2 K0 Z-200                                                                                      ;probe fino a Z-200mm con probe #0
set var.NewProbeZ = {move.axes[2].machinePosition}                                                  ;Imposto la variabile Z dopo cambio utensile con posizione assoluta (coordinate macchina) dell'asse Z
set var.Delta = {var.NewProbeZ-var.OldProbeZ}                                                       ;calcola il delta
set var.NewOffsetZ = {var.OldOffsetZ+var.Delta}                                                     ;calcola il nuovo offset
G10 L2 P1 Z{var.NewOffsetZ}                                                                         ;imposta il nuovo valore Z=0 in G54
G53 G90 G0 Z0                                                                                       ;Sposto z su posizione home
G54 G90 G0 X0 Y0 Z50                                                                                ;Sposto l'utensile a 50mm dallo zero pezzo     
M291 R"Cambio utensile" P"Cambio utensile completato" T2 S1                                         ;messaggio inserimento nuovo utensile, timeout 5 secondi
in sostanza il codice non fa altro che leggere l'offset Z dello spazio di lavoro 1 dalle variabili della macchina, la posizione di z durante il probe del vecchio utensile, la posizione di z durante il probe del nuovo utensile e calcola il nuovo offset da applicare in G54.
In questo modo inoltre mi risparmio l'onere di misurare con precisione a quale altezza dal piano lo switch del probe cambia stato, e se dovessi sostituirlo con un altro non dovrei modificare la macro.
Per funzionare, la macro va salvata come M6.g nella cartella system, in modo che una chiamata M6 da un qualsiasi gcode esegua la macro.
Inoltre è necessario impostare tool setter come un probe nella sezione dedicata del file config.
Nel mio caso:

Codice: Seleziona tutto

M558 K0 P5 C"^e1stop" H5 F600 T6000 ; configure digital probe via slot #0
G31 P500 X0 Y0 Z00 ; set Z probe trigger value, offset and trigger height

PS: mi sono accorto che forse la sezione più appropriata non è quella dell'elettronica CNC, ma quella relativa al Gcode.
Chiedo scusa per il disguido, ho pensato che la discussione fosse più attinente alla scheda in particolare che ha diverse limitazioni.

Rispondi

Torna a “Elettronica CNC”