Vai al contenuto
PLC Forum


Velocita Motore Con Encoder Incrementale S7200 - lettura velocita motore


Messaggi consigliati

Inserito:

ciao a tutti, ho un piccolo problema e spero che Voi mi possiate aiutare.

Devo rilevare la velocita di un motore e per questo ho deciso di mettere un encoder incrementale. Leggendo manuali siemens ho visto che si necessitano dei contatori veloci, hsc1 modo 10 ( l'encoder che ho ha A B e Z).scrivo la parte di programma che mi abilita il contare e collego l'encoder, fin qui tutto bene. ora l'esempio sul manuale al termine del conteggio dell'encoder prefissato da me ragguinge genera un interrupt, (in poche parole ogni interrupt corrisponde ad un giro completo del motore).

ora per leggere la velocita del motore cosa mi consigliate. io ero partito con un idea.

al primo interupt attivo un temporizzatore che a sua volta attiva un contatore, ora ad ogni int. mi aumenta il contatore. il tempo che il contatore conta dipende dal temporizzatore. esempio. il temporizzatore pemette al contatore di contare x per 0,5 secondi, allo scadere di questi 0,5 sec rilevo il numero contato e lo moltiplico per 120, in questo modo ho la velocita di giri al minuto.secondo voi va bene cois?? sapete consigliarmi altro??

o anche pensato di contare il tempo trascorso da un interrupt all altro, ma come faccio :blink:

grazie


Inserita:

mi e' venuta in mente un altra cosa.

creo un sub 0 con inizializzazione contatore veloce.

nella sub1 inserisco il programma del contatore veloce che mi conta il giri dell'encoder e me li trasferisce in una parola, ad esempio vd0. ogni 50ms genreo un interupt e nella routine di interrupt leggo il valore del contatore, eseguo il calcolo e azzero il contatore. in questo modo posso sapere quanti clock mi arrivano in un determinato tempo (tempo dell'interrupt). che ne dite

Inserita:

E se utilizzi le istruzioni BGN_ITIME e CAL_ITIME per leggere il tempo tra un impulso e l'altro e poi con 4 conti ti trovi la velocità del motore? Non vorrei sbagliarmi ma mi sembra la soluzione più pertinente.

Ciaoo

Inserita:

Dipende dalla precisione che vuoi. Il contatore lo fai andare in free running. Poi ti crei un interrupt a tempo con il timer di sistema. L'intervallo di tempo lo stabilisci in funzione delle tue esigenze. Ad ogni interrupt leggi il valore del contatore e lo memorizzi. In un altra Sub fai la differenza tra la lettura attuale e la precedente, il risultato è la velocità media nel tempo di misura. Conoscendo il la costante impulsi/giro ti ricavi la velocità angolare o, usando la costante impulsi/metro, la velociotà lineare.

Inserita:

secondo una soluzione potrebbe essere la seguente

rilevare gli impulsi in un minuto congelare il valore in un registro a 16 bit qualche calcolo matematico di correzzione e penso che tutto sia fatto almeno credo.

Inserita:

adasso provo come ha detto Livio ,usando degli interrupt di tempo noti e vi faro sapere. comunque ogni altro consiglio o soluzione e' ben accetta

Inserita:

Scusa Livio ma la mia soluzione e la tua non sono uguali? Non sono molto pratico di programmazione, ma dalla descrizione che hai fatto mi sembra che le due soluzioni siano equivalenti. Oppure se mi sbaglio puoi spiegarti meglio?

Ciaoo

Inserita:
Oppure se mi sbaglio puoi spiegarti meglio?

Ci sono due differenze sostanziali.

La tua proposta è una misura di periodo, la mia di frequenza.

La mia misura si basa su di un intervallo di tempo ben preciso definito da interrutpt di programma, interrupt scatenato dal timer di sistema.

Inserita:

oggi mi hanno dato l'encoder, lo colleggo e tutto bene, funziona.

adesso ho dei pin che non so cosa siano, oltre ad A-Anegato,B,Bnegato, e l'alimentazione, ha anche O,Onegato, e due R.non ho il manuale e quindi andando a supposizioni credo che R possa essere il reset dell'encoder, O ed Onegato limpulso del giro completo, che ne dite?

Inserita:

sorecaro, scrivere nn invece di non non ti fa risparmiare nulla, invece rende meno comprensibile quello che scrivi ed indisponi persone come me che aborrono le abbeviazioni da chat.

Relativamente alle tue domande. Il segnale definito "O" forse è "0" cioè l'impulso di zero. In quanto al segnale "R" non saprei che dirti, forse se scrivessi marca e modello dell'encoder si potrebbe avere qaulche dato più certo

Inserita:

scusate per le abbrevazioni, cerchero di non metterle piu'. il pin è ZERO 0, la marca è BEI IDEACOD CHM911-1024-035

Inserita:

Se è CHM911 è un ecoder assoluto, se è un encoder incrementale la sigla sarà GHM911.

Inserita:

scusa livio ma voglio capire bene l'argomento.

io ho un encoder assoluto, quindi in uscita sui pin A e B ho in uscita un seganle binario che non solo mi indica la direzione, ma anche la posizione, e quindi il metodo usato non e' valido per calcolare la velocita del motore. allora per calcolare la velocita del motore cosa dovrei fare??

Inserita:

ho visto sul sito il prodotto ed stavo vedendo i dati tenici ,il manuale dice che e' incrementale

Inserita:

scusate ancora ora ho l'encoder ho la sigla dell'encoder

alla dicitura type: CHM911-1024-035

sotto c'è un altro numero: GHM9-1//5G59//01024//G5R//XX071XX

Inserita:
sotto c'è un altro numero: GHM9-1//5G59//01024//G5R//XX071XX

Si questo è il codice di un ecoder incrementale da 1024 impulsi giro. Comunque i cataloghi dell'azienda sono proprio "francesi": ancora più complicati di quelli tedeschi, con le informazioni sparse e di difficile reperibilità.

Se hai il manuale troverai senz'altro la descrizione dei tuoi segnali.

Un encoder incrementale, dotato di due canali con fase relativa di 90 gradi e impulso di zero, serve come trasduttore di velocità e/o posizione. DIpende dall'uso che ne fai. Se devi misurare solo la velocità ti basta fare come ti ho spiegato in precedenza. Se in vece devi anche misurare la posizione devi prima riconoscere il punto di origine della misura, ma questa è un'altra storia.

Inserita:

livio hai ragione, e' un encoder incrementale con una risoluzione di 1024.

tornando all ancoder in questione ho visto che i 1024 impulsi me li da sul canale 0. gli impulsi che mi danno i pin A e B sono 3600. per vedere questo ho attivato due contatori, uno con modo per gli encoder con fase A e B ed un altro contatore, sempre veloce per poter contare gli impulsi del pin 0. ora alla fine del giro completo i valori del contatore sono 3600 per il contatore dei canali A e B, e 1024 per il contatore del pin 0. come mai? livio scusa ma non sono molto esperto di encoder.

poi ho anche notato che se inverto il senso di rotazione dell'albero dell encoder il valore del contatore per le fasi A e B diminuisce, invece quello del pin 0 si incrementa sempre. in poche parole il pin 0 non tiene conto della direzione dell'albero.

adesso mi viene il dubbio che il metodo che ho usato per il calcolo dei giri non sia giusto

Inserita:

Forse ci sono dei problemi d'interfaccia con il contatore.

1 - Che invertendo il senso di rotazione il conteggio diminuisca, se prima aumentava, è correttissimo. I due impulsi sfasati servono proprio allo scopo di determinare il senso di rotazione. Se hai programmato il contatore in modo bidirezionale questo si comporta nel modo corretto.

2 - Il numero di impulsi contato invece non ha senso, se l'encoder è veramente da 1024 impulsi devi contare 1024 impulsi.

3 - Forse l'uscita 0 non è l'impulso di zero, ma un canale senza direzionalità.

Dovresti leggere bene il manuale e verificare come hai inizializzato i contatori. Se hai dei dubbi sull'encoder sarebbe opportuno visualizzare i segnali con un oscilloscopio. Poi dovresti sincerarti bene, dal manuale, sulle tensioni di alimentazione dell'encodere e sul tipo di uscita degli implusi: Push-Pull a 24v, line driver a 5v, open collector o altro.

Una curiosità. In Italia abbiamo tantissimi frabbicanti di ottimi encoders, perchè ne hai scelto proprio uno francese?

Inserita:

livio ho rivisto il manuale e' ti posso dire che:

alimentazione da 11 a 30vdc

uscita push-pull 11/30v

segnale uscita: qui c'è scritto 0 cal A et B

purtroppo l'encoder non l'ho scelto io ,ma sto pensando che possa essere rotto. tu che ne pensi??

Inserita:

No non credo che sia rotto. Non disponi di un oscilloscopio per visualizzare gli impulsi?

Inserita:

livio ho fatto una prova a contare i giri dell'albero con l'impulso del pin 0, e funziona bene. piu' tardi faro come hai detto tu, controllero con l'oscilloscopio, ti faccio sapere tra un po

Inserita:

livio ho controllato i segnali dei canali A e B con l'oscilloscopio e ho il segnale del canale A è un onda quadra, invece il segnale del canale B non va, mi da un segnale molto strano, mi è difficile da spiegare, ma non è un onda quadra, ecco perche il contare mi conta cosi tanto, adesso mi faccio dare un encoder nuovo e vi faccios sapere

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