McMax, sto provando a farmi il mio programma, avevo detto che ti avevo tartassato di domande... ci e' voluto un po' ma eccomi qua
Fino ad adesso ho usato quello di Mimmoletti e funzionava ma alcune cose non mi piacevano (comunque ringrazio mimmoletti per la disponibilita').
Il tuo programma, come gia' detto a suo tempo, e' stato un piacere da leggere e anche molto istruttivo (ci e' voluto un po' per "affinare" le mie conoscenze del c) e, ovviamente, ti ringrazio per il lavoro che hai fatto ma anche nel tuo qualcosa non mi piaceva.
Quindi senza nulla togliere al vostro lavoro (tuo e di mimmoletti), nel mio piccolo mi sono fatto la mia versione personalizzata.
Provata al banco (cioe' generatore di funzioni per simulare l'encoder e oscilloscopio per vedere il segnale step) sembra funzionare fino a 120KHz (encoder da 2000ppr, passo vite 3mm, 800 passi stepper/giro), quindi 3600rpm di mandrino. Il segnale di step e' bello pulito e sembra spaziato correttamente. Devo trovare il tempo di provarlo sul tornio.
Considera che io sono come i cinesi, copiano qua e la' e fanno (a volte) qualcosa di buono.
Io ho copiato parte del codice del russo (il metodo di calcolo della divisione frazionaria) e parte del tuo codice (l'uso del timer per generare il segnale di step).
Ovviamente ci ho messo anche del mio e, se puo' servire, posso postare il codice.
Ora, domanda. Mi son riletto tutta la discussione tra te e mimmoletti ma non ho risolto i miei dubbi.
Se ricordo (e ho capito) giusto, la tua routine CreaSequenza ha lo scopo di arrivare con l'ultimo passo dello stepper all'index del mandrino (per inciso, la funzione CreaSequenza la trovo geniale e perversa al tempo stesso
).
Col metodo del russo, invece, non c'e' nessuna certezza di arrivare all'index col giusto numero di passi. Mi spiego meglio: 2000ppr di encoder, imposto passo 1mm. Aspetto 7 passi di encoder e faccio un passo di stepper, aspetto 8 passi di encoder e faccio un passo di stepper e avanti cosi'. Quando sono vicino alla fine del giro di mandrino, posso trovarmi ad aver sparato l'ultimo passo a 1995 impulsi di encoder (sparo numeri a caso ma non ha importanza), ma il prossimo step lo dovrei fare tra 7 impulsi, quindi 2002 impulsi di encoder. Se facessi un solo giro mi troverei ad avere uno step in meno (quindi avrei percorso 3mm/800=0.00375mm in meno, errore trascurabile).
Quello che non riesco a capire e' se questo e' un vero problema o no. Dai ragionamenti che ho fatto non dovrebbe essere un problema, l'errore non si somma (che il filetto sia di 1 giro o di 100, avro' sempre un passo-4 millesimi- in piu' o in meno). Al ritorno, retrocedo degli stessi passi che ho fatto all'andata, aspetto il sincronismo e riparto (quindi dovrebbe riprendere il filetto senza problemi).
Il dubbio mi viene guardando il tuo lavoro. Se tu hai "perso tempo" a cercare di finire gli step sull'index un motivo deve esserci ma, purtroppo, non lo trovo.
Quello che ho capito e' che a te serve creare una sequenza al volo perche' puoi impostare i passi di filettatura in continua (ogni centesimo) mentre il russo ha usato passi di filettatura preimpostati (i classici metrici e tpi, quindi puo' creare una struct calcolando e inserendo a mano i valori interi e frazionari per il passo).
Spero di essermi spiegato abbastanza bene e ti ringrazio da subito per la disponibilita'