Vai al contenuto
PLC Forum


Gestione Encoder Incrementale


baltimora

Messaggi consigliati

Mi trovo per la prima volta a dover creare un soft dove è (tra le altre cose) necessario gestire un encoder incrementale.

Con l'encoder bisogna verificare la velocità del motore, il senso di rotazione e la distanza percorsa.

L'encoder ha due canali ( a & b ). Ho qualche dubbio sulla configurazione e l'uso con l'encoder degli ingressi veloci del mio S7 1200.

Inizialmente avevo pensato di collegare il canale A sul primo ingresso veloce e configurarlo in modalità frequenza che avrei utilizzato poi per conoscere la velocità del motore, e il canale B sul secondo ingresso veloce configurato come contatore, che avrei poi utilizzato per rilevare la posizione (incrementando e decrementando il contatore) Il problema nasce dal fatto che non so come rilevare il senso di rotazione del motore, per poi abilitare l'incrementazione o la decrementazione del contatore.

Grazie per eventuali suggerimenti.

Modificato: da baltimora
Link al commento
Condividi su altri siti


Il senso di rotazione del motore, lo si evince dai fronti dei 2 canali A e B.

Quando il motore ruota in senso orario, andrà alto prima il fronte dell'impulso facente capo al canale A, poi quello dell'impulso facente capo al canale B.

Viceversa in caso di rotazione antioraria.

(i 2 impulsi sono tra loro sfasati di 90°)

A quel punto sta a Te sviluppare una programmazione che sfrutti questa situazione .

Posso dirTi che per farlo con l'elettronica digitale è sufficiente un Flip-Flop tipo "D" e nient'altro :)

Saluti e buon Anno

Mirko

Link al commento
Condividi su altri siti

Ciao e grazie per la risposta, ma ancora non ho compreso come realizzare la fase di individuazione del senso di rotazione.

So cosa è un flip flop e come funziona, ma non quelli di tipo D.

Anche se ho fatto una ricerca in rete, ma non mi sono schiarito le idee. (mi sa che in questi giorni di festa ho bevuto un pò troppo.....ma l'ho fatto solo per non pensare alla stangata che ci aspetta nel 2012) :superlol:

Mi potresti cortesemente spiegare meglio come realizzare il controllo del senso di rotazione?

Grazie

Modificato: da baltimora
Link al commento
Condividi su altri siti

in generale quasi tutti i plc gestiscono encoder

quindi basta abilitarli ( lineare circolare ecc.. )

quando e' abilitato automaticamente e ' associato a due ingressi veloci + fase z

sempre automaticamente in base al senso di rotazione aumenta e diminuisce il valore una/due word

spesso danno anche un bit on avanti off indietro

da questo (standar ) ricavi velocita posizione senso di rotazione

almeno per omron

il simens 1200 non credo sia tanto diverso

Modificato: da gianff
Link al commento
Condividi su altri siti

Mirko Ceronti
ma ancora non ho compreso come realizzare la fase di individuazione del senso di rotazione.

Se piazzi le uscite di un Encoder incrementale negli ingressi di un oscilloscopio a doppia traccia, col sistema in rotazione vedrai ciò che è nel grafico qui sotto, ossia se l’encoder gira in senso orario, avrai gli impulsi del canale A in anticipo di 90° rispetto al canale B, e viceversa in caso di rotazione antioraria.

(ignoriamo per ora il canale di “zero”)

Encodergraphic.jpg

So cosa è un flip flop e come funziona, ma non quelli di tipo D.

Il Flip Flop “D”, come tutti i flip flop, obbedisce ad una legge insindacabile la quale pontifica che l’'uscita “Q” è sempre inversa a quella “Q negato”.

Quindi se una di queste è ad “1” logico l’altra è per forza a “0” !

Inoltre (particolarità del tipo “D”) quando sul Flip-Flop arriva l’impulso di Clock, ciò che è sul terminale “D” (Data) si trasferisce sull’uscita “Q”, capovolgendo quindi ciò che era sul “Q negato”.

Chiarito questo concetto, è elementare capire che nel circuito sottostante (Flip-Flop D appunto)

Encoder.jpg

una volta che ho collegato il canale A dell’encoder all’ingresso “D”, ed il canale B al clock, quando l’encoder gira in senso orario io avrò l’illuminarsi del led CW (senso orario) visto che “D” è andato ad “1” logico per primo, “Clock” ci va per secondo ponendo così sull’uscita “Q” il segnale “1” che intanto è sul “Data”, e spegnendo quindi il led sul Q negato, uscita opposta a “Q” e quindi a “0” logico.

Viceversa accadrà se inverto la rotazione all’encoder, infatti dal grafico si evince che stavolta arriva prima il segnale “B” di “A” che (ora) è sfasato di 90° in ritardo rispetto a “B”.

Per cui con l’uscita “A” a “0” logico, arriva l’impulso dato da “B” sul clock, e questi cosa presenta ?

Presenterà su “Q” uno “0” logico appunto spegnendo quindi il led CW, ma…..(per la legge delle 2 uscite contrapposte) “Q negato” andrà ad “1” accendendo così il Led CCW (senso antiorario) indicando appunto da che parte gira ora l’encoder.

Ora la sfida è : prova Tu a riproporre tramite la programmazione questo circuito (Flip-Flop D) nel P.L.C. e vedrai che avrai ottenuto il modo di discriminare i 2 sensi di rotazione.

Oh, poi se il P.L.C. del caso ha già la gestibilità di Encoder il tutto è già fatto, ma io come esercizio didattico se fossi in Te ci proverei.

Ah…dimenticavo, il Led “zero” puoi usarlo come conteggio giri del motore.

Buon anno

Mirko

Modificato: da Mirko Ceronti
Link al commento
Condividi su altri siti

Non conosco il 1200, ma se ha ingressi veloci dovrebbe anche avere contatori Up/Down associabili come per lo S7-2xx. Con questa associazione è facile ricavare il senso del conteggio.

Link al commento
Condividi su altri siti

S7 1200 ha ovviamente anche esso degli ingressi configurabili come ingressi veloci. (HSC)

Tali ingressi possono essere configurati come ingressi di conteggio e/o di frequenza ove il valore è disponibile direttamente sull'indirizzo dell'area di memoria associato a quell'ingresso.

Ho già utilizzato tali ingressi diverse volte per altre situazioni (contalitri, flussostato ecc) Tali dispositivi come principio erano simili agli encoder, emettevano un certo numero di impulsi in funzione alla velocità/quantità del liquido che li attareversava.

Non ho problemi a rilevare la velocità e la posizione del mio nastro trasportatore utilizzando l'encoder, ma nella rilevazione del senso di rotazione non ho le idee chiare. Proverò a studiare una soluzione e poi a chiedere il vostro consiglio sulla sua correttezza.

Grazie e buon anno 2012

Link al commento
Condividi su altri siti

potresti effettuare due letture dell encoder, una la memorizzi in una word e l altra dopo es 50ms la memorizzi in una altra word, fai il confrontro tra le due word se la seconda è maggiore della prima stai andando in avanti e viceversa. Sempre se nella 1200 non ci sia qualche funzione molto piu semplice ovviamente.

Link al commento
Condividi su altri siti

Se non ricordo male, negli HSC del 200 c'è un merker che indica il senso di conteggio.

Nel caso non ci fosse questo flag, individuare il senso di conteggio è facilissimo. Basta leggere al volo il contatore e confrontare il valore letto con il valore della precedente lettura. Maggiore conteggio avanti, minore conteggio indietro. Poi si memorizza il valore eltto per la prossima lettura.

Se i 32 bits degli HSC non fossero sufficienti c'è solo da gestire il trabocco.

Link al commento
Condividi su altri siti

potresti effettuare due letture dell encoder, una la memorizzi in una word e l altra dopo es 50ms la memorizzi in una altra word, fai il confrontro tra le due word se la seconda è maggiore della prima stai andando in avanti e viceversa

Avevo pensato anche io ad una soluzione del genere, ma mi viene il dubbio che non sia molto efficiente, anche perchè la differenza tra i due contatori è di una sola unità (un solo impulso).

Se non ricordo male, negli HSC del 200 c'è un merker che indica il senso di conteggio.

Non so se nell' S7 1200 esiste qualche cosa del genere, nel manuale mi sembra di non aver letto nulla in merito.

Basta leggere al volo il contatore e confrontare il valore letto con il valore della precedente lettura. Maggiore conteggio avanti, minore conteggio indietro. Poi si memorizza il valore eltto per la prossima lettura.

Si, ma per mandare indietro il contatore, mi servirebbe una qualche abbilitazione che mi dica che i successivi impulsi anzichè sommarli devono essere sottratti, e per questo vorrei capire il senso di rotazione. Userei il senso di rotazione per invertire poi la decrementazione del contatore.

(Ho forse non ho compreso bene ciò che intendevi dire?)

Io ancora non ho fatto qualche prova con l'encoder, li farò nei giorni successivi quando rientro al lavoro, ma l'encoder, indifferentemente dal senso di rotazione, fornisce solo una serie di impulsi, non credo che tali impulsi incrementano o decrementano in base al senso di rotazione. Questo andrebbe fatto a livello software.

Io aveve pensato di utilizzare i fronti e di fare così:

(senso orario) Il canale A abbilita un bit ed il canale B lo resetta

(senso antiorario) Il canale B abbilita un bit ed il canale A lo resetta

Ovviamente interbloccando le cose tra di loro in modo che entrambi i bit son possono essere portati a livello logico alto.

Il primo che sale disabilita l'altro.

Ho però un dubbio. Se gli ingressi sono configurati come ingressi HSC in conteggio, nel programma possono essere anche utilizzati come normali ingressi (sempre veloci) per rilevare il loro fronti di salita e discesa?

Modificato: da baltimora
Link al commento
Condividi su altri siti

Se non ricordo male, negli HSC del 200 c'è un merker che indica il senso di conteggio
Non so se nell' S7 1200 esiste qualche cosa del genere, nel manuale mi sembra di non aver letto nulla in merito.

Ha ragione Livio, forse tu non hai cercato bene: a pag. 90 dell'Easy Book trovi le informazioni per la gestione del controllo interno del senso di rotazione.

Link al commento
Condividi su altri siti

Mirko Ceronti

Allora mettiamola così, accantoniamo per un attimo l'encoder, e supponiamo che un cliente Ti commissiona un progetto per calcolare le persone che entrano ed escono da una stanza usando 2 fotocellule, posizionate una prima ed una dopo la porta che conduce al locale.

Quando dentro la stanza il numero delle persone è diverso da zero, le luci devono accendersi, quando è uguale a zero, le luci devono spegnersi.

Se ci pensi vedrai che è la stessa cosa dell'encoder, infatti se una persona entra, invade prima la fotocellula A e poi la B, ed il contatore incrementa di "1", (e le luci si accendono) se una persona esce, invade prima la fotocellula B e poi la A, ed il contatore decrementa sempre di "1" (e se era l'ultima persona ad uscire le luci si spengono).

Saluti

Mirko

Link al commento
Condividi su altri siti

Si, ma per mandare indietro il contatore, mi servirebbe una qualche abbilitazione ...

Assolutamente no! Configuri lo HSC per lavorare con impulsi in quadratura (modo A/B in quadratura, pag. 117 e seguenti del manuale) e ci pensa lui ha contare in avanti o in indietro a seconda della sequenza degli impulsi. Anche se l'encoder oscillasse nell'intorno di un impulso il conteggio non sballa, te lo garantisco.

L'unica difficoltà a cui puoi andare incontro è, nel caso di inversioni velocissime e continue del moto, di non riuscire a discriminare il senso di rotazione se, e solo se, il periodo con cui vai ad eseguire la lettura è tropo lento.

Però ritengo questa eventualità estremamente remota, non mi à mai successo nemmeno eni guidafili spira-spira molto veloci. Per un nastro trasportatore la trovo un'eventualità praticamente impossibile.

Link al commento
Condividi su altri siti

Secondo me gestire il tutto via software fa perdere molto in prestazioni. Anche se hai un tempo di scansione di 1 ms non supereresti il khz come frequenza massima di conteggio. Meglio affidarsi ai contatori veloci configurati come contaimpulsi in quadratura come dice livio, sicuramente molto più affidabile.

Link al commento
Condividi su altri siti

Fatto la prova funziona alla grande.

Come? Con HSC e merker di direzione o facendo al comparazione tra 2 letture?

Link al commento
Condividi su altri siti

Configuri lo HSC per lavorare con impulsi in quadratura (modo A/B in quadratura

Ho seguito i tuoi consigli, Ho configurato gli ingressi come sopra. In un blocco interrupt ogni 100ms vado a fare una lettura dell'ingresso e poi faccio la comparazione tra le due letture. Da qui mi sono sia rilevato il senso di rotazione, che calcolato la velocità. (rpm/min). Ho ancora qualche dubbio in merito, (su quale sia la cosa più giusta da fare), ma prima voglio andare avanti con il lavoro in quanto per ora ho solo fatto qualche prova.

Grazie ancora.

Link al commento
Condividi su altri siti

Hai usato una forma canonica per misura di velocità. Forse potresti avere qualche problema con velocità particolarmente basse, ma in questo caso potresti prevedere 2 periodi di integrazione 0.1" e 1".

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...