ELS (Electronic Lead Screw) - progetto con ARDUINO

Moderatore: Junior Admin

Troncatore
APPRENDISTA E ADDETTO ALLE PULIZIE
Messaggi: 37
Iscritto il: gio set 16, 2021 08:50
Località: Viterbo

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da Troncatore »

Comincio a postare qualcosa...Grazie McMax e Sbinf per il vostro aiuto!!! :grin: :grin: :grin:
Vista di tutto il materiale che già avevo per mettere il mio David 203 con passabarra da 30 inverter e inversore dell'avanzamento sotto Mach3..ma non fatto per non perdere l'uso manuale e consiste in:
- scatola per Arduino e joystick e display
- scatola per alimentatore36V alimentatore 12V e riduttore di voltaggio per Arduino e simili ventola etc
- motore Nema 27 con protezione cavi in stampa 3d (per chi occorresse ho l'Stl anche per il 23)
- piastra protezione e cinghia pulegge per montaggio motore
-Kit encoder in stampa 3d.
Insieme.jpg
Kit encoder.jpg
EncoderInPosizione.jpg
Encoder.jpg
joystick.jpg
Domandina per McMax..se non monto l'interruttore di cui indico la posizione ed elimino l'altro, basta aprire le linguette, sono Ok? Display pronto...un po di pazienza e grazie del consiglio!
Non hai i permessi necessari per visualizzare i file allegati in questo messaggio.
Avatar utente
McMax
CAPO OFFICINA
Messaggi: 9023
Iscritto il: dom gen 31, 2010 21:46
Località: Bussero (MI)

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da McMax »

Si dovrebbe essere ok così.... Per evitare casini comunque taglierei le piste sotto interrupt come indicato sul mio manuale.... non si sa mai dove vanno a finire, se c'è un pullup da qualche parte sei fregato.
McMax

“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson

fulminato in tenera età
tarzan
SON PASSATO AI TRAPANINI
Messaggi: 87
Iscritto il: mer ago 13, 2014 09:21
Località: Pordenone

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da tarzan »

Vi chiedo un'altra modifica che mi frulla da un po' in testa.
Ho visto che il range di filettature dipende anche dal valore dell'array "Max step" All'inizio dello sketch che di default é 800.
Ho provato ad aumentarlo ed in effetti riesco ad arrivare a 1200 con un range fino a 3mm che può bastarmi.
Lo scoglio é la memoria libera che diminuisce fino a rendere instabile il programma, se provo 1400 o 1600 non parte nemmeno..
Ho notato però che la memoria si potrebbe ottimizzare eliminando ad esempio le visualizzazioni di testo di presentazione.
Mi chiedevo però se, eliminando parti intere di sw che nel mio caso non servono a nulla, si poteva rosicchiare ancora un pò di byte ed estendere ancora il campo delle filettature.
Non mi serve tutto il discorso dei Norton ( ho solo la vite madre..) e nemmeno il menù Velocità Mandrino..
Ho notato anche che lo sketch originale occupa molta meno memoria delle ver successive; dipende dalle librerie i2c?
Si può fare qualcosa? ;)
sbinf74
TORNITORE E FRESATORE
Messaggi: 1349
Iscritto il: ven nov 21, 2008 14:34
Località: Roma

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da sbinf74 »

Prendi un arduino mega è risolvi :mrgreen:

Nei giorni passati ho realizzato un programma per un amico, sono partito con un arduino nano e dovevo utilizzare le librerie per pilotare scheda SD, display OLED motori Stepper etc....Stavo al limite della memoria e mi dava problemi dei problemi strani con la lettura dei file, alla fine ho dovuto "ripiegare" su un Mega è non ho avuto più problemi.

Considera che solo per il display oled ho provato diverse librerie per liberare più memoria possibile arrivando ad una libreria solo testuale che riuscivo a far stare dentro il resto del codice...
tarzan
SON PASSATO AI TRAPANINI
Messaggi: 87
Iscritto il: mer ago 13, 2014 09:21
Località: Pordenone

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da tarzan »

Cavoli, immagino che mega sarebbe risolutivo ma non voglio rifare tutto da zero... pensa che mi basterebbe liberare solo qualche decina di byte per ottenere il mio scopo :(
Ovviamente non sarà semplice ma credevo che si potesse sfoltire un pochino il codice ..
claudio63
APPRENDISTA E ADDETTO ALLE PULIZIE
Messaggi: 41
Iscritto il: gio set 16, 2021 16:15
Località: Como

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da claudio63 »

tarzan ha scritto:Vi chiedo un'altra modifica che mi frulla da un po' in testa.
Ho visto che il range di filettature dipende anche dal valore dell'array "Max step" All'inizio dello sketch che di default é 800.
Ho provato ad aumentarlo ed in effetti riesco ad arrivare a 1200 con un range fino a 3mm che può bastarmi.
Lo scoglio é la memoria libera che diminuisce fino a rendere instabile il programma, se provo 1400 o 1600 non parte nemmeno..
Ho notato però che la memoria si potrebbe ottimizzare eliminando ad esempio le visualizzazioni di testo di presentazione.
Mi chiedevo però se, eliminando parti intere di sw che nel mio caso non servono a nulla, si poteva rosicchiare ancora un pò di byte ed estendere ancora il campo delle filettature.
Non mi serve tutto il discorso dei Norton ( ho solo la vite madre..) e nemmeno il menù Velocità Mandrino..
Ho notato anche che lo sketch originale occupa molta meno memoria delle ver successive; dipende dalle librerie i2c?
Si può fare qualcosa? ;)
se non ho frainteso qualcosa penso che parli del massimo passo in filettatura impostabile, se cosi è, nelle pagine precedenti avevo posto il quesito per poter arrivare a passi fino a 6mm
nel caso per fare molle, Sbinf74 mi aveva risposto che il passo massimo impostabile era quello risultante dal passo della vite madre (fatto salvo "ingannare" il programma impostando un passo falso della vite e modificando gli step del passo passo), che nel mio caso sarebbe 3mm, (anche se nelle impostazioni che ho inserito adesso mi da gia 6mm ma magari qualche parametro deve essere poi ancora sistemato) poero pongo un quesito, ho un amico che vorrebbe farlo per il suo david ceriani dove la vite madre mi tare si di 1,5 mm... ovviamente passo un po riduttivo.
tarzan
SON PASSATO AI TRAPANINI
Messaggi: 87
Iscritto il: mer ago 13, 2014 09:21
Località: Pordenone

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da tarzan »

Si.. Ripensandoci bene per le volte che devo filettare passi così lunghi forse vale la pena la tecnica dell'inganno senza troppi sbattimenti ;)
sbinf74
TORNITORE E FRESATORE
Messaggi: 1349
Iscritto il: ven nov 21, 2008 14:34
Località: Roma

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da sbinf74 »

Dopo quanto scritto ed in attesa di una conferma da Max ho visto che nel codice la definizione passo di filettatura maggiore non è dato dal passo della vite ma dal numero di step per giro e l'array "MaxSteps".

Mi spiace di aver fatto confusione in precedenti post indicando come massima filettatura praticabile il passo della vite :frusta:

Effettivamente nelle mie configurazioni con vite da 3 mm e 800 step per giro, la filettatura maggiore corrisponde appunto a 3 mm.

max_passo = passo_vite*(800/passi_stepper_giro)

Detto questo mantenendo la stessa definizione dell'array, per limitare l'occupazione di memoria su arduino. su un tornio con vite da 1,5 mm possiamo considerare di avere un numero di step giro minore, diciamo 400 (abbiamo comunque lo stesso avanzamento per passo in entrambe le configurazioni) che corrisponde ad un passo maggiore di 3mm :grin:

@Claudio63 per quanto sopra, se decidi di rinunciare ad un pò di precisione, che comunque non so quanto infici in fase di filettatura, potresti configurare il tuo sistema in modo che con 400 passi fai un giro di vite e ti troveresti con un passo massimo praticabile di 6mm.

Diversamente va verificato l'incremento della dimensione dell'array......
Avatar utente
McMax
CAPO OFFICINA
Messaggi: 9023
Iscritto il: dom gen 31, 2010 21:46
Località: Bussero (MI)

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da McMax »

bene bene.... vedo che state smembrando il mio codice per benino :risatina:

Nessun problema ovviamente, se avessi avuto segreti da nascondere non avrei reso disponibile il source code :mrgreen:

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 :risatina:. 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.
McMax

“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson

fulminato in tenera età
Avatar utente
McMax
CAPO OFFICINA
Messaggi: 9023
Iscritto il: dom gen 31, 2010 21:46
Località: Bussero (MI)

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da McMax »

due conti al volo.
Ipotizziamo:
passi_encoder: 1000
passi_stepper_vite: 400 (half step)
passo_vite: 2mm
Il massimo passo eseguibile sarà:
max_passo=passi_encoder*(passo_vite/passi_stepper_vite) = 1000*(2/400)= 5mm!

con encoder da 1600 passi diventa: 1600*(2/400) = 8mm.

Se abbassiamo anche i passi stepper a 200 arriviamo a ben 16mm con vite passo 2.

Poi ovviamente entrano in gioco altri fattori:
- a 200 passi giro lo stepper fa un casino micidiale e perdiamo risoluzione nei passi piccoli
- un encoder con troppa risoluzione rischia di non essere letto da arduino in modo corretto: stiamo pur sempre parlando di un 8bit a 16Mhz.....
McMax

“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson

fulminato in tenera età
claudio63
APPRENDISTA E ADDETTO ALLE PULIZIE
Messaggi: 41
Iscritto il: gio set 16, 2021 16:15
Località: Como

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da claudio63 »

Fantastico, però aiutate un ignorante ... cose l array....

Nella mia situazione montando l encoder da 360 passi su l albero che è ridotto di 4.5 rispetto al mandarino cosa mi ritrovo? :grin:
Ultima modifica di claudio63 il sab ott 02, 2021 20:41, modificato 1 volta in totale.
Avatar utente
McMax
CAPO OFFICINA
Messaggi: 9023
Iscritto il: dom gen 31, 2010 21:46
Località: Bussero (MI)

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da McMax »

No Claudio perdonami non posso rispondere a questa domanda, mi darebbe la presunzione di fare un corso di programmazione che non sono assolutamente in grado di fare. Io sono uno smanettone della Domenica: se vuoi imparare il C ci sono una marea di corsi su YouTube e sono certo che il più scarso di quelli è 100 volte meglio di me.
McMax

“None of us can change the things we’ve done. But we can all change what we do next.” – Fred Johnson

fulminato in tenera età
claudio63
APPRENDISTA E ADDETTO ALLE PULIZIE
Messaggi: 41
Iscritto il: gio set 16, 2021 16:15
Località: Como

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da claudio63 »

Si non pretendevo tanto
Ho trovato questa definizione che già mi ha dato un idea,
Gli array generalmente vengono utilizzati per racchiudere più variabili dello stesso tipo e sono dei componenti fondamentali di ogni linguaggio di programmazione. Grazie agli array non si deve istanziare una variabile per ogni valore, ma è possibile racchiudere più valori in unica variabile.
Per me oltre sarà difficile andare.
Poi facendo delle prove troverò nella pratica su quali valori agire per restituirmi il risultato
Che cerco. Grazie.
claudio63
APPRENDISTA E ADDETTO ALLE PULIZIE
Messaggi: 41
Iscritto il: gio set 16, 2021 16:15
Località: Como

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da claudio63 »

dunque ho collegato tutto per verificare il funzionamento, sicuramente mi sfugge qualcosa, al collegamento al driver il programma entra nel primo menu visualizzato e da di non è piu possibile uscire
se non staccando il filo che va al driver, in particolare succede qyando metto in serie il collegamenti delle masse allo stesso.
evidentemente c'è qualche collegamento che ho sbagliato ma non riesco ad individuarlo.
Non hai i permessi necessari per visualizzare i file allegati in questo messaggio.
sbinf74
TORNITORE E FRESATORE
Messaggi: 1349
Iscritto il: ven nov 21, 2008 14:34
Località: Roma

Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Messaggio da sbinf74 »

Mi pare tu abbia invertito pulse e dir (pin 9 3 10) poi l'ena dovrebbe essere collegato al 7 ma mi pare sia attaccato all'8 e poi quel filo rosso non capisco se sta sul pin 6 o sul 7......
Bloccato

Torna a “Elettronica ed elettrotecnica”