MECCANICA e DINTORNI
http://meccanicaedintorni.morpel.it/phpbb/

ELS (Electronic Lead Screw) - progetto con ARDUINO
http://meccanicaedintorni.morpel.it/phpbb/viewtopic.php?f=16&t=15729
Pagina 21 di 95

Autore:  AF116 [ ven nov 25, 2016 11:56 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Per la coppia io ho impiegato uno stepper da 4Nm ma:

- il mio tornio è piccolo e quindi richiede meno sforzi.
- non bisogna esagerare con la profondità delle passate.

Per la movimentazione con motore DC + encoder:

Potrebbe essere interessante applicare una tecnica che si utilizza nel mondo della radiotecnica: il PLL.

Con il metodo Phase lock loop si potrebbe prendere a riferimento la fase prodotta dall'encoder sul mandrino per compararla con quella proveniente dall'encoder sul motore previo passaggio attraverso un divisore programmabile (per impostare il passo). La differenza tra le due fasi produce una tensione in uscita dal comparatore + filtro proporzionale alla differenza tra fase mandrino - fase motore che potrebbe essere utilizzata per impostare la tensione da inviare al motore.
Il problema (per me) sarebbe come limitare il pendolamento senza influire sulla tempestività di regolazione.

Autore:  McMax [ ven nov 25, 2016 19:48 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Secondo me con il motore DC il controllo diventa tropo difficile per un arduino. I due encoder li leggi ad interrupt e due interrupt insieme non si possono eseguire. Ci vuole una MCU con interrupt a priorità e che permetta di fare il nesting. oltre a ciò ricordati che il motore in DC va necessariamente demoltiplicato.
Per evitare il funzionamento a scatti secondo me bisogna andare su un brushless DC, che pilotato in SVM consente un controllo di posizione nel pilotaggio, cosa impossibile nel DC classico.
Ovviamente anche nel caso del brushless la MCU deve essere più potente. Io andrei direttamente su un ARM Cortex M. Una NUCLEO di ST con cortex M4 potrebbe andare bene.

Autore:  McMax [ ven nov 25, 2016 20:11 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

aggiungo che, per come è fatto il controllo ELS, la precisione è dettata esclusivamente dai passi sul mandrino ed è meglio che siano di più rispetto a quelli della vite. Questo perché il controllo NON si può fare in velocità ma si DEVE fare in posizione... ovvero: non puoi regolare semplicemente la velocità di rotazione. Potresti farlo ma solo ammettendo di trovarti già in rotazione a regime, la fase di partenza e quella di arresto sarebbero troppo complesse e, in ogni caso, controllando la sola velocità perderesti il sincronismo angolare che è fondamentale per filettare.
Poi per carità, tutto si può fare, ma bisogna vedere a quale prezzo.

Autore:  AF116 [ sab nov 26, 2016 08:35 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Già, diventerebbe troppo complesso.

Autore:  Tuco [ sab nov 26, 2016 15:01 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Ciao MC,
Era da tanto che non rifrequentavo MD, e ho trovato il tuo progetto molto interessante,
possiedo già molti pezzi, fra i quali uno splendido encoder da 2500 step in Push Pull...
C'è modo di adattarlo per lavorare con il tuo hardware/software secondo te?
Senza doverlo collegare al mandrino in maniera demoltiplicata intendo.

P.s. ovviamente ho letto che il tuo progetto non supporta encoder ad alto numero di step, ma. non si sa mai...

Autore:  McMax [ sab nov 26, 2016 16:18 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Ciao Maurizio, è un piacere rileggerti.
2500 step sono davvero tanti, servirebbe un micro più potente di arduino. Se sono 2500 step completi questo vuol dire che una volta letti saranno 10000, ovvero 10000 interrupt ad ogni giro del mandrino.
Se proprio vuoi recuperare quell'encoder usando questo progetto credo che non ci sia altra soluzione che demoltiplicarlo.
Alternativamente si può "portare" il software su una piattaforma hardware più potente solo che non è così facile come a dirlo. Ad esempio usando una scheda Nucleo di ST basata su ARM Cortex M la cosa potrebbe anche funzionare, e pure meglio visto che non avresti più grossi limiti nemmeno nei passi stepper con grosso vantaggio anche per la fluidità nel movimento della vite.

Autore:  Tuco [ sab nov 26, 2016 21:35 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Mc, mi riviene in mente che con con il flip flop si può dividere la frequenza di un determinato ingresso.
L'errore indotto mi sembra minimo su 2500 step/giro.
Arduino ce la farebbe senza troppo aggravio di lavoro a dividere per quattro la frequenza di ingresso?

Autore:  McMax [ dom nov 27, 2016 10:09 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

col flip flop non dividi, semplicemente memorizzi un bit. Utilizzati con gli encoder possono identificare il verso di rotazione dello stesso creando di fatto un segnale direzionale come fosse il "DIR" di uno stepper. L'uscita dell'encoder è in quadratura, ovvero i due bit si alternano con una sequenza la cui fase differenziale (cioè la fase di un segnale rispetto all'altro) indica quale'à il verso di rotazione.
Per dividere gli impulsi encoder avresti bisogno di:
- FLIP FLOP per generare il segnale direzionale
- XOR per generare i segnali di step
- DIVISORE DECIMALE (o BINARIO) per demoltiplicare i passi

Con questi blocchi logici potresti ridurre i passi encoder ma in ogni caso non saresti compatibile con il software visto che i due segnali sarebbero diversi da quelli che il software vuole. In pratica ridurresti i segnali encoder a STEP e DIR come fossero quelli usati per un comune motore stepper, ovviamente all'inverso. Il software però è fatto per leggere un encoder direttamente dai segnali in quadratura.
In origine avevo previsto questa logica e la gestione dell'encoder con questi segnali ma mi sono reso conto che in fase di inversione si poteva generare una perdita di passo causata dai ritardi di propagazione delle logiche esterne. Usando il divisore la cosa si complica ulteriormente visto che il divisore non saprebbe da che parte sta girando l'encoder quindi in inversione sfaseresti il passo.

Autore:  AF116 [ dom nov 27, 2016 11:16 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Su ebay si trovano encoder cinesi al prezzo di circa 17€ compreso spedizione. Per provare credo siano un'ottima soluzione poi, se si scasseranno, si provvederà: Encoder

Autore:  Tuco [ dom nov 27, 2016 12:39 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Perfetto, il mio dubbio era appunto nel momento dell'inversione del senso di rotazione, momento nel quale, prima che il segnale dir in quadratura risegnali correttamente il senso di marcia,
si potrebbero perdere delle manciate di passi. Ho scritto correttamente?
Non mi rimane che demoltiplicare oppure provare con un arduino due...
ovviamente dovrei ricompilare il tuo programma, perché mi risulta che arduino due non sia compatibile, oltre a problemi hardware.
Ho detto qualche castroneria?

La sto facendo lunga perché ho fra le mani un bell'encoder industriale con disco in vetro da un kg di peso, e mi scoccia non utilizzarlo...

Autore:  McMax [ dom nov 27, 2016 14:37 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Nel caso di segnale diretto e non diviso, il passo che si rischia di perdere è uno solo. Il problema è dato dal fatto che lo stesso fronte che darà il passo, sarà quello letto dal flip flop per determinare il senso di rotazione. I due fronti coincidono quindi la probabilità che il passo vengo letto dall'interrupt PRIMA che l'uscita logica del flip flop cambi di stato è molto elevata.
Dividendo i passo con un divisore digitale è anche peggio perchè il divisore, che non può invertire il conteggio sulla base dello stato del flip-flip, continuerà a contare come se l'inversione non fosse mai avvenuta.
Faccio un empio pratico. Ipotizziamo di dividere per 10. Questo significa che il nostro divisore (nel caso specifico decimale) dovrà attendere 10 passi interi prima di cambiare di stato. Ipotizziamo di invertire la rotazione quando questo ne avrà contati 3. Ciò che avviene è facilmente comprensibile: il divisore attenderà 7 passi prima di cambiare di stato quindi il sincronismo angolare è perso.... certo se lo vediamo come singolo evento è trascurabile, ma se immaginiamo una situazione con inversioni multiple possiamo facilmente generare uno sfasamento inaccettabile.

Piuttosto che usare una ARDUINO due, si può valutare una NUCLEO di ST che monta la stessa serie di processori ma con costi decisamente più bassi:
http://it.rs-online.com/web/p/kit-di-sv ... i/8029425/
Per sviluppare si può usare l'ambiente di sviluppo online MBED:
https://www.mbed.com/en/

A mio avviso questa accoppiata è al momento la soluzione più conveniente dal punto di vista costi/benefici.
Se dovessi rifare oggi l'ELS userei questa configurazione, magari con una DISCOVERY F7 usando il suo display grafico:
http://it.farnell.com/stmicroelectronic ... etofThings

Certo costa un può di più ma integra anche display grafico con touch ed una potenza di calcolo di 462 DMIPS (462 milioni di istruzioni al secondo) che non ha eguali tra le altre schede di sviluppo in commercio.

Autore:  Tuco [ dom nov 27, 2016 17:16 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Ottimo...

Autore:  fxfx84 [ lun nov 28, 2016 17:25 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

riecchime...
Hai perfettamente ragione riguardo alle chiamate se i sue encoder scattano esattamente nello stesso momento una verrà eseguita successivamente all'altra, ma stiamo parlando di chiamate che incrementano un counter, (si potrebbero persino usare routine del atmel proprietarie) e siamo parlando di KHz, poi faccio la comparazione nella chiamata principale e setto dir e PWM per il DC motor con un minimo di feedforward e un PI...

l'idea è di far tutto con baracche riciclate che ho nella scatola del recupero a minimo prezzo...
ieri mi son stampato l'ingranaggio passo 1 da 12 denti per il motore dc da interfacciare col tornio, se come coppia (naturalmente demoltiplicato) ce la fa allora ci monto un encoder (da vecchia stamapante) sulla ruota e vedo se lo posso muovere e non perder passi per strada.

Per lo sviluppo preferisco usare un mega che almeno lo so usare e ne ho in giro a prender muffa...

@ AF116 sarebbe fico farlo PLL ma mi sa che diventa un poco complicato come codice

Autore:  AF116 [ lun nov 28, 2016 18:09 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

Non sono sicuro che si complichi il codice visto che l'aggancio in fase si dovrebbe fare con componentistica tradizionale esterna all'arduino, ma come giustamente fa notare McMax si otterrebbe solamente un aggancio alla velocità di rotazione del mandrino e non alla posizione angolare. Praticamente servirebbe solamente per avanzamenti sincronizzati alla velocità del mandrino.

Autore:  fxfx84 [ mar nov 29, 2016 09:00 ]
Oggetto del messaggio:  Re: ELS (Electronic Lead Screw) - progetto con ARDUINO

ah il pll l'avresti fatto in logica esterna non con il codice, allora si così saresti infase ma non potresti gestire la posizione...
ieri non son riuscito ad andare avanti (ho dovuto riparare il tosaerba) stasera me lo studio un pò, stavo pensando un altra cosa visto che il mandrino girerà a velocità pressoche costante perchè invece che usare l'encoder in maniera incrementale, si uniscono 2 fori sul'encoder con questi definire lo zero, quindi gestire la posizione del mandrino in maniera assoluta in gradi (un pò come fanno le centraline sulle auto).così facendo si ridurrebbero di molto gli interrupt dal mandrino, senza perdita di precisione.(interpolo tra un intterupt e l'altro)
Ho ordinato qualche encoder dalla cina col furgone, mentre aspetto cerco un motore abbastanza potente per tirare la vite.

Pagina 21 di 95 Tutti gli orari sono UTC +1 ora
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/