progetto open source per avanzamenti automatici su arduino

Moderatore: Junior Admin

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

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da McMax »

Certo che si! Alla grande.
Configurali in "bipolar parallel" ed imposta la massima corrente a 3.5A.... se si inchioda aumenta un po' ma non esagerare perché se lo usi alla massima corrente rischi di sfondare il motore.

Secondo me con quel motore potresti anche farcela.
Utilizza 48VDC di alimentazione però, 24 sono troppo pochi.
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
DDMEC
SON PASSATO AI TRAPANINI
Messaggi: 81
Iscritto il: ven set 11, 2015 08:43
Località: Reggio Emilia

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da DDMEC »

Grazie Max, sempre utile e gentile!
Un nano sopra le spalle di un gigante vede più lontano!
Avatar utente
Lostudioso
TRA NON MOLTO PASSO AL TORNIO
Messaggi: 158
Iscritto il: sab giu 06, 2015 21:13
Località: Treviso

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da Lostudioso »

Ciao McMax volevo farti i complimenti per questo mega lavoro che stai portando avanti. Ho provato a studiare il tuo programma per cercare di darti un qualche contributo ma.... a parte i pdf l'impresa risulta titanica....

Ho alcuni spunti di riflessione:
-Per comandare il display di solito uso l'I2C per risparmiare ingressi arduino

-Per filettare da quel che ho capito usi i dati precaricati in una eprom. Secondo me era meglio (come Mimoletti diceva) fare dei piccoli calcoli ovvero: in base al filetto da fare calcolo prima la misura di un passo del mandrino, calcolo la misura del passo del carro (mosso dal motore PP) e poi procedo con una semplice somma della misura dei passo mandrino e non appena supera la misura del passo del carro gli do un passo di carro. Si possono poi moltiplicare le misure per 1000 per evitare i float e portare avanti lo scarto (inevitabile ma inferiore della misura del passo motore) di filetto in filetto. Questo è solo il concetto poi è tutto da rifinire.

-Per le funzioni aggiungerei anche la possibilità di usare il carro come uno strozzatore per fare la scanalatura per le chiavette magari sotto controllo dell'operatore per evitare inpuntamenti dell'utensile.

Per ora è tutto ciao, Marco.
Lostudioso
Avatar utente
McMax
CAPO OFFICINA
Messaggi: 9023
Iscritto il: dom gen 31, 2010 21:46
Località: Bussero (MI)

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da McMax »

grazie Marco.
No, non uso dati precaricati in eeprom.
Calcolo i passi in base al filetto che imposto e li carico in un array che viene poi scandito durante la routine di filittatura. Se cerchi nel topic spiego anche il tutto in modo dettagliato.
I float li uso ma fuori dalla routine veloce quindi non mi danno alcun fastidio.... anzi!
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à
mimoletti
TORNITORE E FRESATORE
Messaggi: 1140
Iscritto il: dom dic 27, 2009 11:31
Località: Torre del Greco (NA)

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da mimoletti »

Riprendendo il discorso, sperando che possa essere di aiuto, a chi ha voglia di sviluppare il progetto autonomamente.

Essenzialmente gli impulsi dell'encoder, possono essere letti in due modi, abilitando un'interrupt sul cambio di stato di una dei pin del Micro, oppure abilitando un'interrupt su l'over flow di uno dei timer del Micro.

La prima strada permette la lettura simultanea dei canale A e B, con cui è possibile aumentare la risoluzione dell'encoder X4, leggendo ogni fronte di salita e discesa dei rispettivi canali.
Inoltre con la lettura in tempo reale di ogni singolo impulso, ci permette a fronte di un'inversione decrementare la variabile, utilizzata per il conteggio degli impulsi.
Per contro a meno di non utilizzare per l'encoder risoluzione bassissime, non è possibile mantenere sincronizzata la vite madre durante gli avanzamenti dove si utilizzano elevati reggimi di rotazione.

L'utilizzo del timer invece ci permette di aumentare la risoluzione dell'encoder solo X2, abilitando l'incremento del timer sia sul fronte di salita che sul fronte di discesa di uno dei canali dell'encoder.
Il valore di divisione potrà essere caricato direttamente nel timer, e sarà possibile mantenere il sincronismo anche ad elevati regimi di rotazione, in ogni caso anche quando viene superata la frequenza massima di funzionamento, il programma non smette di funzionare ma continua ugualmente la sua divisione degli impulsi.
Questo ci consente di aumentare la risoluzione dell'encoder.
Di contro non potendo decrementare il timer in tempo reale a fronte di un'inversione si può generare un'errore di sincronismo che in ogni caso non sara mai superiore ad un singolo step del motore passo passo.

Per quanto riguarda la risoluzione ottimale del passo passo, ho riscontrato che non conviene scendere su valori troppo bassi, per non accentuare uno dei difetti dei motori passo passo, il tipico funzionamento a scatti che produce vibrazioni soprattutto ai bassi regimi. Difetto che si accentua negli avanzamenti dove le velocità del passo passo, possono essere anche inferiori di oltre 50 volte.
Pertanto consiglio l'uso del micro step, almeno nel valore di 1/8.
Solo gli stupidi non cambiano mai idea!

Tornio Wabeco D6000 con ELS; Fresa Wabeco F1210; Segatrice Nebes TM125 Inverter; Tavola a dividere Vertex HV-6,Morsa meccnica Allen MAP/78-N

https://www.youtube.com/watch?v=cobEZI8KvOk
Avatar utente
McMax
CAPO OFFICINA
Messaggi: 9023
Iscritto il: dom gen 31, 2010 21:46
Località: Bussero (MI)

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da McMax »

Dimentichi di dire che l'utilizzo del timer non è possibile senza l'ausilio di un flip-flop esterno... a meno di non complicare ulteriormente il codice.
E anche che lo step "perso" non è matematico ma dipende dalle inversioni che si effettuano ed a dove vengono effettuate.

Aggiungo inoltre che la soluzione ad interrupt permette anch'essa di sfruttare elevati regimi di rotazione semplicemente attivando solo gli interrupt che servono (tipo: fronte di salita di un solo canale) al pari della soluzione a timer.

Mi permetto infine di esprimere un'opinione che può essere o meno condivisa: l'utilizzo del timer per la lettura di un encoder in quadratura è una soluzione machiavellica che complica e sbilancia il codice senza apportare alcun beneficio.
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à
mimoletti
TORNITORE E FRESATORE
Messaggi: 1140
Iscritto il: dom dic 27, 2009 11:31
Località: Torre del Greco (NA)

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da mimoletti »

Assolutamente il flip-flop non e indispensabile. Basta aggiungere poche righe di codice. :grin:
Per ogni ciclo di due inversioni l'errore di sincronismo sarà sempre è comunque di un singolo step. Piuttosto che matematicamente direi non prevedibile, ma in ogni caso ai fini pratici ininfluente. Gli strumenti di misura che utilizzo di solito non hanno una precisione assoluta e il valore reale sarà sempre compreso tra due valori, questo non mi impedisce di usarli!
Se ricordo bene nella tua prima versione di SW avevi una filettatura che si accorciava, ad ogni giro, di diversi step, non capisco come un'errore di sincronismo di un singolo step ti sia inaccettabile! :grin: :grin: :grin:

La sostanziale differenza tra utilizzo dell'interruzione su l'over flow del timer e l'interruzione sul cambio di stato di uno degli ingressi sono a mio avviso diverse:

1) Caricando il valore di divisone nel timer avrai un tempo tra un'interruzione e la successiva proporzionale al valore stesso di divisione, tu invece avrai sempre e comunque un'interruzione ad ogni fronte di salita. Quindi la tua routine di interrupt deve essere necessariamente breve, e contenuta (in termini di tempo) tra due fronti di salita, nel mio caso l'unico limite è il tempo impiegato per caricare il timer.

2) Volendo posso scegliere se caricare il valore di divisione nel timer direttamente o caricare valore 255 e leggere ogni singolo fronte di salita e discesa.

3) Utilizzando interruzione sul cambio di stato di uno degli ingressi, quando viene superata la frequenza massima di funzionamento, esso smette di funzionare, nel mio caso utilizzando timer e caricando il valore di divisione direttamente in esso, questo non succede.

4) Il timer di solito hanno dei divisori, che si possono impiegare per diminuire la risoluzione dell'encoder.

5) Utilizzare encoder con risoluzioni maggiori, sul mio tornio con una vite madre di 4mm, ho una riduzione meccanica di 4:1, ed ho il driver impostato ad un'1/8 di step.

L'utilizzo del timer mi ha permesso, di avere sincronizzati anche gli avanzamenti, di implementare la rampa di accelerazione nella fase di ritorno e posso retrocede il carro ad una velocità differente da quella con cui avanza ed infine di utilizzare una risoluzione maggiore (mi infastidiva la tipica rotazione a scatti dei passo passo, sopratutto quando utilizzavo gli avanzamenti più piccoli).
Solo gli stupidi non cambiano mai idea!

Tornio Wabeco D6000 con ELS; Fresa Wabeco F1210; Segatrice Nebes TM125 Inverter; Tavola a dividere Vertex HV-6,Morsa meccnica Allen MAP/78-N

https://www.youtube.com/watch?v=cobEZI8KvOk
Avatar utente
McMax
CAPO OFFICINA
Messaggi: 9023
Iscritto il: dom gen 31, 2010 21:46
Località: Bussero (MI)

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da McMax »

Mimoletti, in tutto questo io ancora non ho capito come memorizzi la posizione angolare del mandrino visto che, caricando sempre valori diversi nel timer, non hai un contatore impulsi assoluto. E ancora, anche avendo trovato il modo di farlo, come intercetti la posizione corretta quando devi ripartire con la seconda passata della filettatura ?
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à
mimoletti
TORNITORE E FRESATORE
Messaggi: 1140
Iscritto il: dom dic 27, 2009 11:31
Località: Torre del Greco (NA)

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da mimoletti »

Ciao Max, scusa se ti rispondo solo ora, ma ultimamente sono molto impegnato.

Nella modalità avanzamento abilito il divisore del timer con divisione 16 e carico valore 250. Avrò un'interrupt ogni 4000 impulsi.

Nella modalità filettatura carico nel timer valore 255, avrò un'interrupt ad ogni fronte di salita di uno dei canali, aggiorno il valore di una delle variabile, incrementandola o decrementandola in funzione del senso di rotazione, e solo ed esclusivamente nel caso in cui il valore della variabile sia 4000, riparto con la seconda passata della filettatura.
Solo gli stupidi non cambiano mai idea!

Tornio Wabeco D6000 con ELS; Fresa Wabeco F1210; Segatrice Nebes TM125 Inverter; Tavola a dividere Vertex HV-6,Morsa meccnica Allen MAP/78-N

https://www.youtube.com/watch?v=cobEZI8KvOk
Avatar utente
McMax
CAPO OFFICINA
Messaggi: 9023
Iscritto il: dom gen 31, 2010 21:46
Località: Bussero (MI)

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da McMax »

Cioè fammi capire...... generi un interrupt ad ogni fronte di salita di uno dei canali; ovvero generi un interrupt ad ogni fronte di salita di ENTRAMBI i canali visto che hai un XOR.
E che differenza c'è quindi tra utilizzare il timer o gli interrupt?
Considerando la risoluzione che hai usato, generi più interrupt tu 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à
mimoletti
TORNITORE E FRESATORE
Messaggi: 1140
Iscritto il: dom dic 27, 2009 11:31
Località: Torre del Greco (NA)

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da mimoletti »

La mia routine di interruzione è divisa in due sezioni, la prima memorizza la posizione angolare del mandrino, la seconda si occupa della divisione degli impulsi.

Quando devo memorizzare la posizione angolare del mandrino e sono nella modalità filettatura leggo ogni fronte di salita del segnale a valle della XOR, ed ho un' interruzione ad ogni fronte di salita, quando devo effettuare la divisione degli impulsi invece carico il valore di divisione nel timer, e avrò tra un'interruzione e quella successiva un numero di fronti di salita dipendenti dal numero di divisione.

Ad esempio il valore di divisione per Matteu è di 31, quando l'avanzamento è di 8 centesimi a giro.
Tra un'interruzione e quella successiva avrò 31 fronti di salita.

In conclusione leggo ogni fronte di salita solo quando mi trovo nel menu filettatura e devo memorizzare la posizione angolare del mandrino (volendo in questa fase potrei abilitare il divisore del timer per ridurre a mio piacimento la risoluzione dell'encoder) e non quando devo dividere gli impulsi.
Solo gli stupidi non cambiano mai idea!

Tornio Wabeco D6000 con ELS; Fresa Wabeco F1210; Segatrice Nebes TM125 Inverter; Tavola a dividere Vertex HV-6,Morsa meccnica Allen MAP/78-N

https://www.youtube.com/watch?v=cobEZI8KvOk
Avatar utente
McMax
CAPO OFFICINA
Messaggi: 9023
Iscritto il: dom gen 31, 2010 21:46
Località: Bussero (MI)

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da McMax »

non ho capito perché alcune cose le scrivi in grassetto come a far notare che TU non le fai ma qualcun altro si.
Nel caso, e giusto per chiarire il concetto per l'ennesima volta, ti rammento che io le "divisioni" le faccio TUTTE fuori dal ciclo......

Ad ogni buon conto, e perdonami la franchezza, più vai avanti a spiegarmi il tuo codice e più non capisco come tu possa esserti complicato la vita fino a questo punto.....
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à
mimoletti
TORNITORE E FRESATORE
Messaggi: 1140
Iscritto il: dom dic 27, 2009 11:31
Località: Torre del Greco (NA)

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da mimoletti »

Forse non sono stato abbastanza chiaro....

Utilizzando l'interruzione sul cambio di stato di uno dei pin del micro, indipendentemente da dove esegui la divisione, immaginando che il valore di divisione sia 10, avrai 10 interruzioni, utilizzando il timer ne avrai solo 1.

Ad ogni buon conto, e perdonami la franchezza, più vai avanti a spiegarmi il tuo codice e più non capisco come tu possa esserti complicato la vita fino a questo punto.....


Potrei dire lo stesso del tuo codice......, è una questione di punti di vista.
Solo gli stupidi non cambiano mai idea!

Tornio Wabeco D6000 con ELS; Fresa Wabeco F1210; Segatrice Nebes TM125 Inverter; Tavola a dividere Vertex HV-6,Morsa meccnica Allen MAP/78-N

https://www.youtube.com/watch?v=cobEZI8KvOk
Avatar utente
McMax
CAPO OFFICINA
Messaggi: 9023
Iscritto il: dom gen 31, 2010 21:46
Località: Bussero (MI)

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da McMax »

provo ad essere più chiaro perchè evidentemente mi esprimo male e non riesco a farmi comprendere.

Ti chiedo come fai a mantenere il sincornismo angolare quando filetti a "misura"; mi dici che in quel caso, giustamente, imposti il timer a 255 (che, su un timer a 8 bit, equivale a generare un interrupt ad ogni fronte...). Ti faccio notare che in questo modo fai col timer esattamente quello che faresti usando gli ingressi interrupt, e per tutta risposta mi dici che quando il divisore è ad esempio 10 avrai un interrupt ogni 10 impulsi.
Ma a questo punto, non per ripetermi, ancora non ho capito come mantieni il sincronismo angolare....

Se devi mantenere il sincronismo per riprendere la filettatura nello stesso punto non c'è altra via che contare tutti gli impulsi.... certo puoi eseguire il calcolo progressivo a ritroso e con un po' di fantasia forse ci riesci ma da quello che hai detto non è questo ciò che fai.

Che tu nella modalità avanzamento sia sincronizzato è chiaro; che la gestione dell'encoder col timer abbia dei vantaggi sulle alte velocità di rotazione è altrettanto chiaro (che non hanno comunque senso in filettatura....); ma nelle filettature automatizzate, ovvero quelle che generalmente usi quando hai un ELS, che vantaggio c'è ?

Altra cosa che a mio avviso non ha molto senso è sincronizzare in avanzamento: che senso ha ?
L'avanzamento ha un ampio range di tolleranza e di certo avanzare di 22 cent/giro piuttosto che di 20 non fa tutta questa differenza all'atto pratico.... la cosa importante è che l'avanzamento sia costante.
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à
mimoletti
TORNITORE E FRESATORE
Messaggi: 1140
Iscritto il: dom dic 27, 2009 11:31
Località: Torre del Greco (NA)

Re: progetto open source per avanzamenti automatici su ardui

Messaggio da mimoletti »

Premettendo che in ogni caso, il fatto che tu non capisca come si possa fare o che io mi sia spiegato male non significa che non si possa fare.

Cercherò di essere il più chiaro possibile:

Memorizzazione della posizione angolare del mandrino:


Si può fare in due modi (immaginiamo di avere un' encoder con una risoluzione di 1000 impulsi a giro):

1) Abilito il divisore e scelgo divisione 8, carico nel timer valore 125, avrò un'interruzione ad ogni giro. Esce dal pause solo se la prima passata è terminata.

2) Genero un'interruzione ad ogni fronte di salita, aggiorno il contenuto di una delle variabili (Count) e la decremento o la incremento, in funzione della senso di rotazione del mandrino. Avrò 1000 interruzioni ad ogni giro ed esce dal pause solo se due condizioni sono verificate: Che la prima passata sia terminata e che il valore della variabile Count sia esattamente 1000.

Divisione degli impulsi (vale sia per la filettatura che per l'avanzamento)
:

Carico il valore di divisione direttamente nel timer, (immaginando che sia 10) avrò una 1 interruzione ogni 10 impulsi.

Sincronizzare l'avanzamento è di fondamentale importanza, la finitura e quindi la rugosità che ottieni e direttamente legata all'avanzamento a giro e alla velocità di taglio. i giorni scorsi ho realizzato un'albero per uno dei mie motorini, e sono dovuto passare da diametro 35mm a diametro 9mm, e da una velocità di rotazione di 800 giri al minuto ad 1800 giri al minuto, utilizzando una velocità di avanzamento costante e non sincronizzata sarei passato da 8 centesimi a giro a 20 centesimi a giro. Ti posso assicurare che da 8 a 20 centesimi a giro ottieni una finitura completamente diversa.

Altra considerazione, utilizzando il timer se non si ha la necessita di raddoppiare la risoluzione dell'encoder, non è necessario il flip flop, per determinare il senso di rotazione del mandrino.
Solo gli stupidi non cambiano mai idea!

Tornio Wabeco D6000 con ELS; Fresa Wabeco F1210; Segatrice Nebes TM125 Inverter; Tavola a dividere Vertex HV-6,Morsa meccnica Allen MAP/78-N

https://www.youtube.com/watch?v=cobEZI8KvOk
Rispondi

Torna a “Ufficio progetti”