ELEL65 Inserito: 19 dicembre 2005 Segnala Share Inserito: 19 dicembre 2005 Buongiorno a tuttiHo un motore asincrono comandato da un inverter tipo 3G3MV 1380giri a 50Hz.Ho un encoder tipo E6C2 360 impulsi/giro.La velocità del motore viene variata dal potenziometro a bordo dell'inverter da 25 a 50Hz.Devo visualizzare su di un display la velocità in giri/minuto del motore.Il tutto è controllato da una CQM1H CPU21.A 50Hz il motore compie 80 giri al minuto, a 25Hz 40.Faccio partire un tempo (TIM o TIMH). Ad ogni giro di motore (25200) faccio il calcolo ed ottengo la velocità del motore.A 25Hz tutto OK, a 50Hz il valore ottenuto cambia ad intervalli regolari di 6 - 7 giri e a volte conto addirittura fino a 90 giri!!Cambio sistema ed effettuo il calcolo facendo una media del valore ottenuto da una lettura di 10 giri.Il risultato non cambia.Cambio sistema ancora ed effettuo la media di 4 letture (ogni 90 impulsi) su ogni singolo giro.Il risultato non cambia.Utilizzo sia la fase A che B dell'encoder e faccio le medesime prove.Il risultato non cambia.Taglio la testa al toro. Conto quanti 25200 ho in un minuto. Il risultato è OK.Solo che in questo modo ho una visualizzazione che mi viene rinfrescata ogni minuto e non è che mi piaccia molto.Dove sbaglio?ELEL65 Link al commento Condividi su altri siti More sharing options...
trentaluca Inserita: 19 dicembre 2005 Segnala Share Inserita: 19 dicembre 2005 Io configurerei un ingresso come contatore veloce......cos'i mi svincolo dal tempo ciclo del programma...poi attiverei una sequenza di interupt di una durata di qualche secondo e mi calcolerei la frequenza...Poi farei una media su 10 valori letti ed aggiornerei il valore a visualizzatore..Ciao Link al commento Condividi su altri siti More sharing options...
edogol Inserita: 19 dicembre 2005 Segnala Share Inserita: 19 dicembre 2005 Con l'aumento delle frequenze in gioco devi lavorare ad interrupt, altrimenti il comportamento del programma è imprevedibile.Ti consiglio di usare l'interrupt schedulato (istruzione STIM) impostato ad esempio con una costante di tempo di 1 secondo, che effettua la lettura dell'a encoder (istruzione PRV) appunto ad ogni secondo. In questo modo, diciamo che al secondo 'n' vai a leggere il numero di impulsi attuali provenienti dall'encoder; a questi sottrai quelli letti al secondo n-1 (che avrai opportunamente salvato) e così sai quanti impulsi sono arrivati in un secondo. Conoscendo gli impulsi al secondo... il gioco è fatto!Ciao! Link al commento Condividi su altri siti More sharing options...
pcontini Inserita: 19 dicembre 2005 Segnala Share Inserita: 19 dicembre 2005 Sono d'accordo con chi mi ha preceduto nelle risposteCome dice il manuale Il bit di ripristino (SR 25200) del contatore veloce 0 viene rinfrescato una volta adogni scansione, sicché, per poterlo leggere in modo attendibile esso deve trovarsiin ON per almeno un ciclo.Infatti è importante, visto che intendi raggiungere una certa precisione, svincolarti dal tempo ciclo.Quindi ti consiglio di utilizzare un interrupt per il periodo di lettura (interrupt a tempo), oltre che, naturalmente, per la lettura degli impulsi encoder (cosa che stai già utilizzando).La soluzione proposta da edogol mi sembra nel contempo semplice e della massima precisione ottenibile con il plc in oggetto.Ciao Link al commento Condividi su altri siti More sharing options...
ELEL65 Inserita: 20 dicembre 2005 Autore Segnala Share Inserita: 20 dicembre 2005 Per edogolLa lettura degli impulsi così come me la descrivi è un pò complicata, perchè il valore attuale dell'encoder si azzera ad ogni giro.Dato che sia a 40 colpi che 80 ho il passaggio per lo zero (a 40 non è detto), la sottrazione del nuovo valore con quello vecchio deve tenere in considerazione di questo fattore.Ho provato quindi a contare gli impulsi fuori dalla subroutine e con STIM (1 secondo) vado ad interrogare il numero degli impulsi e prima di uscire azzero il conteggio; in questo modo però il conteggio non è preciso e siamo daccapo.Ho provato ad abbassare la base dei tempi di STIM (1 ÷ 100ms) e contare all'interno della subroutine il numero degli impulsi; lasciamo perdere!!Servirebbe un conteggio preciso degli impulsi svincolato dal valore attuale dell'encoder, ma non so proprio come fare.Faccio qualche altra prova e poi mi sa che mi accontenterò del sistema 25200 / minuto e amen.Se sbaglio nel ragionamento o non sto considerando altre soluzioni non lo so, io non ne vedo.ELEL65 Link al commento Condividi su altri siti More sharing options...
Giorgio Demurtas Inserita: 20 dicembre 2005 Segnala Share Inserita: 20 dicembre 2005 Premesso che non conosco il tuo encoder, non capisco il senso di questa frase.perchè il valore attuale dell'encoder si azzera ad ogni giro. Per misurare la velocità si usa un encoder incrementale, quindi, con un ingresso veloce, ad ogni fronte di salita incrementi una variabile. fai un interrupt ogni secondo e prendi il valore, lo moltiplichi per una costante in modo da averlo espresso nell'unità che ti fa comodo, e azzeri la variabile.ciaogiorgio Link al commento Condividi su altri siti More sharing options...
ELEL65 Inserita: 20 dicembre 2005 Autore Segnala Share Inserita: 20 dicembre 2005 Ciao GiorgioL'encoder è incrementale con una risoluzione di 360 impulsi giro.Il senso di quella frase era riferito alla soluzione proposta da edogol, in quanto se prendo il valore della word 230 al secondo n e la sottraggo da quella che ho al secondo n+1.....se ho il passaggio dallo zero? Ho fatto un giro solo e sto andando a 40 o più di un giro e vado a 80?La soluzione che proponi tu, l'ho gia adottata.[Ho provato quindi a contare gli impulsi fuori dalla subroutine e con STIM (1 secondo) vado ad interrogare il numero degli impulsi e prima di uscire azzero il conteggio; in questo modo però il conteggio non è preciso e siamo daccapo]Non ho specificato come ho fatto ad effettuare il conto, ma ho usato la FU sull'ingresso encoder (IN0004) per incrementare una DM e questi sono i risultati:A 40 giri / minuto, dovrei avere 240 impulsi encoder (teorici). Ne leggo 320 di media!!A 80 giri / minuto, dovrei avere 480 impulsi encoder. Ne leggo 520 di media!!??!!Ho provato anche a contare sia i fronti di salita che di discesa di entrambe le fasi......peggio che andar di notte.Non riesco proprio a contare gli impulsi in modo preciso.ELEL65 Link al commento Condividi su altri siti More sharing options...
ELEL65 Inserita: 20 dicembre 2005 Autore Segnala Share Inserita: 20 dicembre 2005 YES!!!Ho trovato la soluzione al mio problema ed è estremamente precisa.Me ne frego di contare gli impulsi e piuttosto conto quante volte STIM va dentro alla subroutine in un giro.- Attivo una cam (HR) di X gradi (non interessa nè l'ampiezza nè l'inizio).- STIM va ad incrementare una DM ogni 10ms.- Quando ho il fronte di salita di HR so quanti 10ms ho in un giro. Faccio il calcolo dei giri / minuto Azzero la DMRisultato: ho una precisione di +/- 10 msGrazie dei suggerimenti e del vostro interesseELEL65 Link al commento Condividi su altri siti More sharing options...
pcontini Inserita: 20 dicembre 2005 Segnala Share Inserita: 20 dicembre 2005 Cosa intendi con - Attivo una cam (HR)Comunque se vuoi contare gli impulsi provenienti dell'encoder (segnale A, B o Z) per incrementare una DM devi collegre il segnale ad un ingresso IN000 - IN003 e configurarli come ingressi ad interrupt.Vedrai che funziona, l'ho utilizzato diverse volte. L'unica controindicazione è che più vai su di frequenza più ti aumneta il tempo ciclo.Ciao Link al commento Condividi su altri siti More sharing options...
ELEL65 Inserita: 21 dicembre 2005 Autore Segnala Share Inserita: 21 dicembre 2005 Ciaoutilizzando la funzione BCMP - 230 - (es) DM1000 - HR000e impostando DM1000 = #0000 e DM1001 = #0180tutte le volte che word 230 (la devi dividere prima x 4 se utilizzi sia A che ha un valore compreso tra 0 e 180, HR000, va ad ON (cam HR).Lo so che gli ingressi da 0000 a 0003 posso configurarli come dici tu, ma1) se sono già impegnati?2) l'encoder è collegato tra 0004, 0005 e 0006.ELEL65 Link al commento Condividi su altri siti More sharing options...
pcontini Inserita: 21 dicembre 2005 Segnala Share Inserita: 21 dicembre 2005 Per cam ho capito cosa intendi.1) se sono già impegnati?2) l'encoder è collegato tra 0004, 0005 e 0006.1) Beh se non hai neanche un ingresso libero, può essere un problema!! Magari, invece, utilizzi gli ingressi come normali input digitali per cui uno potresti spostarne uno.2) Nulla ti vieta di fare un ponte, per esempio, tra 0004 e 0000.Chiaro che se hai risolto i problemi come hai descritto va bene cosìCiao Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora