Vai al contenuto
PLC Forum


Controllo Encoder


Messaggi consigliati

Inserito:

Ciao a tutti..

Sto utilizzando degli encoder.. dovrei scrivere una funzione per verificare che l'encoder funzioni correttamente..

Ho fatto una funzione che in caso si stia muovendo l'asse con l'encoder, verifica che ogni XX tempo ci sia uno spostamento di almento YY impulsi.. se non è così do un allarme..

Il probelma è che la mia funzione non è molto affidabile.. avete già affrontato la cosa e risolta in modo più brillante..?

Grazie.


Inserita:

Domanda......

Ma questa funzione ti serve per collaudare degli encoder???quindi presupponendo velocità costante del motore=n impulsi dell' encoder tagliando il momento di accensione del motore...???

oppure......

Ti seve per verificare che il motore giri in maniera corretta??

Non puoi essere più preciso....

Tipo di encoder..

Numero di impulsi giro...

Numero giri nominale del motore....

Tolleranza di errore....

Frequenza di controllo della funzionalità dell'encoder...

Inserita:

La funzione mi serve per verificare che l'encoder funzioni correttamente..

Esempio: Se l'encoder si rompe, durante il movimento dell'asse sicuramente la quota che leggo da esso non sarà fissa.. (mi aspetto piccole variazioni, diciamo oscillazioni).

Con la funzione che voglio scrivere devo riuscire a vedere se tutto funziona correttamente..

DATI:

Encoder Lika AM58S12/4096PB-10

Comunicazione con l'encoder via profibus

Impulsi giro: 4096

Encoder assoluto

1 giro encoder = 0,2083 mm

corsa massima sistema 20mm

precisione richiesta: mezzo decimo

Velocità spostamento asse: fissa (non la so ancora, comunque mi hanno detto che andrà sufficentemente piano e comunque la potro regolare)

La frequenza di controllo sta a noi deciderla..

Inserita:

Il controllo sulla validità dell'encoder è un vecchio problema. Esiste un solo algoritmo che ti da una certa sicurezza di non avere falsi allarmi o di considerare valido un encoder guasto.

Questo algoritmo è simile a quello che hai realizzato. In più devi prvedere una soglia variabile in funzione della velocità a cui dovrebbe viaggiare l'asse. In pratica ti calcoli per igni differenziale di tempo quale dovrebbe essere il differenziale di impulsi, poi esegui il confronto.

Inserita: (modificato)

Ciao,

ti dico l'algoritmo che uso io:

in pratica mi calcolo il numero di impulsi che mi aspetterei di ricevere in un certo tempo se vado a velocità X e guardo se è corretto.

Ad es.

- Vado a 5 m/' (=l'inverter mi segnala che si muove a 5 m/')

- a questa velocità mi calcolo quanti impulsi dovrei ricevere: supponiamo che in base al mio cinematismo siano 75 impulsi ogni decimo di secondo

- verifico quanti impulsi ho ricevuto ogni decimo di secondo, ad es. supponiamo siano 72,78,75,80,75,76,ecc....

- se sono fuori range di un tot per un certo tempo => encoder rotto, ad es. se per 2 sec ho IMP<20 o IMP>200 segnalo errore encoder

-per calcolare la velocità del motore faccio un campionamento ad ogni ciclo di scansione della velocità che l'inverter mi segnala come velocità effettiva. Eseguo in ogni decimo di secondo un certo numero di campioni e faccio la media (velocità media dell'inverter nel decimo di secondo).

Risultato: se ROMPO l'encoder me lo segnala di certo (ad es. apro il portafusibile che alimenta l'encoder => la macchina si ferma). Tuttavia non sono così preciso come vorrei nelle mie soglie di lavoro (ad es. se il numero GIUSTO è 75 devo dare l'errore quando sono <20 o >200, e non <60 o >90 come vorrei, cioè devo usare range molto laschi).

Questo si vede soprattutto nelle rampe di accelerazione/decelerazione: ho più differenza tra impulsi attesi vs. impulsi reali.

Onestamente non ci ho speso su molto tempo.

Se hai miglioramenti da proporre sono ben accetti!

Ciao, Emanuele

Modificato: da emanuele.croci
Inserita:

Emanuele l'algoritmo che uso io, e che ho proposto nel post precedente, è abbastanza simile an tua, ma ti permette di tenere una soglia di errore più stretta, anche in fase di accelerazione. Condizione necessaria è che il sistema di controllo generi tutti i riferimenti di velocità. In pratica è come se tu generassi il master di un asse elettrico facessi un'interpolazione.

Inserita:

Ciao Livio,

su che soglie riesci a lavorare con il tuo algoritmo?

(che concettualmente mi pare identico al mio... salvo che io mi complico la vita in un piccolo grande punto...

Condizione necessaria è che il sistema di controllo generi tutti i riferimenti di velocità

Nella fase di accelerazione dell'asse "sparo" subito il riferimento di velocità massimo dal plc e uso la rampa di accelerazione dell'inverter (in decelerazione sono "più bravo" e faccio la rampa dal plc)

comunque tu su che soglie riesci a stare? Così valuto se vale la pena "spendere del tempo" per cambiare il mio FB standard di motion control.

Ciao, Emanuele

Inserita:

io personalmente su S7300, comunque non capisco bene il senso della domanda...

Ciao, Emanuele

Gabriele Corrieri
Inserita:

Ciao Emanuele,

hai filtrato e ritardato un pochino l'allarme mancanza encoder, vero? :D

Nel senso ... prova a tenere in un FIFO 10 campioni e farne una media matematica, sia della variabile conteggio, sia della variabile velocità istantanea ...

Comunque sia il discorso ... tu stai andando con una frequenza di 7,5Hz (di encoder) magari anche quadruplicando gli impulsi con "il trucco" dei fronti ... ben capirai che a quella velocità, un motore o un asse, che parrebbe di capire stai reazionando tu con il plc ... che magari sta andando anche in V/F a una velocità così bassa (intendo ... con una frequenza di encoder così bassa) c'è molto errore ... sarebbe da passare nel dominio del tempo, anzichè della frequenza ... alias sotto alcune frequenze smetti di misurare la frequenza e inizia a misurare il periodo, che è molto più accurato.

Alcuni controlli (sopratutto DC) di una nota azienda anglosassone, hanno la possibilità di avere il doppio feedback: encoder+tachimetrica, non so come lo gestiscano all'interno, di sicuro so che la tachimetrica, essendo un segnale continuo ha una precisione molto alta anche a velocità basse, cosa che un segnale discreto, come l'encoder non ha, o ce l'ha utilizzando modelli con n-mila impulsi ... personalmente penso che già 1000 o 1024 impulsi per rotazione di albero in un encoder siano stra-sufficienti, parere personale, anche se è utile valutare il caso in modo più approfondito.

Sarebbe interessante sapere le dinamiche limite del tuo asse: impulsi encoder, velocità minima e massima e frequenza minima e massima .... anche se so di dire una cosa scontata però, non si può toppare tutti i buchi con l'elettronica ... se c'è un dimensionamento sbagliato di un riduttore che porta il motore a funzionare a velocità lillipuziane non si può poi pretendere di avere tutto quanto sarebbe lecito aspettarsi da un dmensionamento del sistema corretto.

scusate l' :offtopic:

Ciao

Inserita:
supponiamo che in base al mio cinematismo siano 75 impulsi ogni decimo di secondo

Ciao Gabriele,

non ho capito il discorso dei 7.5 Hz, se ti riferisci al mio esempio (che è più o meno reale) stiamo parlando di 750 Hz. Ho dimensionato il mio encoder in modo tale da avere anche alle basse velocità una frequenza di qualche centinaio di Hz minimo (uso un 4096 impulsi/giro, modalità 1x).

Le velocità di lavoro stanno di norma tra 5-10 Hz e 50 Hz, riferiti all'inverter (diciamo 300-3000 rpm al motore, in questo caso uso dei 2 poli).

La sensazione che ho dalle mie prove mi fa concordare con Livio... e concordo anche con te quando dici che alle basse frequenze la velocità rilevata da un inverter V/f non è proprio precisissima...

Se qualcuno ha dati numerici da presentare sulle proprie prove, mi farebbe molto piacere confrontarli...

Ciao e grazie,

Emanuele

Gabriele Corrieri
Inserita:

Ciao Emanuele

mi cospargo il capo di cenere :(

Stavo facendo altro intanto che rispondevo ... poi vedi che risultati ...

Hai provato a filtrare su una media di 10/20 campioni le velocità istantanee di inverter ed encoder?

Il tuo inverter non ti consente di andare in modalità vettoriale sensorless?

Ciao

Inserita:

Emanuele nel mio controllo il riferimento di velocità lo genera il PLC, pertanto anche la rampa è generata dal PLC.

La precisione è funzione di diversi parametri e varia in funzione dell'applicazione. Se il riferimento è trasmesso in forma numerica (seriale o bus di campo) e si può fissare un soglia piuttosto stretta: <5 impulsi. Con generazione di riferimento analogico e senza chiusura digitale dell'anello di velocità si arriva a soglie <10 impulsi, con errore che deve superare la soglia per due o tre campionamenti.

Con una CPU S7-216 controllavo ogni 10ms tenenendo 10 impulsi, con superamento della soglia per 3 letture consecutive, con azionamnto in c.c. Chiaramente l tempo di intervento di 30 ms totali è valido se la velocità è tale per cui in 10 ms il numero di impulsi è significativo rispetto alla soglia. Daltro canto se la velocità diminuisce, il tempo di intervento può essere meno rapido. :P .

con s7 200 ??

Con una vecchia S7-214 chiudo un PID di posizione ogni 10ms, e si avanza ancora qualche ms per l'automazione di qualche ingresso e qualche uscita (quelli di cui dispone la CPU, togliendo i tre ingressi per ecoder ed un quarto per camma di zero).

Certo che bisogna sapere bene come fare :D

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