Vai al contenuto
PLC Forum


Arduino e encoder assoluti


Wimatech

Messaggi consigliati

Ciao a tutti sto progettando un dispositivo che in sostanza è composto da un supporto in grado di ruotare e inclinare su se stesso e monta un distanziometro laser per effettuare delle misurazioni.

il sistema viene movimentato da motori passo passo intendo comandarlo a distanza via radio e il laser comunica in RS232 purtroppo devo eseguire piccolissimi movimenti così ho optato per motori con motoriduttore 100:1 più una coppia di pulegge 3:1 per ottenere un angolo di 0.006 gradi ad ogni step di motore quindi devo per forza montare degli encoder per avere una misurazione precisa della posizione.

pensavo di usare un Arduino comandare i movimenti a distanza usando uno shield radio aggiungere anche lo shield per il Bluetooth per passare poi i valori letti al pc ecc.

sono però in crisi per quanto riguarda la lettura dei valori dagli encoder.

mi hanno proposto i seguenti prodotti lika a 16 bit:

 

HS58S16 encode assoluto monogiro 16 bit con protocollo SSIoppure BUS tipo Profinet, Ethercat
IP58S-H-PROG   encoder incrementale HTL o TTL programmabile fino a 65536 impulsi giro
 
Qualcuno mi sa dare una dritta su quale scegliere e come fare per leggere il valore?
 
grazie
Link al commento
Condividi su altri siti


Scegli un encoder assoluto con interfaccia parallela. Con 16 bits avrai una risoluzione di 0.0055°.

Meglio se usi un arduino mega, così hai il numero di ingressi sufficienti, altrimenti devi usare un espansore di ingressi.

puoi usare anche un encoder incrementale, peròti complichi la vitaper 2 motivi:

  1. Devi prevedere un software per discriminare il senso di rotazione e questo, visto che la velocità di rotazione sarà molto bassa, non è un grosso problema.
  2. Devi effettuare la ricerca del punto di zero meccanico adogni accensione; questo ti complica un poco la programmazione ed anche la meccanica perchèdevi prevedere un fine corsa di zero.
Link al commento
Condividi su altri siti

Buongiorno, la ringrazio infinitamente per la sua risposta, indubbiamente avevo già deciso di escludere a priori gli incrementali appunto per evitare tutte le relative complicazioni dovute ad azzeramenti e direzioni di moto.

Un paio di domande finali:

Gli encoder ad interfaccia parallela necessitano di shield dedicati per la loro lettura o vanno collegati ad arduino direttamente e dove posso trovare qualche esempio?

Sul mio device ne devo montare due è il caso che metta due mega in rete o ne basta uno solo?

Link al commento
Condividi su altri siti

Arduino accetta segnali a 5V, quindi se trovi encoders con uscita TTL, oppure con uscita Open Collector che accetta 5V  sei a posto; nel caso tu trovassi solo encoders con uscita 24 V saresti obblicato ad interfacciare il tutto con dei riduttori di tensione, è sufficiente un resistore ed un diodo per ogni ingresso.

Se devi usare una risoluzione pari a 16 bits, che è il minimo per avere quello che ti serve, ti servono in totale 32 ingressi, ora non ricordo quanti I/O ha il mega, ma basta prendere le specifiche e fare il conto.

 

Sui 16 fili (più il comune a zero volt) trovi una configurazione in codice, questo corrisponde alla posizione; 0000 0000h corrisponde allo zero dell'encoder, FFFF FFFFh, corrisponde alla 65365a posizione ovvero a 360°. DOvrai fasare meccanicamente gli encoder, quindi dovrai revedere un giunto che ti dia questa possibilità.

Il codice, in genere, non è binario puro ma, solitamente, è GRAY (magari anche riflesso). se fa una ricerca con parole "Codice gray" trovi tutte le spiegazioni.

In pratica dovrai leggere gli ingressi a tempo fisso e tradurre il codice letto in gradi e frazioni di grado rislovendo una semplice proporzione.

Ogni qunato tempo leggere gli gli ingressi? dipende dalla velocità di rotazione massima.

Ad esempio

Se il tuo encoder compie una rivoluzione completa in 60" avrai 60000/65535 = 915.54µs per avere una variazione di 1 bits, quindi dovrai leggere gli ingressi con cadenza <= 458µs per avere la sicurezza di non perderti alcuna vqriazione.

Link al commento
Condividi su altri siti

Ora mi è tutto più chiaro, si il Gray code ho presente cos’è il mio dubbio era dato dal fatto che guardando l’offerta che mi hanno fatto e i vari cataloghi ho visto che gli encoder più comuni comunicavano in ethercat o ssi o profibus non avevo idea che esistessero anche con le singole uscite per ogni bit.

proveró a chiedere al mio fornitore di darmene uno di quel tipo.

per quanto riguarda la frequenza di lettura non è un problema perché viene fatta molto lentamente 

Link al commento
Condividi su altri siti

bsi e ssi sono le uscite seriali più comuni ..... non saprei come collegarle ad arduino mega (mai fatto) .... tuttavia posso solo aggiungere che con un incrementale avresti solo 6 fili TTL ovvero 12 fili per 2 encoders e il costo di norma è di molto inferiore ... per affidabilità e risparmio ti converrebbe usare un tamagawa .... se passi attraveso siti cinesi lo paghi anche molto poco.

Per il discorso della complessità software .... secondo me puoi copiare snipset direttamente da vari forum ... tuttavia allo spegnimento è sempre possibile memorizzare la posizione (il tuo non è dispositivo pericoloso quindi ...) in più con una riduzione 1:300 mi viene da dire che è quasi impossibile che senza corrente tu possa muovere gli assi a mano. Tuttava esistono motori passo passo con freno e con encoders a bordo. Per una questione di velocità di azzeramento potresti utilizzare un disco forato e prpare non uno ma molti punti di azzeramento "codificati". Così puoi azzerare anche in posizioni molto differenti da quella "principale" a patto ogni volta di aggiungere il corretto offset al sistema.

Ovviamente l'uso degli assoluti rende tutto molto più semplice ....

Link al commento
Condividi su altri siti

11 ore fa, gffbx scrisse:

con un incrementale avresti solo 6 fili TTL

 

Come ho scritto da subito (cfr il mio primo messaggio).

Il problema con l'incrementale è che ad ogni accensione, se vuoi la certezza della posizione, devi fare la ricerca di zero, quindi devi avere un FC di zero meccanico.

 

Quote

Per una questione di velocità di azzeramento potresti utilizzare un disco forato e prpare non uno ma molti punti di azzeramento "codificati".

 

L'idea del disco forato non è applicabile, perchè non da comunque la posizione assoluta, ti da solo un punto notevole, ma comunque sconosciuto.

Ci deve essere uno, ed uno solo, riferimento di zero. Che tu lo realizzi con un proximity, con un fine corsa a micro interruttore o con una forcella ottica e disco con un foro, può influire solo sulla tolleranza, ma deve comunque essere una posizione univoca.

Per codificarli dovresti avere varie combinazioni di fori, riducendo la precisione e complicando notevolmente l'operazione.

Vista la frequenza può scegliere un prodotto con uscite Open Collector ed avere solo 3 fili (A, B e marca di zero) più il comune.

 

9 ore fa, Wimatech scrisse:

Ciao grazie dell’interve cos’è snipset?

 

Se si usasse la lingua italiana, visto che siamo italiani, basterebbe dire "funzione".

In rete trovi molti "sketches" (tanto per stare sulle terminologie anglofone) che usano i contatori di arduino per interfacciare un encoder incrementale.

Esiste anche varianti che prevedono un discriminatore Hw di senso di rotazione, che indirizza gli impulsi ad un contatore differente secondo senso.

Vista la frequenza di conteggio che affermi essere molto bassa, cosa che supponevo vista l'applicazione, puoi benissimo usare gli ingressi per discriminare e contare via software gli impulsi.

 

Insomma hai una vasta possibilità di opzioni, ognuna con il suoi pro ed i suoi contro.

 

Personalmente preferirei spendere un poco (o molto) di più ed avere la certezza della posizione in qualsiasi momento ed in qualsiasi condizione. Da quanto scrivi l'applicazione è un sistema di misura, quindi a mio avviso è meglio previlegiare precisione ed affidabilità.

 

Un discorso a parte, poi, è la compatibilità elettromagnetica di arduino, che è praticamente inesistente.

Arduino è un bellisimo oggetto, progettato per costituire un mezzo di sviluppo software a bassissimo costo. Funziona benissimo sino a che lo usi in laboratorio.

Non appena vai sul campo e ci accoppi ingressi ed uscite che interfacciano altri dispositivi come attuatori, relè, motori, etc., incominciano i guai.

 

Quindi ti consiglio di disaccoppiare bene l'alimentazione ad arduino (magari leggi qualche altra discussione in questa sezione dove ho già trattato l'argomento). Anche i segnali da e per il campo vanno trattati con molta cura.

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

Il dispositivo che sto cercando di fare utilizza un radiocomandato per muovere i due motori e posizionare il puntatore laser, quando il laser è sul punto da acquisire verrà premuto un tasto di lettura delle coordinate a quel punto viene effettuata la lettura degli encoder e memorizzato il valore quindi la lettura avverrà solo ogni tanto, sono anch’io d’accordo con lei per restare sugli assoluti nei prossimi giorni farò una ricerca per vedere se ne trovò con uscite ttl

Link al commento
Condividi su altri siti

  • 11 months later...

Purtroppo non sono più riuscito a collegarmi e controllare le risposte al mio post per diciamo "problemi tecnici" in ogni caso mi sono arrivati 2 encoder a 2 canali in quadratura push pull, tipo questo:

 

link

 

ho montato un switch di ricerca zero e ho collegato i due canali ai pin di arduino 2/3 e ho utilizzato le funzioni di interrupt usando uno sketch trovato on line e il tutto funziona ma per alleggerire il carico di lavoro a arduino e allo stesso tempo non perdere nessun impulso dell'encoder mi sono messo a cercare qualche integrato che mi permettesse di ottenere degli ingressi ad ogni variazione di posizione e gli unici che ho trovato sono gli:

LS7183
LS7184

il problema è che su tutti i vari market on line che ho guardato non sono disponibili o mi chiedono 20/30€ l'uno, avete suggerimenti in merito?

Link al commento
Condividi su altri siti

Su Aliexpres li trovi a poco più di16€.

Sono componenti speciali fatti praticamente da un solo produttore.

 

Però con un doppio Flip-Flop ottieni il medesimo risultato, potresti farti lo schedino da mettere tra encoder e arduino.

Link al commento
Condividi su altri siti

  • 10 months later...

Esistono anche encoder assoluti monogiro con uscita diretta su porta seriale RS232, in qusto modo non serve nessuna interfaccia specifica e possono essere letti da Arduino o Raspberry. Per gli encoder assoluti SSI questi possono essere letti anche in bit-banging direttamente da Arduino, ma occorre un minimo di interfaccia per la gestione dei segnali differenziali di clock e di dato.

 

Saluti!

F.

Link al commento
Condividi su altri siti

il 23/6/2020 at 11:16 , Livio Orsini scrisse:

Su Aliexpres li trovi a poco più di16€.

Sono componenti speciali fatti praticamente da un solo produttore.

 

Però con un doppio Flip-Flop ottieni il medesimo risultato, potresti farti lo schedino da mettere tra encoder e arduino.

 

Se utilizzi un semplice PIC a 5V con modulo QEI (Quadrature Encoder Interface) e scrivi due righe di codice ti fai la tua interfaccia a costo certamente inferiore, poi sfrutti la porta RS232 oppure I2C o SPI per comunicare con il mondo esterno.

Esempi di PIC piccoli con modulo QEI sono il PIC18F4331 oppure il PIC30F4011 poi andando su micro più grandi trovi i PIC32 ecc...

 

Esistono anche encoder assoluti con interfaccia RS232 che potresti addirittura gestire direttamente da Arduino o Raspberry anche in bit-banging e versioni con uscita SSI che richiedono però l'utilizzo di un interfaccia differenziale per la gestione dei segnali di clock e data, anche questi possono comunque essere gestiti in bit banging.

 

Le interfacce parallele vanno bene, ma se sali di risoluzione (un 1024 passi giro sono già 10 linee) ti mangi un sacco di porte in ingresso e devi necessariamente utilizzare un codice Gray per evitare altre problematiche di lettura, se non hai particolari necessità ci sono encoderini a basso costo da pochi bit.

 

Le interfacce EtherCAT, ProfiNET ecc... le lascerei stare a meno che non stai lavorando ad applicazioni high-end (necessità di real time) o se hai molti encoder e volendo ottimizzare i cablaggi decidi di stare su una tecnologia fieldbus, sono però tipicamente gestiti solo con sistemi e schede dedicate che delle volte possono essere anche costose (PLC + modulo lettura dedicato), ma è una certamente una possibilità.

 

Dipende da cosa ti serve in realtà, quindi quanto sei disposto a spendere e quali compromessi sulle prestazioni finali del sistema sei disposto ad accettare.

 

Saluti

Pow

Link al commento
Condividi su altri siti

  • Livio Orsini locked this discussione
Ospite
Questa discussione è chiusa alle risposte.
×
×
  • Crea nuovo/a...