Vai al contenuto
PLC Forum


Encoder - Encoder e VB


elsinoro

Messaggi consigliati

Salve a tutti, qualcun potrebbe aiutarmi?

Sto realizzando un prog. VB che si interfaccia con un encoder incrementale,

ma non riesco a discriminare la direzione in cui gira l'encoder..

grazie

Link al commento
Condividi su altri siti


ifachsoftware

Scusa , ma hai dimenticato di dire in che maniera hai collegato l'encoder , in quanto che se lo colleghi a degli ingressi digitali senza usare un'apposita scheda dedicata con relativi driver e' meglio che lasci perdere.

Ciao :)

Link al commento
Condividi su altri siti

L'encoder è collegato tramite la seriale direttamente al pc.

L'alimentazione è quella della porta e cerco di controllare le linee A e B dell'encoder.

Link al commento
Condividi su altri siti

Devi riconoscere i fronti di salita e di discesa dei due segnali. Poi in base a questi scegli se incrementare o decrementare il contatore che tiene conto della posizione.

Considerando le due fasi a e B le condizioni sono queste:

Fase A Fase B Conteggio

FDS 0 UP

FDS 1 DOWN

FDD 0 DOWN

FDD 1 UP

0 FDS DOWN

0 FDD UP

1 FDS UP

1 FDD DOWN

Legenda:

0: livello basso

1: livello alto

FDD: fronte di discesa

FDS: fronte di salita

UP: incremento conteggio

DOWN: decremento conteggio

Non è affatto complicato realizzare il conteggio software. Basta verificare che il sistema abbia la velocità sufficente alla nostra applicazione. Con un PIC ho raggiunto tranquillamente i 30000 impulsi per secondo.

Ciao!

Link al commento
Condividi su altri siti

Ciao bit,

grazie per la dritta datami,ma potresti accennarmi qualche riga di codice(magari in VB).

Ci sto uscendo pazzo, ma non riesco ancora a far capire al programma se l'encoder

gira avanti o indietro. :(

Grazie mille.

Link al commento
Condividi su altri siti

Si Bit, l'assembler pic va benissimo..anche se non lo conosc benissimo (ma lo dovrò prima o poi imparare :) ).

Mi sarà sicuramente utilissimo come traccia.

Grazie mille.

Ciao.

Link al commento
Condividi su altri siti

Ti copio la parte di programma che interessa la gestione dei segnali provenienti dall'encoder. Le fasi dell'encoder sono collegate sui pin RB6 e RB7, cioè i due bit di peso maggiore della porta B.

La parte di programma che ti allego è eseguita nella subroutine di interrupt, a sua volta impostata per essere eseguita ad ogni cambio di livello delle fasi dell'encoder.

Praticamente ogni volta che una delle due fasi dell'encoder cambia di livello il programma esegue queste istruzioni, che non fanno altro che riconoscere in che verso si è mosso l'encoder e quindi provvedono a incrementare o decrementare il valore del contatore che tiene conto della posizione dell'encoder.

;scambio di posizioni bit memoria fasi

BCF STATUS,C ;reset carry

RRF MEM_B,F ;MEM_B = 0ab00000

BTFSC MEM_B,05 ;test bit b

BSF MEM_B,07 ;MEM_B = bab00000

BCF MEM_B,05 ;MEM_B = ba000000

MOVF PORTB,W ;valore porta b

XORWF MEM_B,W ;comparazione bit fasi

ANDLW 0xC0 ;mascheratura bit encoder

MOVWF MEM_B ;MEM_B = mb+a ma+b 000000

BTFSC MEM_B,07 ;test conteggio orario

CALL PIU ;incremento conteggio

BTFSC MEM_B,06 ;test conteggio antiorario

CALL MENO ;decremento conteggio

MOVF PORTB,W ;valore porta b

ANDLW 0xC0 ;mascheratura bit encoder 11000000

MOVWF MEM_B ;salvataggio valore bit encoder

Non ho riportato le subroutine PIU e MENO, che provvedono a incrementare e decrementare il contatore della posizione dell'encoder.

Ciao.

Link al commento
Condividi su altri siti

Se ti può interessare ho trovato degli integrati che svolgono il lavoro di decoder di quadratura, ovvero gli mandi dentro i due canali in arrivo dall'encoder incrementale e lui ti da il verso di rotazione e il clock.

LS7083 = In uscita hai due pin clock, uno per la rotazione oraria (CW) e uno per l'antioraria (CCW).

LS7084 = In uscita ti ritrovi un pin di clock e un bit che discrimina il verso di rotazione

ti segnalo il sito dove reperire i datasheet = http://www.usdigital.com/products/ls7083-84/

oppure

HCTL2016 = Contatore binario a 16 bit per encoder incrementale, molto bello...

Io ho provato a cercare rivenditori in Italia di questi componenti, purtroppo non li vende nessuno (almeno così sembra) prova a cercarli anche tu, magari sei più fortunato!!!

P.S. Se li trovi mi raccomando fammelo sapere!!!

wxy_79_at_infinito.it

Ciao!

Link al commento
Condividi su altri siti

ifachsoftware

Se vuoi fare questo lavoro devi

Comprarti o farti una scheda su PC oppure comprarti o farti una scheda gestione encoder da interfacciare alla porta seriale.

Pensare di gestire la quadratura del'encoder direttamente da VB e' una emerita cavolata , l'unica alternativa e' un hardware dedicato + driver dedicati di gestione.

Ciao :)

Link al commento
Condividi su altri siti

HCTL2016 lo ha Farnell, ma costa 24 euri + IVA...

Gestire un encoder via software è possibilissimo, e fa risparmaire sull'hardware. Basta verificare che la velocità del sistema sia compatibile con le esigenze.

Ciao.

Link al commento
Condividi su altri siti

non ho trovato ancora gli interati che mi hai indicato.

Per il discorso software forse ha ragione il nostro amico che dice che da vb è impossibile.

Non riesco a scrivere codice che gestisca per bene l'encoder; forse non sono io all'altezza :( .

Se ci sono novità fatemelo sapere.

Grazie.

Link al commento
Condividi su altri siti

Complimenti ifach per il tuo progetto.

Quindi tu confermi che con un flip flop D posso discriminare il senso di rotazione dell' encoder.

I collegamenti che ho pensato sono questi:

Fase A dell'encoder al clock del FF

Fase B all' ingresso D.

In questo modo sull'uscita Q dovrei avere 0 o 1 a seconda del verso di rotazione.

Scusa per la banalità delle mie idee, ma sono poco esperto in questo campo.

Grazie comunque dei consigli.

Link al commento
Condividi su altri siti

Salve ragazzi, avrei un' altra banale domanda da fare?

L' uscita Z degli encoder che ne sono provvisti, a cosa serve di preciso?

Mica riesco a discriminare il senso di rotazione da essa?

Grazie.

Link al commento
Condividi su altri siti

  • 2 weeks later...

Salve,ho un altro problemuccio.

Ho realizzato il circuito per il senso di rotazione dell'encoder, con un 7474,un 7805 ed un max232.

Tutto bene tranne che per la gestione software.

Infatti il circuito è interfacciato tramite seriale ed il problema è questo:

a velocità alte, ho una perdita di segnale e da software non riesco a leggere velocità maggiori di

0,6m/s.

L'encoder usato è un HP HEDS-5500.

Qualcuno sa come posso risolvere questo problema?

Grazie.

Link al commento
Condividi su altri siti

Quindi tu confermi che con un flip flop D posso discriminare il senso di rotazione dell' encoder.

I collegamenti che ho pensato sono questi:

Fase A dell'encoder al clock del FF

Fase B all' ingresso D.

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