Come funziona l'encoder rotativo e come interfacciarlo con Arduino

Come Funziona L Encoder Rotativo E Come Interfacciarlo Con Arduino



L'encoder rotativo è un importante dispositivo elettromeccanico che ha diversi utilizzi nel campo dell'elettronica. Questo articolo spiegherà i tipi e il funzionamento dell'encoder rotativo insieme alla sua interfaccia con Arduino.

Cos'è un codificatore rotativo

Un encoder rotativo è un dispositivo di input digitale che rileva la posizione angolare della manopola rotativa e invia segnali al microcontrollore oa qualsiasi altro dispositivo a cui è collegato. Possono ruotare di 360° senza fermarsi. È anche chiamato codificatore ad albero. Viene utilizzato in stampanti, elettronica audio, motori e controller.









Tipi di codificatori rotativi

Esistono principalmente due tipi di encoder rotativi che vengono decisi in base al segnale di uscita da essi generato. Questi tipi sono denominati:



Encoder rotativo incrementale

Questo tipo di encoder conta i giri della manopola sotto forma di impulsi. Quando la manopola viene ruotata una volta, viene generato un impulso. Ad ogni impulso, il contatore si incrementa per indicare la posizione angolare dell'albero.





Codificatore rotativo assoluto

Questo tipo di encoder fornisce la posizione angolare assoluta dell'albero, in quanto ha un codice separato per ogni posizione dell'albero, e misura l'angolo attraverso quel codice. Non ha bisogno di un contatore per dare un'uscita di posizione angolare. Anche se l'encoder rotativo assoluto è diseccitato, i rispettivi valori per le posizioni angolari vengono mantenuti. È anche un codificatore a basso costo.



Funzionamento del codificatore rotativo

L'encoder rotativo è costituito da un disco con aree equidistanti collegate a un pin comune C che è collegato a terra. Gli altri due pin A e B sono pin di contatto che entrano in contatto con C quando la manopola viene ruotata. Quando il pin A o B viene collegato a terra, viene generato un segnale. Questi segnali generati dai pin di uscita sono sfasati di 90°. Questo perché il pin A viene collegato a terra quando la manopola viene ruotata in senso orario e il pin B viene prima collegato a terra quando la manopola viene ruotata in senso antiorario. Pertanto, il senso di rotazione della manopola è determinato attraverso questi collegamenti.

Se lo stato di B non è uguale a UN , allora la manopola è girata in senso orario.


Se lo stato di B è uguale ad A, la manopola ha girato in senso antiorario.

Configurazione dei pin dell'encoder rotativo

Il diagramma riportato di seguito fornisce un pinout dell'encoder rotativo che mostra i pin di uscita A e B, un interruttore rotativo che può essere utilizzato come pulsante e i pin per l'alimentazione.

Pin Descrizione dell'encoder rotativo

Di seguito è riportata la descrizione fornita di tutti i pin dell'encoder rotativo.

Uscita B o CLK

Questo pin fornisce un output di quante volte la manopola o il codificatore rotante ha ruotato. Ogni volta che la manopola viene ruotata, il CLK completa un ciclo di HIGH e LOW. Viene conteggiato come una rotazione.

Uscita A o DT

Questo è il secondo pin di uscita dell'encoder rotativo che determina la direzione di rotazione. È in ritardo di 90° rispetto al segnale CLK. Pertanto, se il suo stato non è uguale allo stato di CLK, il senso di rotazione è orario, altrimenti antiorario.

Interruttore

Il perno dell'interruttore viene utilizzato per verificare se il pulsante è premuto o meno.

VCC

Questo pin è collegato a un'alimentazione a 5V

GND

Questo pin è collegato a terra

Interfacciamento encoder rotativo con Arduino

Il codificatore rotativo ha cinque pin. VCC e GND dell'encoder rotativo sono collegati a quello di Arduino. I restanti pin CLK, DT e SW sono collegati ai pin di ingresso digitale di Arduino.

Codice Arduino per encoder rotativo

// Ingressi codificatore rotativo
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
int contatore = 0 ;
int currentCLKState;
int ultimoCLKStato;
Stringa direzione corrente = '' ;
unsigned long lastButtonPressTime = 0 ;
configurazione nulla ( ) {
// Impostare i pin dell'encoder COME ingressi
    modalità pin ( CLK_PIN, INGRESSO ) ;
    modalità pin ( DT_PIN, INGRESSO ) ;
    modalità pin ( SW_PIN, INPUT_PULLUP ) ;
// Configura monitor seriale
Inizio.seriale ( 9600 ) ;
// Leggi lo stato iniziale di CLK
lastCLKState = digitalRead ( CLK_PIN ) ;
}
anello vuoto ( ) {
// Leggi lo stato attuale di CLK
currentCLKState = digitalRead ( CLK_PIN ) ;
// Se la scorso e lo stato attuale di CLK è diverso, Poi si è verificato un impulso
// Reagisci solo a 1 cambio di stato per evitare il doppio conteggio
Se ( currentCLKState ! = ultimoCLKStato && statoCLK corrente == 1 ) {
// Se lo stato DT è diverso dallo stato CLK, Poi
// L'encoder ruota in senso antiorario, quindi il decremento
Se ( digitaleLeggi ( DT_PIN ) ! = statoCLK corrente ) {
contatore--;
correnteDirezione = 'antiorario' ;
} altro {
// L'encoder ruota in senso orario, quindi incrementare
contatore++;
correnteDirezione = 'CW' ;
}
Stampa.seriale ( 'Direzione di rotazione: ' ) ;
Stampa.seriale ( currentDirection ) ;
Stampa.seriale ( ' | Valore contatore: ' ) ;
Serial.println ( contatore ) ;
}
// Ricorda il scorso Stato CLK
lastCLKState = currentCLKState;
// Leggi lo stato del pulsante
int buttonState = digitalRead ( SW_PIN ) ;
// Se rileviamo un segnale BASSO, il pulsante viene premuto
Se ( buttonState == BASSO ) {
// Se sono trascorsi 50ms dal scorso Impulso BASSO, significa che il
// pulsante è stato premuto, rilasciato e premuto di nuovo
Se ( milli ( ) - lastButtonPressTime > cinquanta ) {
Serial.println ( 'Pulsante premuto!' ) ;
}
// Ricorda il scorso evento di pressione del pulsante tempo
lastButtonPressTime = millis ( ) ;
}
// Mettere In un leggero ritardo a aiuto rimbalzare la lettura
ritardo ( 1 ) ;
}


Nel codice sopra indicato, lo stato del pin CLK viene controllato nella funzione loop(). Se non è uguale al suo stato precedente, mostra che la manopola rotante ha ruotato. Ora, per verificare la direzione di rotazione della manopola, lo stato attuale di CLK viene confrontato con lo stato di DT. Se entrambi gli stati non sono uguali, indica che la manopola ha ruotato in senso orario e il contatore incrementa il suo valore per mostrare la posizione della manopola. Nel caso opposto, il contatore diminuisce.

Conclusione

Gli encoder rotativi sono sensori di posizione avanzati che possono ruotare continuamente. Sono disponibili in due tipi: incrementali e assoluti. Il codificatore rotativo funziona contando gli impulsi generati dalla rotazione della manopola. Ha diverse applicazioni dall'elettronica della vita quotidiana all'automazione industriale.