Gli encoder sono apparati elettromeccanici che convertono la posizione in un segnale elettrico digitale composto da due onde quadre fuori fase di 90°. Questo blocco funzione esegue la lettura di un encoder incrementale connesso agli ingressi logici la lettura è realizzata con un algoritmo software, non è da confondere con il FB SysGetEncoder, get encoder input, dove la lettura è effettuata da un circuito hardware presente nel modulo che garantisce lettura di frequenze molto più alte.
Basta appoggiare sui due ingressi APhase e BPhase del blocco funzione i due ingressi di acquisizione del canale A e del canale B di un encoder incrementale. Il blocco funzione esegue la quadratura dei segnali, il controllo della direzione di rotazione e gestisce il valore di Quote in uscita. La quadratura dei segnali esegue la moltiplicazione per 4 delle tacche encoder quindi il valore di Quote al termine di un giro completo dell’encoder è pari al numero di tacche encoder moltiplicato per 4.
Blocco funzione
CODESYS: Non disponibile
LogicLab: eLLabMotionLib
Descrizione
Enable (BOOL) Abilitazione gestione conteggio encoder.
Reset (BOOL) Comando di reset quota encoder, attivando l’ingresso si azzera il valore di Quote.
APhase (BOOL) Ingresso canale A encoder.
BPhase (BOOL) Ingresso canale B encoder.
Enabled (BOOL) Conteggio encoder abilitato.
Error (BOOL) Attivo per un loop su errore acquisizione encoder. Si attiva se la frequenza di ingresso dei segnali encoder è maggiore rispetto al tempo di esecuzione del blocco funzione.
Quote (UDINT) Valore di quota encoder in impulsi. Numero tacche giro encoder moltiplicato per 4.
Esempi
Come utilizzare gli esempi.
Nell’esempio è gestita l’acquisizione di un encoder incrementale connesso agli ingressi digitali di un modulo CPU SlimLine. Eseguendo il programma nella task Fast (Ogni 1 mS) è possibile acquisire un frequenza massima degli ingressi di 400 Hz. Il valore di Quote verrà incrementato se la rotazione è oraria (CW) oppure decrementato se la rotazione è antioraria (CCW), verrà conteggiato il numero di tacche giro dell’encoder moltiplicato per 4.
LogicLab (Ptp205, ST_IOEncoder)
PROGRAM ST_IOEncoder
VAR
Quote : UDINT; (* Encoder quote (Pulses) *)
DInp : SysGetPhrDI; (* Digital input acquisition *)
Encoder : IOEncoder; (* Encoder acquisition *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_IOEncoder"
// *****************************************************************************
// Is managed the acquisition of an incremental encoder connected to digital
// inputs of a CPU module.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
IF (SysFirstLoop) THEN
DInp.Address:=255; //Module address
DInp.Mode:=DI_I_8_LL; //Acquisition mode
END_IF;
// -------------------------------------------------------------------------
// ENCODER ACQUISITION
// -------------------------------------------------------------------------
// Acquires encoder connected to Di00 and Di00.
DInp(); //Digital input acquisition
Encoder.APhase:=TO_BOOL(DInp.Value AND 16#00000001);
Encoder.BPhase:=TO_BOOL(DInp.Value AND 16#00000002);
Encoder(Enable:=TRUE); //Encoder acquisition
Quote:=Encoder.Quote; //Encoder quote (Pulses)
// [End of file]