Vai al contenuto
PLC Forum


Encoder Assoluto o Incrementale?


Blip

Messaggi consigliati

Salve a tutti!!

Devo svolgere un progetto per l'esame di maturità e mi è stato assegnato  "Automazione dell'orientamento di una antenna per ricezione satellitare", io per fare il tutto ho deciso di dare al "cervello" la posizione che deve assumere l'antenna per determinati satelliti(Es: Per Hotbird l'antenna di deve posizionare a 13° Est, ovvero Azimut 180° e l'Elevazione 41° ecc..), per determinare la posizione di ogni albero motore(angolo d'Azimut e angolo d'elevazione) ho deciso di utilizzare degli encoder ottici, e come "cervello" del tutto un Arduino.

Quindi in maniera riassuntiva ho bisogno di un encoder che mi può determinare la posizione che assumono gli alberi motore dei due motori elettrici, ovvero l'angolo di Azimut per il primo che sta nella base e l'angolo di elevazione.

Ed è qui che mi viene il dubbio, quale tipo di encoder conviene utilizzare se io lavoro con Arduino? Assoluto o Incrementale?

Ho provato a cercare qualcosa su questi tipo di Encoder, ma non ho trovato niente che mi è utile.

E soprattutto mi conviene utilizzare Arduino? 

Scusate in caso se ho scritto nella sezione sbagliata.

 

Modificato: da Blip
per specificare ulteriormente.
Link al commento
Condividi su altri siti


L'encoder incrementale, come dice il nome, misura gli incrementi (variazioni) di posizione, quindi fino a che non li muovi non producono impulsi. Pertanto, allo spegnimento del contatore (Arduino o qualsiasi altra cosa), la posizione attuale viene persa. In teoria è possibile memorizzare la posizione attuale in un'area ritentiva (sotto batteria, EEPROM, Flash...) e recuperarla all'accensione, e da lì partire, ma se qualcuno a controller spento sposta l'encoder, la posizione non sarà reale. Per questo i sistemi incrementali normalmente hanno una procedura di azzeramento che cerca un riferimento (sensore, tacca, ecc) e al suo raggiungimento preimposta la posizione (che è nota) e da lì poi si procede.

L'encoder assoluto non ha questi problemi, ma ci sono diverse cose da considerare: ci sono encoder assoluti monogiro, quindi la posizione è nota solo all'interno di un giro di albero encoder, se se ne fanno di più, si perde la posizione. Questi encoder hanno spesso una interfaccia digitale a bit codificati (codice Gray, per esempio) che utilizzano un filo per ciascun bit di informazione (nell'incrementale sono necessari solo due fili)..

L'encoder assoluto multigiro invece tiene conto anche (entro certi limiti, piuttosto ampi) dei giri fatti e danno la vera posizione, ma non utilizzano interfacce digitali, invece ussano sistemi di comunicazione seriale ad alta velocità o bus di campo per comunicare la posizione. Spesso i protocolli sono proprietari e non è semplice implementarli.

 

Una possibile soluzione è anche quella di limitare, con ingranaggi e/o leverismi, al campo di rotazione di un potenziometro (un giro o meglio 10 giri) di qualità, e leggerne la posizione mediante un convertitore ADC di opportuna risoluzione, e dotare il tutto di una buona e stabilizzata tensione di alimentazione. Soprattutto per basse velocità, questo sistema è interessante e assoluto.

Link al commento
Condividi su altri siti

29 minuti fa, Ctec scrisse:

Una possibile soluzione è anche quella di limitare, con ingranaggi e/o leverismi, al campo di rotazione di un potenziometro (un giro o meglio 10 giri) di qualità,

 

E la soluzione che mi sento di caldeggiare, oltre a tutto il posizionamento dell'elevazione è limitatoa soli 90° teorici, ma in pratica potrebbero essere anche meno di 45°; per l'azimuth l'escursione teorica è di 180° e questo è il posizionamento più delicato.

Arduino dispone di A/D che quantizzano in 1023 livelli tutta l'escusrsione di tensione. Quindi usato come misuratore azimutale avresti una risoluzione pari ca circa 176/1000 di grado, risoluzione che forse non è sufficiente.

Nel caso potresti ipotizzare una soluzione mista: potenziometro multigiro per l'elevazione e encoder assoluto per l'azimuth.

 

Io prenderei in considerazione anche la soluzione ad anello aperto tramite 2 motori stepper.

Facendo le cose per bene si ottengono precisioni elevatissime, tanto che la maggior parte dei CNC hobbystico/amatoriali prevede questa soluzione.

Basta prevedere la possibilità di una posizione di zero, magari centrale, posizione che si può rilevare tramite un sensore di prossimità.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

del_user_293569

Con Arduino puoi usare la stessa logica di azionamento  dei carrelli x e y di una stampante 3D

Basta trovare un posizionatore "PAN" e "TILT" e fare gli opportuni adattamenti meccanici.

Se cerchi sul web dovresti trovare qualcosa per arduino già predisposto per movimentare le telecamere di video-sorveglianza

Modificato: da Francesco_54
Link al commento
Condividi su altri siti

il 24/4/2021 at 16:55 , Livio Orsini scrisse:

Arduino dispone di A/D che quantizzano in 1023 livelli tutta l'escusrsione di tensione. Quindi usato come misuratore azimutale avresti una risoluzione pari ca circa 176/1000 di grado, risoluzione che forse non è sufficiente.

Nel caso potresti ipotizzare una soluzione mista: potenziometro multigiro per l'elevazione e encoder assoluto per l'azimuth.

Buongiorno, grazie a tutti per la risposta :).

Ho capito il discorso di usare dei potenziometri multigiro al posto dei encoder.

Ma avrei qualche dubbio, tipo che rapporto ha fatto lei qui sopra per determinare la risoluzione? e poi perché potrebbe non essere sufficiente?

scusate la mia ignoranza.

 

Link al commento
Condividi su altri siti

Supponiamo che tu riesca ad avere per tutti i 180° di escursione meccanica tutta l'escursione del potenziometro e che tu sfrutti tutto il campo analogico 0-5V, quindi il tuo campo di lettura analogica è 0-180°.

Siccome hai al massimo 1024 valori di conversione (Arduino ha convertitore da 10bit) per cui il valore digitale corrispondente sarà nel campo 0-1023.

Quindi ogni "scalino" di valore digitale corrisponderà al valore del range di posizione 180° diviso per il numero dei livelli (1024), cioè 180/1024=0.175° (in decimale) di risoluzione.

Se tu avessi bisogno di fare posizionamento con precisione di 0.1° non ci riusciresti. Dovresti avere una risoluzione (numero livelli) superiore, per esempio 16bit=65536 valori (risoluzione di 180/65536=0.002746°), usando magari un convertitore esterno letto da Arduino.

Link al commento
Condividi su altri siti

19 ore fa, Ctec scrisse:

Se tu avessi bisogno di fare posizionamento con precisione di 0.1° non ci riusciresti

 

Andrea non per pignoleria, ma solo per informazione.

Con una risoluzione di 0.175°, è già difficile, ma direi praticamente impossiibile, ottenre una precisione 0.35°; con questa risoluzione direi che 0.5°, o 30', sono la massima precisione che ci si può ragionevolmente attendere.

Non so se è una precisione sufficiente per un buon puntamento di un'antenna satellitare.

 

Io, torno a ripetere, considererei seriamente l'ipotesi di un posizionamento ad anello aperto con motori stepper.

Link al commento
Condividi su altri siti

il 27/4/2021 at 08:52 , Livio Orsini scrisse:

Io, torno a ripetere, considererei seriamente l'ipotesi di un posizionamento ad anello aperto con motori stepper.

Ciao Livio, Sinceramente mi incuriosisce ma non saprei da dove partire che non so molto, e non vorrei disturbarla ulteriormente per farmi spiegare questo, che sembra qualcosa di complesso.

Link al commento
Condividi su altri siti

1 ora fa, Blip scrisse:

che sembra qualcosa di complesso

 

No è molto più semplice del posizionamento ad anellco chiuso con encoder.

Tra l'altro in rete trovi tantissimi progetti ed esempi di pilotaggi di motori stepper con arduino e ci sono libreirie pronte per la gestione.

 

Tanto per fare un esempio,immaginiamo che ad ogni passo del motore stepper corrisponda uno spostamento azimuthale di 0.1°.

Sempre come esempio immaginiaamo che il tuo dispositivo debba essere posizionato a 43,4°. Se il sistema è appena sto acceso, si porterà sulla posizione di zero, individuata da un sensore tipo proximity o microiswitch. Da quel puntodovrai dare 434 impulsi al drive dello stepper.

Se invece avessi usato un encoder assoluto avresti dovuto usare un algoritmo di posizionamente con relativo profilo di velocità da dare al drive del motore.

 

1 ora fa, Blip scrisse:

e non vorrei disturbarla ulteriormente 

 

Non c'è problema fammi pure le domande necessarie. nella peggiore delle ipotesi ti risponderò che non sono in grado di rispondere alla tua domanda.

Link al commento
Condividi su altri siti

Mi sapresti linkare qualche esempio?

Per orientarmi bene mi servirebbe qualche esempio simile al mio, così posso iniziare a lavorarci.

Grazie per la tua disponibilità.

Link al commento
Condividi su altri siti

Se cerchi in rete qualche cosa come "arduino solar tracker" trovi una grande massa di esempi.

Non è un'applicazione identica,ma molto simile.

Si tratta sempre di posizionare un oggetto ad una certa elevazione ed ad una determinata posizione azimuthale. Nel caso di un inseguitore solare le informazioni di posizione derivano o da un calendario astronomico, oppure da un sensore di luminosità. Però il sistema di posizionamento è molto simile se non uguale.

Link al commento
Condividi su altri siti

Ciao, praticamente ci ho pensato un po' sul come farlo e ho deciso di farlo così, utilizzerò due stepper motor(0.9° per step) che verranno pilotati da Arduino tramite appositi driver, la posizione 0° del motore(angolo azimutale) verrà presa da una bussola elettronica, invece per rilevare l'angolo d'elevazione(45°) utilizzerò un potenziometro che andrà a confrontare il valore con un sensore, che mi darà l'inclinazione(in gradi) del terreno o camper(accelerometro), quindi prendiamo per esempio che l'antenna ha una elevazione corretta di 45°, ma il camper ha subìto un'inclinazione di 10°, andrò a fare 45°-10° per trovare la giusta elevazione dell'antenna, di conseguenza dovrò dare 11 impulsi al motore.

è giusto come ragionamento?

Ho tralasciato qualcosa?

scusale l'ignoranza.  

 

Modificato: da Blip
Link al commento
Condividi su altri siti

23 minuti fa, Blip scrisse:

invece per rilevare l'angolo d'elevazione(45°) utilizzerò un potenziometro che andrà a confrontare il valore con un sensore, che mi darà l'inclinazione(in gradi) del terreno o camper(accelerometro),

 

E previsto come dispositivo mobile?

Se non è così l'accelerometro non serve perchè in fase di messa ion servizio tari la corrispondenza  tra potenziometro e angolo di elevazione; per fare lo zero basta una normale livella o bolla.

Comunque mettere il sensore di inclinazione è un plus.

 

Cosa devi realizzare? un modellino funzionante?

Link al commento
Condividi su altri siti

1 ora fa, Livio Orsini scrisse:

E previsto come dispositivo mobile?

Si, o almeno è quello che ho pensato oggi con il mio prof.

1 ora fa, Livio Orsini scrisse:

Cosa devi realizzare? un modellino funzionante?

Beh semplicemente un progetto che non ha difetti, per il modellino ci ho pensato, ma non ho tempo.

 

1 ora fa, Livio Orsini scrisse:

Comunque mettere il sensore di inclinazione è un plus.

Perché? Non ho bisogno dell'inclinazione? visto che se il camper è leggermente inclinato cambia anche l'elevazione della parabola. 

Link al commento
Condividi su altri siti

Che poi il progetto chiede questo, ma io vorrei fare qualcosa di più completo.

1.INTRODUZIONE E GENERALITÀ:

 2.SCHEMA A BLOCCHI DEL DISPOSITIVO ED ANALISI DEL FUNZIONAMENTO DEL DISPOSITIVO

 3. ANALISI DI OGNI BLOCCO E INDIVIDUAZIONE DELLA COMPONENTISTICA (AMPLIFICATORI, CAMPIONATORI, ECC…)

4. PROGETTO DI UN BLOCCO O PIÙ BLOCCHI IN CIRCUITERIA ELETTRONICA 

5.PROGETTO DEL SOFTWARE DI GESTIONE (FLOW-CHART E QUALCHE SEGMENTO DI CODICE DEL PROGRAMMA)

 6. PROCEDURA DI COLLAUDO DEL DISPOSITIVO

 

Scusate per il testo tutto maiuscolo,  mi sono accorto adesso.

Modificato: da Blip
Link al commento
Condividi su altri siti

12 ore fa, Blip scrisse:

visto che se il camper è leggermente inclinato cambia anche l'elevazione della parabola.

 

Se la postaszione è fissa, lo metti "in bolla", oppure misuri l'errore rispetto allo zero e lo introduci come costante di taratura. Comunque non è fondamentale. Solo che quando si progetta un dispositivo si deve anche pensare a minimizzare la componentistica. Tutto ha un costo e tutto può guastarsi, quindi quello che non c'è non costa e non si guasta.🙂

 

Io ti consiglierei di dedicare un paio d'ore a ricercare e leggere qualche tesi e/o tesina tra quelle presenti in rete. Anche se l'argomento è differente, ti fai un'idea di come è meglio presentare il lavoro. QUesta operazione spiega molto meglio di uno scritto mio o di altri su come organizzare la tua esposizione.

 

 

 

Link al commento
Condividi su altri siti

il 4/5/2021 at 07:42 , Livio Orsini scrisse:

 

Se la postaszione è fissa, lo metti "in bolla", oppure misuri l'errore rispetto allo zero e lo introduci come costante di taratura.

 

Non saprei come farlo😅.

E facendo alcune ricerche sull'accelerometro ho scoperto che forse non mi va bene per l'inclinazione.

Qualche sensore per trovarmi l'inclinazione in gradi?(anche non, l'importante e che c'è un metodo per convertirlo).

Link al commento
Condividi su altri siti

13 ore fa, Blip scrisse:

Non saprei come farlo

 

E la cosa semplicissima, conosciuta da oltre 2000 anni.Oggi è sufficiente disporre di una "bolla" da muratore per poter mettere a livello un oggetto o un piano.

Comunque prova a cercare "livella elettronica", dovresti avere parecchi risultati con parecchi dispositivi tra cui scegliere. Ci sono anche semplici piattaforme inerziali che oggi non sono molto costose.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...