Vai al contenuto
PLC Forum


Controllo Del Valore Encoder - Anomalia di funzionamento


loref

Messaggi consigliati

Salve a tutti !

Nelle applicazioni di movimento asse con encoder in anello aperto ho la necessità di verificare il corretto funzionamento della catena trasduttore + accoppiamento meccanico + collegamento elettrico.

Infatti se un qualunque elemento della catena fosse difettoso, esempio si è allentato la vite che assicura l’accoppiamento tra l’albero dell’encoder e quello della ruota sulla cremagliera, il movimento sarebbe senza controllo e quindi pericoloso.

In queste applicazioni il movimento è eseguito ad anello aperto cioè con la dinamica veloce/lento/stop in base alla distanza assunta dalla posizione attuale rispetto a quella di destinazione. La posizione attuale è determinata dal valore assunto dal contatore veloce (HSC=High Speed Counter) interno al PLC.

In passato ho realizzato un tipo di verifica piuttosto semplice in cui la logica del PLC legge ad ogni ciclo il valore dell’HSC e lo confronta con quello del ciclo precedente. Se i due valori, durante il movimento, sono rimasti uguali per tempo impostato significa che c’è stata una anomalia e quindi scatta un allarme che interrompe il movimento. Questa soluzione è grossolana perché non tiene conto della direzione del movimento e della sua velocità.

Del resto, il tipo di PLC in cui questa soluzione è stata impiegata, era limitante per le istruzioni messe a disposizione e per lo spazio di memoria del programma. Dovendomi occupare di una nuova realizzazione in cui non ci sono più questi limiti, vorrei realizzare un controllo più sofisticato.

Per descrivere, spero chiaramente, la logica di controllo che vorrei realizzare utilizzo le seguenti sigle:

dp = direzione positiva del conteggio

dn = direzione negativa del conteggio

s(t) = valore del contatore al tempo di campionamento t

s(t-1) = valore del contatore al tempo di campionamento t-1

(nota: gli istanti di campionamneto t si succedono in modo regolare cioè la loro differenza è sempre l’unità)

S(t) = | s(t) – s(t-1) | differenza in valore assoluto dei contatori

Sm = valore minimo accettabile della differenza S(t)

Il controllo ha esito negativo quando:

((s(t)<s(t-1)).and.dp).or.((s(t)>s(t-1)).and.dn).or.(S(t) < Sm).and.(dp.or.dn)

Questo controllo prende in considerazione la direzione ma trascura la velocità.

Infatti il valore Sm è una costante determinato sperimentalmente su quello che sarà la massima velocità. Per introdurre nel controllo la velocità, dovrei “pesare” Sm in base alla velocità attuale cioè

Sm = (S0\V0)*V(t)

dove

S0 = valore minimo alla velocità V0

V(t) = velocità al tempo t

Valutare la velocità è però difficile (almeno per me) perché in genere non è un parametro interno al PLC o almeno non completamente. Infatti queste velocità sono definite sul dispositivo di regolazione del moto che è esterno al PLC (es inverter). Se anche fossi in grado di determinare la velocità alta e lenta, sarebbe sempre limitativo perché non potrei determinare quella durante le rampe di accelerazione e decelerazione. Inoltre, il programma PLC sarebbe di difficile manutenzione, perché ad ogni variazione dei parametri di regolazione della velocità dovrei ripetere la valutazione ottimale dei parametri S0,V0, V alta e V lenta.

Desidererei ricevere i vs. pareri su quanto esposto o magari le vs. esperienze.

Grazie

Lorenzo

Link al commento
Condividi su altri siti


Ci sono diverse metodologie per misurare le velocità. Si basano sempre e comunque sulla misura della frequenza e/o sul periodo del degli impulsi di encoder.

In altri termini, per la misura di frequenza, si esegue un'integrazione del conteggio degli impulsi su di una base tempi precisa, p.e. 1". Poi il risultato viene moltiplicato per una costante che dipende dal coefficiente impulsi/lunghezza.

Cerco di spiegarmi meglio con un esempio.

Supponiamo di avere un motore con Omega max = 3000 rpm, sul motore è calettato un encodere da 1000 impulsi/giro. La catena cinematica è tale che ad ogni rotazione completa del motore corrisponderà un avanzamento pari a 10 mm. La costante impulsi/mm sarà ==> 10 / 1000 = 0.01mm/impulso.

Alla massima velocità di rotazione la frequenza sarà pari a 50000 impulsi al secondo, corrispondenti a 500 mm/1" (0.5 ms).

Ora se, tramite un interrupt legato ad timer di 1 secondo, leggi periodicamente il contatore veloce, esegui la differenza tra i due valori contigui, dividendo per 100 otterrai la velocità direttamente in mm al secondo.

Il problema può nascere quando la velocità è molto bassa, perchè in un secondo leggerai pochi impulsi ottenendo una precisione scadente.

In questi casi si esegue una contemporane misura di periodo, cioè si misura il tempo necessario per contare, p.e., 10 impulsi di encoder.

Link al commento
Condividi su altri siti

Grazie Livio per la tua risposta. Credo comunque di essermi espresso male. Vedo di chiarire meglio il mio problema:

sia s(n-1) il valore del contatore all’istante di campionamento t(n-1)

sia s(n) quello all’istante t(n)

considero un primo tratto del moto a velocità costante v0

ds(n) = s(n) – s(n-1) = v0 * (t(n) – t(n-1)) = v0 * T

dove T = costante = intervallo di campionamento.

Se T = 1 allora ds(n) = v0*1 cioè la variazione del valore di conteggio rappresenta la velocità in impulsi al secondo.

In questo caso assumo di avere l’errore encoder quando ds(n) < dsmin0 cioè quando la variazione del valore del contatore è minore di un valore minimo dipendente dalla velocità v0.

Considero un secondo tratto del moto a velocità costante v1

ds(m) = s(m) – s(m-1) = v1 * (t(m) – t(m-1)) = v1 * T = v1 * 1

in questo caso assumo di avere l’errore encoder quando ds(m) < dsmin1

Sia dsmin0 che dsim1 sono funzione della velocità ma non possono essere calcolati in base a dsn o dsm e devono essere definiti in base a dei parametri esterni quali le velocità teoriche impostate.

Secondo me questa analisi mi porta a concludere, riallacciandomi a quanto scrivevo nel mio precedente post, che per realizzare un controllo encoder che considera la velocità del movimento devo prevedere diversi parametri di impostazione che sono legati a dei fattori esterni quali le velocità impostate sull’inverter.

Ciao

Lorenzo

Link al commento
Condividi su altri siti

Scusa loref, lascia perdere le formule e spiega, in italiano corrente, cosa intendi ottenere. Mosurare una velocità? Misurare uno scostamento di velocità rispetto ad un valore di riferimento? Regolare una velocità?

Dal tuo primo post mi sembrava di capire che tu volessi misurare una velocità; dal tuo secondo post non capisco cosa vuoi ottenere. Cosa intendi per errore di encoder? L'encoder o da impulsi o non li da. Se ipotizzi che l'encoder, per motivi meccanici, sia messo in rotazione con una velocità angolare inferiore a quella che dovrebbe essere in realtà devi comunque misurare la velocità dell'encoder e raffrontarla con un valore noto di velocità. Potrebbe essere anche il valore teorico: se lo scostamento tra valore teorico e valore misurato è troppo grande si può ipotizzare una qualche rottura nella catena cinematica che collega l'encoder al motore.

A me è successo, sul braccio di una cesoia volante.

Il giunto elastico, che fungeva da collegamento tra l'albero dell'encoder ed il pignone che ingranava con una cremagliera, si era rotto e lavorava quasi fosse una frizione, con parecchio scorrimento; quindi errori di posizione e velocità sottostimata.

La diagnosi venne facilitata dal fatto che la misura della velocità era estremamente variabile.

Se non ho capito male, tu pensi di effetuare la rilevazione dell'eventuale errore imponendo una soglia minima di dfferenziale di velocità, soglia al disotto della quale consideri errata la misura (causa slittamento encoder p.e.). Può essere una metodologia efficace solo quando si opera a velocità costante e conosciuta.

Lo strumento più efficace, per questo tipo di misure, è la comparazione dei differenziali di velocità. Se differiscono tra loro oltre un certo valore, allora c'è un problema meccanico. Anche in fase di accelerazione c'è la possibilità di rivelare il guasto: i differenziali devono differire tra loro di un valore costante o quasi. Valore che corrisponde all'accelerazione prevista.

La difficoltà di questo tipo di misura non consiste nell'algoritmo, di per se banale, ma dallo strumento HW e SW che si ha a dispsoizione. Per esmpio con un sistema come quello che ho ipotizzato nel post precedente si dovrebbe campionare ogni 200 microsecondi per avere una buona precisione. Salendo con il tempo di campionamento sarebbe praticamente impossibile rilevare puccoli scorrimenti

Link al commento
Condividi su altri siti

Grazie Livio per la tua risposta. Certamente non sono stato riuscito a spiegarmi bene. Tu comunque hai centrato il problema e hai suggerito il metodo di controllo migiore cioè quello di confrontare tra loro i valori successivi dei differenziali piuttosto che il confronto di ognuno di loro con un valore costante.

Ciao Lorenzo

Link al commento
Condividi su altri siti

emanuele.croci

Ciao,

se vuoi che il PLC "conosca" il riferimento di velocità dell'inverter, perché non glielo passi tramite uscita analogica del PLC?

L'ingresso analogico è di serie in quasi tutti gli inverter.... l'uscita analogica nel PLC o è disponibile o non costa molto aggiungerla....

(il cliente avrà così anche il vantaggio di poter settare la velocità da un eventuale pannello o supervisore,senza dover pasticciare con l'inverter)

Ciao, Emanuele

Modificato: da emanuele.croci
Link al commento
Condividi su altri siti

Grazie Emanuele,

non ci avevo pensato e l'idea mi pare ottima.

Non solo, siccome nell'applicazione su cui lavoro, gli inverter sono pilotati in devicenet, il valore della velocità è un parametro che ritorna al plc dall'inverter quindi non ho necessità del modulo analogico. L'errore che ho fatto è stato quello di considerare questo problema con gli strumenti che normalmente uso cioè pilotare gli inverter attraverso delle combinazione di segnali digitali. Il tuo suggerimento mi aperto gli occhi perchè la soluzione è a portata di mano.

Ciao Lorenzo

Link al commento
Condividi su altri siti

emanuele.croci

non avevo parlato di fieldbus perchè mi sembrava esagerato....

se hai addirittura il devicenet è proprio grasso che cola...

Ciao, Emanuele

Link al commento
Condividi su altri siti

Attenzione! Verificare la rispondenza tra valore di consegna della velocità e velocità misurata tramite trasudttore di posizione (encoder) in una maglia dove non c'è reazione diretta di velocità, quale è un azionamento in alternata sensorless, può dare adito a falsi allarmi. Il sistena è perfettamente valido, quando si ha una reazione diretta di velocità, come negli azionamenti in continua dove l'anello di velocità è chiuso da tachimetrica. In un sistema con inverter, senza reazione di velocità da trasduttore, la differenza tra valore di consegna e valore effettivo può arrivare anche ad alcuni %, e tutto il sistema sta lavorando in perfetto ordine.

Se invece si usa il medesimo encoder come trasduttore di velocità per chiudere l'anello (vettoriale vero), la rilevazione di errore viene eseguita automaticamente dall'inverter.

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