bene bene.... vedo che state smembrando il mio codice per benino
Nessun problema ovviamente, se avessi avuto segreti da nascondere non avrei reso disponibile il source code
Allora come ha giustamente corretto Sbinf qui sopra il max passo è funzione dei passi stepper (per un giro della vite) e del passo della vite; l'array da 800 passi rappresenta comunque un limite ma non insormontabile, vediamo perchè:
- in ogni cella dell'array è memorizzato un numero intero che indica quanti passi encoder mandrino devo attendere prima di fare un passo stepper.
- ogni volta che viene fatto un passo stepper l'indice dell'array si incrementa e viene usato il valore della cella successiva come passi encoder mandrino di "attesa" per il passo successivo.
- viene da se che il minimo numero che posso scrivere nella cella è 1 quindi al minimo potrò attendere un passo encoder mandrino per fare un passo stepper, e questo di fatto rappresenta il limite: ovvero, al minimo posso fare un passo stepper ad ogni passo encoder, oppure attendere quanti passi encoder voglio prima di fare un passo stepper ma ovvimanete non posso fare più passi stepper rispetto ai passi encoder! ED E' PROPRIO QUESTO IL LIMITE MAX DEL PASSO ESEGUIBILE: se non posso far fare allo stepper più passi rispetto ai passi encoder, il limite sarà appunto dato solo dai passi stepper e dal passo vite.
L'importante affinche questa regola stia in piedi è che l'encoder non abbia un numero di passi inferiori rispetto ai passi stepper e, per stare sicuri, anche al numero di celle dell'array che è 800.
Quindi, come si possono costruire passi più lunghi ?
1 - riducendo i passi/giro del motore stepper ==> il minimo è 200 (full step), in questo modo il max passo sarà 4 volte il passo vite !
2 - aumentando i passi encoder e togliendo la limitazione nel calcolo ==> vediamo come nella spiegazione di seguito
Per prima cosa dobbiamo capire come vengono calcolati i profili nel'array.
In realtà la dimensione dell'array potrebbe essere ridotta, cerco di spiegarvi come e perchè:
nelle prime versioni del firmware l'array veniva riempito completamente in modo da avere un profilo filetto completo per ogni giro della vite madre: era più che altro una fisima mia per facilitare il manteminmento del sicnronismo sul filetto ma analizzando poi meglio l'algoritmo mi sono accorto che si poteva fare semplificando notevolmente. Da una certa versione in poi (non ricordo quale, credo la 1.4) quindi, il calcolo dell'array (che viene sempre fatto ogni volta che si imposta un passo nuovo) si ferma appena trova un punto di sincronismo che non è più necessariamente al completamento di un giro vite ma nella stragrande maggiroanza dei casi capita molto prima. In pratica effettuo un calcolo prima sulla base del passo vite, dei passi stepper, del filetto impostato e dei passi encoder: qui determino di quante celle array ho bisogno e le riempio con i valori corretti. Questa sarà la sequenza ripetibile minima per eseguire quel filetto e non è detto che debba necessariamente usare tutti i record dell'array.
A questo punto sarebbe stato meglio trasformare quell'array in una lista in modo da non occupare sempre la RAM ma poi ho pensato che la dinamicità della lista su un sistema come arduino avrebbe potuto creare problemi: un conto è usare le liste su un PC con svariati giga di RAM, un altro è usarle su un arduino con 2K di RAM

. Ho preferito quindi lasciare l'array per rendere il codice più stabile, ma questo non vuol dire che l'array debba per forza avere 800 valori. Secondo me si può ridurre di parecchio ma bisogna fare un po' di conti per capire di quanto.... bisognerebbe fare una simulazione con tutte le variabili per capire qual'è la condizione peggiore, ovvero quella dove l'algoritmo userà il numero di celle maggiore dell'array e ridurlo a quella dimensione.
Ma tutto sto casino perché ? Semplice, se idelamente posso ridurre i passi dell'array, se levo la limitazione nell'algoritmo di generaizone del passo e aumento la risoluzione dell'encoder posso pensare di costruire passi più lunghi senza stravolgere troppo la configurazione e sfruttando l'array per intero (quindi tutti e 800 i passi)!
Non l'ho fatto perchè non ce n'era la necessità, ma in effetti avere dei passi più lunghi potrebbe fare comodo per fare ragnature o molle.... ci penso un attimo.