Vai al contenuto
PLC Forum


Impulsi Encoder


Dany1981

Messaggi consigliati

Ciao ragazzi ho un problema , devo contare gli impulsi di un encoder da 200 P/R, con una normale scheda ad ingressi digitali. L’encoder è di tipo incrementale con A/B/Z collegato ad un motore che gita a 15 giri al minuto ed il PLC è un Omron CJ1W-CPU43H . Io avevo pensato di leggere i fronti di salita e di discesa dei segnali A/B senza Z non mi serve lo 0 solo che non riesco a leggere tutti gli impulsi.

Aiutoooooo!!! Grazie :unsure:

Link al commento
Condividi su altri siti


Con 200 impulsi/giro a 15 giri/minuto arriviamo a una frequenza di 50Hz, ovvero un impulso ogni 20ms.

Questo significa che tra il fronte del canale A e il fronte del canale B passano 10ms.

Solo in base a queste considerazioni per non perdere segnali dovresti rimanere con la scansione sotto ai 5ms.

E questo considerando la perfetta quadratura degli impulsi dell'encoder, e ritardo nullo (cosa che assolutamente non è) sulla lettura dello stato degli ingressi.

Da un punto di vista pratico, per non perdere segnali la scansione del plc dovrebbe non superare mai i 2-3ms.

E, anche in questo caso, io non mi sentirei troppo sicuro.

Potresti comunque provare ad analizzare solo i fronti di salita o solo i fronti di discesa, e vedere se la situazione migliora.

Link al commento
Condividi su altri siti

Ok ti ringrazio, mi sa che mi conviene cambiare encoder perchè ho una scansione di 15ms dovrei prenderne 1 con 50 impulsi a giro secondo i calcoli. Con un interrupt non si riesce però ad eliminare questo inconveniente ed utilizzare l'encoder da 200 P/R? <_<

Link al commento
Condividi su altri siti

Mantenendo l'encoder da 200 imp/giro, dovresti lanciare un interrupt ogni 5ms.

E' questo infatti l'intervallo di tempo che intercorre tra i fronti dei due canali, e non 10ms come ho detto nel precedente post.

Io non conosco Omron e non ti so dire se un interrupt ogni 5ms sia gestibile o meno.

Link al commento
Condividi su altri siti

Se non ti interessa conoscere la direzione di rotazione potresti usare una sola fase dell'encoder, così da dimezzare il numero degli impulsi; avendo così 100 p/giro

per 15 giri in 60 secondi avresti 25ms tra un impulso e l'altro

Link al commento
Condividi su altri siti

Se non ti interessa conoscere la direzione di rotazione potresti usare una sola fase dell'encoder, così da dimezzare il numero degli impulsi; avendo così 100 p/giro

Dici una cosa giusta ed una sbagliata.

E' vero che se non interessa la direzione, basta analizzare i segnali di un solo canale, magari solo i fronti di salita, in modo da avere più tempo tra due fronti da rilevare.

Ma quando dici che così si dimezzerebbe il numero degli impulsi, non ci siamo.

Quando si parla di un encoder da 200 impulsi/giro con canali A-B-Z, si intende 200 imp/giro per il canale A, 200 imp/giro per il canale B, ed un impulso/giro (dell'ampiezza degli impulsi degli altri canali) per il canale Z.

Quindi, anche volendo leggere solo i fronti di salita di un solo canale, siamo sempre ad una frequenza di 50Hz, quindi con tempo tra due fronti di salita di 20ms.

In questo caso, per essere sicuri di non perdere impulsi (senza ricorrere ad interrupt, intendo), il tempo di scansione massimo del plc dovrebbe rimanere sempre sotto ai 10ms.

Modificato: da batta
Link al commento
Condividi su altri siti

  • 4 weeks later...

Ciao Dany1981, scusa se mi intrometto... ma se non hai obbligo di utilizzo del CJ io ho utilizzato dei Plc della Elco Elettronica (www.elcoelettronica.it) che contiene già all'interno minimo 2 ingressi di lettura encoder (canali A/B/Z); hanno una banda passante da 60 KHZ a 100 KHZ e mettono già in una word valorizzata la quota da visualizzare (precalcolando il rapporto quota gira*N°impulsi) se ti fa comodo; ti rsiolverebbero in un secondo il problema... :)

Link al commento
Condividi su altri siti

la logica sarebbe montare esempio scheda cj1w-ct021

questo tipo di cpu la meriterebe

anche perche avra anche un certo programma impegnativo da gestire

ma ovviamente costa abbastanza

certo che un encoder cosi lo leggeresti tranquillamente anche con un cpm1 usando l'apposito ingresso

e costa relativamente poco (meno della cj1w-ct021)

sono due plc ma per scopi ben diversi

Modificato: da gianff
Link al commento
Condividi su altri siti

Ciao, se non sbaglio nelle impostazioni del PLC puoi configurare degli Interrupt a tempo minimo 1ms ,richiamabili nei task che vanno dal 2 al 3.

Prova a crearti un nuovo programma con un task per esempio lo 02 in cui una volta ogni millisecondo vai a leggerti i tuoi ingressi.

Ciao. :thumb_yello:

Link al commento
Condividi su altri siti

la cpu CJ1W-CPU43H non ha ingressi a bordo quindi non si possono impostare ingressi a iterupt

almeno che io sappia

al massimo puoi inpostare il tepo di lettura della scheda aggiuntiva piu' veloce delle altre

Modificato: da gianff
Link al commento
Condividi su altri siti

Ciao a tutti,

sulla CPU CJ1G-CPU43H puoi generare due interrupt schedulati con un intevallo minimo di 1 ms.

Se il tuo encoder è collegato ad una scheda di ingressi locali (non su bus di campo) puoi

eseguire una istruzione IORF che esegue il refresh immediato del canale di ingresso specificato.

A questo punto ogni millisecondo puoi testare lo stato dei due ingressi. Presta solo attenzione

al fatto che l'istruzione IORF esegue il refresh di tutto il canale, se hai quindi usato gli altri bit

del canale "rischi" di avere un cambiamento di stato durante la scansione. Per evitare il problema all'inizio

del programma fai un MOV del canale di ingressi su di un canale di appoggio e per il resto

del programma usi questo secondo canale.

:)

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