doppio mandrino

Sezione dedicata a Linuxcnc
Rispondi
Avatar utente
ganzissimo
Member
Member
Messaggi: 256
Iscritto il: giovedì 13 novembre 2008, 22:21
Località: marina di pietrasanta

doppio mandrino

Messaggio da ganzissimo » lunedì 6 aprile 2015, 20:23

ciao a tutti!
c'è qualcuno che sa come si può realizzare il controllo pwm per un secondo mandrino su linuxcnc?
mi spiego meglio: ho realizzato tutto il necessario per trasformare la mia cnc in stampante 3d, quindi estrusore, piano riscaldato e raffreddamento.
come elettronica uso la stessa, cioè 4assi tb6560 cinese...modificata...una meraviglia hobbisticamente parlando!!
l'estrusore lo comando come un mandrino con pwm e pid, quindi dal programma di slicing imposto la temperatura e nel gcode uso l'istruzione m3 s(temperatura) e con il feedback controllo con pid e va alla grande.
uso un qrduino uno come convertitore analogico digitale per leggere la temperatura, ma tutta la gestione la fa linuxcnc.
ora volevo integrare il controllo della temperatura per il piano riscaldato e la velocità della ventola di raffreddamento ma non so come fare!!
per la ventola non è un problema perchè va benissimo anche un controllo on/off e quindi la gestisco con m7 come fosse la pompa refrigerante...ma per il piano ho bisogno del controllo come per l'estrusore.
il punto è che linuxcnc può generare fino a 8 segnali pwm distinti...ma come faccio ad usarne uno per comandare il piano come fosse un secondo mandrino? (l'estrusore in effetti è come fosse il primo mandrino)
si può sicuramente fare, so come generarlo e farlo uscire su un pin della seconda parallela che ho installato, ma poi come lo gestisco? ho letto in giro di un sim_spindle, ovvero la simulazione di mandrino...può essere questa la strada?
se volessi fare un pantografo che fresa diverse copie contemporaneamente con diversi mandrini come li potrei gestire? con che comando richiamo il secondo mandrino?
tipo, gli assi si numerano...esiste la possibilità di usare tipo mandrino1...mandrino2...ecc..?
in rete non trovo niente....mi sa che non so cercare... :mrgreen: !!
grazie

Fabrizio
Tutto è possibile, basta volerlo!
"siamo noi gli inabili che pure avendo avvolte non diamo" (R.Zero)

billielliot
Senior
Senior
Messaggi: 1747
Iscritto il: martedì 16 ottobre 2007, 23:23
Località: Trezzo sull'Adda

Re: doppio mandrino

Messaggio da billielliot » martedì 7 aprile 2015, 16:19

Ciao,

magari non ho ben capito ma... non fai prima a crearti una seconda configurazione (file HAL) specifica per la sola stampa 3D?

Se stampi non fresi e viceversa.

Ciao :-)

Mauro
Amat victoria curam

Avatar utente
ganzissimo
Member
Member
Messaggi: 256
Iscritto il: giovedì 13 novembre 2008, 22:21
Località: marina di pietrasanta

Re: doppio mandrino

Messaggio da ganzissimo » martedì 7 aprile 2015, 19:57

si si...ho due configurazioni distinte...anche l'alimentazione è dedicata...è come se avessi due macchine che condividono il pc di controllo e la sola scheda cinesina dei driver (tb6560 4 assi)...
il problema è solo capire come poter avere il controllo pwm su un secondo mandrino...io ho bisogno di controllare la temperatura dell'estrusore e quella del piano riscaldato...quindi come se avessi due mandrini di cui controllo la velocità.
dando il comando M3 accendo il mandrino (l'estrusore) e con il valore S*** imposto la velocità (la temperatura).
ho visto che linuxcnc può generare fino a 8 pwm distinti...come si gestiscono? se avessi due mandrini come li controllerei in velocità?

Grazie...intanto stasera provo ad approfondire il discorso del mandrino simulato...poi devo anche vedere la lettura delle due temperatura tramite arduino ( che sarà poi sostituito da un convertitore ) perchè al momento non sono ancora riuscito a configurarlo, ma ci ho perso poco tempo.

Fabrizio
Tutto è possibile, basta volerlo!
"siamo noi gli inabili che pure avendo avvolte non diamo" (R.Zero)

billielliot
Senior
Senior
Messaggi: 1747
Iscritto il: martedì 16 ottobre 2007, 23:23
Località: Trezzo sull'Adda

Re: doppio mandrino

Messaggio da billielliot » mercoledì 8 aprile 2015, 11:01

Ciao ganzissimo,

Solo in questo tuo ultimo mesaggio ho capito che non vuoi gestire un secondo mandrino ma vuoi gestire il piano riscaldato.

Di seguito una traccia di cosa farei io. Non l'ho verificata. In particolare non ricordo se la connessione 1 a molti e' possibile per come l'ho configurata io (1 segnale mandrino a molti PWMgen).

Manuali di riferimento:

LinuxCNC Integrator Manual (4MB)

LinuxCNC HAL Manual (2MB)

Per capire come funziona il PWMgen ho usato il manuale di HAL (pagina 73)
L'esempio di riferimento per gestire la rotazione del mandrino e' tratto dall'Integrator Manual (pagina 53):

9.3.5 Adding PWM Spindle Speed Control

If your spindle can be controlled by a PWM signal, use the pwmgen component to create the signal:
loadrt pwmgen output_type=0
addf pwmgen.update servo-thread
addf pwmgen.make-pulses base-thread
net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value
net spindle-on motion.spindle-on => pwmgen.0.enable
net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out
setp pwmgen.0.scale 1800 # Change to your spindle’s top speed in RPM


This assumes that the spindle controller’s response to PWM is simple: 0% PWM gives 0 RPM, 10% PWM gives 180 RPM, etc.
If there is a minimum PWM required to get the spindle to turn, follow the example in the nist-lathe sample configuration to use
a scale component.

A sensazione lo modificherei come segue:
# invoco due generatori di PWM, entrambi di tipo 0 (zero):
loadrt pwmgen output_type=0,0
# Li collego alle funzioni generatrici clock:
addf pwmgen.update servo-thread
addf pwmgen.make-pulses base-thread

# Lego entrambi i PWM alla velocita' comandata al mandrino:
net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value pwmgen.1.value
# Accendo entrambi i PWM con il segnale che accende il mandrino:
net spindle-on motion.spindle-on => pwmgen.0.enable pwmgen.1.enable
# Collego l'uscita del primo generatore di PWM al pin (09) della prima porta parallela (0):
net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out
# Collego l'uscita del secondo generatore di PWM a un altro pin della parallela (secegli tu il piu' adatto e sostituisci xx):
net spindle-pwm pwmgen.1.pwm => parport.0.pin-xx-out

Per variare la frequenza di un generatore rispetto all'altro userei il parametro:
Scaling factor to convert value from arbitrary units to duty cycle
(float) pwmgen.<chan>.scale

Ripeto: a sensazione!

Tutto da studiare e verificare.

Ciao :-)

Mauro
Amat victoria curam

Avatar utente
ganzissimo
Member
Member
Messaggi: 256
Iscritto il: giovedì 13 novembre 2008, 22:21
Località: marina di pietrasanta

Re: doppio mandrino

Messaggio da ganzissimo » mercoledì 8 aprile 2015, 13:33

Ciao..grazie intanto della risposta... Però mi rimane il problema di come dare il comando per dirgli a che temperatura andare...pwm.0 lo gestisco con S(valore)... Ed il pwm.1...?
Ho letto qualcosa sul codice M67... Mi sa che provero' quella strada...ma ben accetti altri suggerimenti...
Fabrizio
Tutto è possibile, basta volerlo!
"siamo noi gli inabili che pure avendo avvolte non diamo" (R.Zero)

Avatar utente
ganzissimo
Member
Member
Messaggi: 256
Iscritto il: giovedì 13 novembre 2008, 22:21
Località: marina di pietrasanta

Re: doppio mandrino

Messaggio da ganzissimo » mercoledì 8 aprile 2015, 21:55

Ho riletto meglio il tuo ultimo messaggio...in effetti potrei anche impostare la temperatura del piano sempre ad un valore in scala a quella dell'estrusore...però la vorrei lasciare come ultima strada...vorrei trovare il modo di settarli indipendentemente (ammazza che parolone!!!) l'uno dall'altro.
Il comando M67 gestisce un uscita analogica istantanea (non dipendente da un codice g successivo) e con il parametro Q dovrei settare il valore che voglio ottenere...proprio come fosse un secondo mandrino e la sua velocitå.
L'unico problema in quel caso sarebbe sincronizzare la velocitå con il movimento degli assi ma nel mio caso invece non ho bisogno di sincronizzare.
Domani sera spero di riuscire a cominciare a fare qualche tentativo...

Ciao
Fabrizio
Tutto è possibile, basta volerlo!
"siamo noi gli inabili che pure avendo avvolte non diamo" (R.Zero)

billielliot
Senior
Senior
Messaggi: 1747
Iscritto il: martedì 16 ottobre 2007, 23:23
Località: Trezzo sull'Adda

Re: doppio mandrino

Messaggio da billielliot » giovedì 9 aprile 2015, 12:13

Ciao ganzissimo,

trovo riscontro della tua spiegazione nel comando M68 (e non M67).

In ogni caso dovrebbe funzionare.

L'uscita "motion.analog-out-00 - (float, out) These pins (00, 01, 02, 03 or more if configured) are controlled by M67 or M68" Restituisce un segnale "float" e il PWMgen accetta un segnale sul pin "value - (Float, In) The current pwmgen command value, in arbitrary units".

Quindi, sempre a sensazione lo modificherei come segue:

# invoco due generatori di PWM, entrambi di tipo 0 (zero):
loadrt pwmgen output_type=0,0
# Li collego alle funzioni generatrici clock:
addf pwmgen.update servo-thread
addf pwmgen.make-pulses base-thread
# Lego un PWM alla velocita' comandata al mandrino:
net spindle-speed-cmd motion.spindle-speed-out => pwmgen.0.value
# Lego il secondo PWM alla temperatura comandata con G68:
motion.analog-out-00 => pwmgen.1.value
# Abiliterei entrambi i PWM con il segnale che accende il mandrino:
net spindle-on motion.spindle-on => pwmgen.0.enable pwmgen.1.enable
# Collego l'uscita del primo generatore di PWM al pin (09) della prima porta parallela (0):
net spindle-pwm pwmgen.0.pwm => parport.0.pin-09-out
# Collego l'uscita del secondo generatore di PWM a un altro pin della parallela (secegli tu il piu' adatto e sostituisci xx):
net spindle-pwm pwmgen.1.pwm => parport.0.pin-xx-out

Probabilmente dovrai usare "pwmgen.1.scale " per far corrispondere il valore impostat nel codice G con il reale valore di temperatura.

Sempre tutto da studiare e verificare!

Solo un dubbio: probabilmente tu lo hai gia' considerato ma come controlli quando il piano (e l'estrusore) hanno raggiunto la temperatura impostata?

Ciao :-)

Mauro

P.S. i riferimenti sono tratti sempre dai manuali citati nel precedente messaggio.
Amat victoria curam

Avatar utente
ganzissimo
Member
Member
Messaggi: 256
Iscritto il: giovedì 13 novembre 2008, 22:21
Località: marina di pietrasanta

Re: doppio mandrino

Messaggio da ganzissimo » giovedì 9 aprile 2015, 14:19

Tutto come pensavo...vero..M68....M67 controlla un segnale analogico ma legato ad un seguente comando G.
Per quanto riguarda il valore per impostare la temperatura non dovrei aver bisogno di scalare in quanto la temperatura è legata ad una tabella di conversione usata da arduino: sul pin analogico di arduino leggo il valore di tensione che restituisce il termistore che rivleva la temperatura.questo valore viene campionato in base a detta tabella caricata da hal in un file python e viene restituito a linuxcnc il valore di temperatura relativo. Con un controllo pid mantengo tale valore. Almeno così mi funziona per l'estrusore...credo sia lo stesso per il piano...ho un feedback anche li.
Stasera provo...vedremo se funziona...grazie per le righe di configurazione che hai scritto...partirò da quelle adattandole a quelle che già uso.
Farò sapere..ciao
Fabrizio
Tutto è possibile, basta volerlo!
"siamo noi gli inabili che pure avendo avvolte non diamo" (R.Zero)

billielliot
Senior
Senior
Messaggi: 1747
Iscritto il: martedì 16 ottobre 2007, 23:23
Località: Trezzo sull'Adda

Re: doppio mandrino

Messaggio da billielliot » giovedì 9 aprile 2015, 14:43

Sicuramente lo hai gia' notato ma c'e' un errore:

motion.analog-out-00 => pwmgen.1.value

diventa:

net motion.analog-out-00 => pwmgen.1.value

Ciao :-)

Mauro
Amat victoria curam

Avatar utente
ganzissimo
Member
Member
Messaggi: 256
Iscritto il: giovedì 13 novembre 2008, 22:21
Località: marina di pietrasanta

Re: doppio mandrino

Messaggio da ganzissimo » giovedì 9 aprile 2015, 18:52

...si...si....l'avevo visto....come no....!!! :oops:
...Sai quanto ci sbattevo la testa...
...grazie...

sto iniziando a provare qualcosa....vedremo...

Fabrizio
Tutto è possibile, basta volerlo!
"siamo noi gli inabili che pure avendo avvolte non diamo" (R.Zero)

Avatar utente
ganzissimo
Member
Member
Messaggi: 256
Iscritto il: giovedì 13 novembre 2008, 22:21
Località: marina di pietrasanta

Re: doppio mandrino

Messaggio da ganzissimo » giovedì 9 aprile 2015, 22:39

Aggiornamento:

il comando M68 funziona bene...con M3 abilito sia l'estrusore che il piano ed una volta abilitato anche se non imposto nessuna temperatura per l'estrusore il piano lo posso scaldare lo stesso...quindi bene!
la ventola di raffreddamento la comando con M7 tanto non ho il feedback per vedere la velocità...potrei solo impostare la percentuale di giri max ma non avendo niente che relazioni la velocità con la reale portata di aria credo sia inutile complicarsi la vita...o accesa o spenta! si potrebbe controllare sempre con M68 tramite il secondo parametro E (fino a 4 canali) ed avrei anche la scheda che ho fatto con tre canali mosfet comandati da pwm ma credo che continuerò ad usarne due in pwm per i riscaldatori ed uno in on/off per la ventola.
siccome uso anche il componente NEAR per attendere la temperatura dell'estrusore prima di iniziare la stampa vera e propria...mi rimane da capire come far capire nel file hal di aspettare anche che il secondo componente NEAR relativo alla temperatura del piano sia soddisfatto. ho caricato due componenti ma associandoli tutti e due allo spindle-at-speed mi da errore. Suggerimenti?
inoltre sto sbattendo la testa sul muro per far leggere due temperature ad Arduino: dovrebbe essere banale (pin A0 e A1 analogici) ma non so modificare lo sketch caricato per una sola lettura. la parte che poi gestisce il valore rilevato nel file python caricato da hal dovrebbe essere semplice modificarla. ora provo a cercare qualcosa in rete...
a dopo...
Fabrizio
Tutto è possibile, basta volerlo!
"siamo noi gli inabili che pure avendo avvolte non diamo" (R.Zero)

billielliot
Senior
Senior
Messaggi: 1747
Iscritto il: martedì 16 ottobre 2007, 23:23
Località: Trezzo sull'Adda

Re: doppio mandrino

Messaggio da billielliot » venerdì 10 aprile 2015, 11:03

Ciao ganzissimo,

NEAR restituisce un valore logico in uscita "near.N.out (bit out)".

Ipotizzo che tu abbia due componenti NEAR e che debbano essere entrambi a livello logico 1 per far partire la lavorazione.

Per verificare la condizione puoi usare una porta AND a due ingressi come il componente "and2" che invochi con il comando: "loadrt and2 [count=N|names=name1[,name2...]]"

# invoco una porta
loadrt and2 count=1
# la aggancio alla funzione servo thread
addf and2.0 servo-thread
# collego l'uscita del primo near al primo ingresso della porta and
net temp_estrusore near.0.out => and2.0.in0
# collego l'uscita del secondo near al secondo ingresso della porta and
net temp_piatto near.1.out => and2.0.in1
# collego l'uscita della porta and all'abilitazione del mandrino
net temp_OK and2.0.out => motion.spindle-at-speed

Sempre da studiare e verificare.

Ciao :-)

Mauro
Amat victoria curam

Avatar utente
ganzissimo
Member
Member
Messaggi: 256
Iscritto il: giovedì 13 novembre 2008, 22:21
Località: marina di pietrasanta

Re: doppio mandrino

Messaggio da ganzissimo » venerdì 10 aprile 2015, 13:50

Grande...funziona sicuramente...stasera provo...poi magari posto il file hal...potrebbe servire ad altri.
Dunque mi rimane da studiare la comunicazione con arduino...con due sensori non mi funziona bene...devo rivedere lo sketch dacaricarci.
Grazie
Fabrizio
Tutto è possibile, basta volerlo!
"siamo noi gli inabili che pure avendo avvolte non diamo" (R.Zero)

Rispondi

Torna a “Linuxcnc”