Welcome! Log In Create A New Profile

Advanced

Impostazione "segment per second"

Posted by Gex 
Gex
Impostazione "segment per second"
March 02, 2016 12:16PM
Vorrei scambiare un pò di pareri su questa impostazione del firmware.

In teoria decide in quante "sezioni" rettilinee dividere le curve a discapito della memoria della macchina...se ho capito bene.

Il fatto è che dopo svariate prove per migliorare le mie curve e renderle più curve...il risultato resta identico.Ho testato valori crescenti da 120 a 180 senza vedere nessun cambiamento.

Allego due foto a 120 e 180 sullo stesso oggetto e stesse impostazioni di stampa con layer 0,2, magari il risultato ondulato nel mio caso dipende più dalla meccanica (sto infatti facendo esperimenti) che dal software...ma volevo comunque capire su cosa e quanto influisce quel parametro.

Sui forum esteri leggo di tutto e di più...e non ho capito proprio dove stia il giusto grinning smiley
Attachments:
open | download - 20160302_175921.jpg (515.8 KB)
Re: Impostazione "segment per second"
March 02, 2016 05:48PM
Non è un discorso di curve, bensì di segmenti di step massimi da fare al secondo... I movimenti vengono suddivisi in segmenti per non riempire la memoria e far fare troppi calcoli al processore.
Quindi se la stampante si muove a scatti bisogna diminuire i segmenti se invece si muove bene allora si possono aumentare...
Il discorso delle curve è invece dettato dallo slicer...
Faccio un esempio il nozzle è nella posizione X10 Y10 e il gcode gli dice di andare in X11 Y14 con un'estrusione di E1.2 (numeri buttati a caso).
Fine calcolato il numero di step che vengono fuori dalle differenze tra posizione finale - posizione attuale il tutto moltiplicato per gli step per mm.. Vengono sommati i valori e fatta la radice quadrata.
for (uint8_t i = 0; i < NUM_AXIS; i++) difference = target - current_position;
float cartesian_mm = sqrt(sq(difference[X_AXIS]) + sq(difference[Y_AXIS]) + sq(difference[Z_AXIS]));

Il valore risultante è moltiplicato per 6000 è diviso per il feedrate impostato e ancora per il feedrate multiplier
float seconds = 6000 * cartesian_mm / feedrate / feedrate_multiplier;
Il feedrate è in mm /min quindi si moltiplica per 60 e il multiplier è in percentuale quindi si moltiplica per 100 ecco il numero 6000..

Si ha quindi questo numero che sono i segmenti che dovrà fare la stampante per arrivare al punto dato.
Ricordatevi che i tre assi in questo caso sono i movimenti delle tre torri..

Ora interviene DELTA_SEGMENTS_PER_SECOND:
int steps = max(1, int(DELTA_SEGMENTS_PER_SECOND * seconds));

Gli step che dovrà fare sono un numero che va da 1 al massimo DELTA_SEGMENTS_PER_SECOND * seconds.
Quindi più alto il valore, più step farà.
Ora eseguirà quegli step, ma molto probabilmente non è arrivato al punto di destinazione, quindi ripete l'operazione fino a quando non arriva al target...
Alla fine sempre una riga tra X10 Y10 e X11 Y14 avrà fatto...


COMPRA ITALIANO - sostieni le nostre aziende - sostieni la nostra gente - sostieni il tuo popolo - sosterrai te stesso.
Alberto C. felice possessore di una Kossel K2
My Blog - My Thingiverse
Gex
Re: Impostazione "segment per second"
March 03, 2016 03:46AM
Grazie kimbra, spiegazione fantastica!

Quindi se ho letto bene il numero SEGMENT PER SECOND non va a influire sulla definizione delle curve ma sul tempo che impiega a farle cambiando gli step massimi che possono entrare in un secondo.

Quindi non era lui si cui dovevo andare a agire ma eventualmente sulla lunhezza del segmento E che invece viene dalla cambinazione dei feedrate e degli step per second? Giusto?
Sorry, only registered users may post in this forum.

Click here to login