Vai al contenuto
PLC Forum


Encoder - Encoder e VB


Messaggi consigliati

Inserito:

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


ifachsoftware
Inserita:

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 :)

Inserita:

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.

Inserita:

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!

Inserita:

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.

Inserita:

Non conosco VB. Assembler PIC può aiutarti? Se lo capisci lo usi come traccia...

Inserita:

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.

Inserita:

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.

Inserita:

grazie mille bit.

Ci studio un pò sopra e se ho problemi ti disturbo un altro pò :P

Grazie di nuovo,

buona giornata

Inserita:

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!

ifachsoftware
Inserita:

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 :)

Inserita:

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.

Inserita:

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.

ifachsoftware
Inserita:
Per il discorso software forse ha ragione il nostro amico
Inserita:

posso discriminare il senso di rotazione dell' encoder usando dei flip flop?

Inserita:

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.

ifachsoftware
Inserita:

Corretto , Ciao :)

... comunque anche io non sono un 'Esperto' di Elettronica :o

Inserita:

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.

Inserita:

ciao

la Z e' la tacca di zero .

cioe' da' un impulso ad ogni giro

ciao

dario

Inserita:

Dario quindi sia in senso orario che in senso anti orario, mi restituisce un impulso a giro.

Giusto?

  • 2 weeks later...
Inserita:

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.

ifachsoftware
Inserita:

Beh , semplice , non lo gestisci in seriale , ma fai un hardware a parte

Ciao :)

Inserita:

Ciao,

quali componenti posso usare per fare un hardware dedicato

alla gestione della velocità dell'encoder?

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

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