Come configurare smartphone e PC. Portale informativo
  • casa
  • Ferro
  • Collegamento dell'encoder al microcontrollore PIC. Interfacceremo l'encoder e il microcontrollore

Collegamento dell'encoder al microcontrollore PIC. Interfacceremo l'encoder e il microcontrollore

Questo articolo parlerà dell'encoder e di come collegarlo al microcontrollore. Può essere trovato in dispositivi come sistemi audio, lavatrici, forni a microonde e numerosi dispositivi moderni. Ad esempio, nei sistemi audio, per controllare il volume vengono utilizzati codificatori e microcontrollori. Ma ok, basta acqua, veniamo al sodo.

Un encoder, o come viene anche chiamato sensore dell'angolo di rotazione, è un dispositivo elettromeccanico che converte la posizione dell'angolo dell'albero in un segnale elettrico. Gli encoder si dividono in 2 tipologie: assoluti e incrementali.

Negli encoder incrementali, quando l'albero viene ruotato, vengono generati degli impulsi, il numero di questi impulsi è proporzionale all'angolo di rotazione dell'albero. Se conti questi impulsi, puoi scoprire l'angolo di rotazione dell'albero dell'encoder. Se la manopola dell'encoder è a riposo, non vengono generati impulsi. Tali encoder sono ampiamente utilizzati nei sistemi audio e nei controlli industriali.

Gli encoder assoluti hanno un principio di funzionamento completamente diverso, basato sull'emissione di un codice univoco per ciascuna posizione dell'albero. La formazione degli impulsi avviene quando l'albero ruota e quando è a riposo. Inoltre, le informazioni sulla posizione attuale dell'albero verranno conservate anche dopo l'interruzione dell'alimentazione di tensione.

Nel nostro esempio collegheremo un encoder incrementale con un microcontrollore. Encoder PEC12 422OF SOO24 che ha 24 impulsi per giro.

L'encoder ha 5 pin, 3 dei quali sono i pin dell'encoder stesso e gli altri due sono il pulsante. I pin dell'encoder hanno un pin comune e gli altri due pin di segnale. Lo schema di collegamento non è diverso dallo schema di collegamento di un normale pulsante. I pin del segnale sono collegati alle porte I/O del microcontrollore. E il terminale comune, che è collegato a terra al centro. Per proteggersi dai rimbalzi dei contatti è possibile aggiungere condensatori con una capacità di diversi nF. Configuriamo i pin a cui abbiamo collegato l'encoder nel programma come ingressi e accendiamo le resistenze di pull-up; è possibile collegare resistenze esterne.

Schema di collegamento dell'encoder al microcontrollore

Il principio di funzionamento dell'encoder si basa sulla chiusura e apertura dei contatti; quando nessuno gira la manopola, ce n'è una logica all'ingresso del MK. Quando si inizia a girare la manopola, compaiono due impulsi rettangolari spostati l'uno rispetto all'altro. La direzione in cui giriamo determinerà quale segnale è più avanti.

Ma poiché in ognuno di essi sono presenti più contatti, l'immagine sarà simile a questa.

Algoritmo del programma del microcontrollore

Ad un certo intervallo inizia la chiamata alla funzione di polling dell'encoder. Questa funzione legge i livelli logici presenti sui pin del microcontrollore e scrive questo valore in una variabile temporanea. All'interno della funzione di polling dell'encoder è presente un'altra variabile statica che viene salvata all'uscita da questa funzione; memorizza la sequenza dei valori precedenti. Da questa variabile viene prelevato l'ultimo valore registrato e confrontato con quello attuale per determinare se ci sono state modifiche. Se questi valori sono uguali, la funzione esce e, se differiscono, il valore della variabile statica viene spostato di 2 bit a sinistra e un nuovo valore (corrente) viene scritto nello spazio "libero".

Si scopre che quando l'albero dell'encoder ruota, un nuovo valore verrà costantemente scritto nella variabile temporanea e si otterrà una sequenza di codice ripetitiva. Se lo ruotiamo a destra: 11100001, se lo ruotiamo a sinistra, quindi 11010010. Utilizzando questi valori puoi capire in quale direzione ruota l'albero.

L'archivio contiene 2 file encoder.h e encoder.c. Inizialmente è necessario impostare la porta ed il numero di pin a cui effettuare la connessione; queste sono le variabili LEFT_SPIN e RIGHT_SPIN. Il file "c" contiene l'implementazione delle funzioni.

Encoder incrementale sembra potenziometro, ma a differenza di un potenziometro, non ha posizioni estreme; può ruotare in entrambe le direzioni per un numero illimitato di giri. Va inoltre notato che l'encoder incrementale non ruota in modo fluido come un potenziometro, ma a passi. Può essere visto sull'autoradio, oscilloscopio, centro musicale, lavatrice e altre apparecchiature in cui la regolazione di alcuni parametri viene effettuata entro ampi limiti. Naturalmente, i parametri possono essere modificati anche utilizzando i pulsanti, ad esempio, per aumentare il volume della musica di 20 valori, quando si controlla il pulsante, è necessario premerlo 20 volte e quando si controlla l'encoder, girarlo su a determinato angolo, a seconda dell'algoritmo di elaborazione.

Encoder incrementaleè composto da due contatti, il cui ordine di chiusura dipende dal senso di rotazione.


Infatti un encoder incrementale converte la rotazione dell'albero in impulsi elettrici, contenente informazioni sul senso di rotazione.

Assembliamo il circuito di test mostrato nell'immagine sopra e colleghiamolo ai pin A e B oscilloscopio, resistori pull-up - 4,7K.
Giriamo l'encoder in senso orario.


Ora in senso antiorario.


Gli oscillogrammi mostrano che a seconda del senso di rotazione cambia l'ordine di chiusura dei contatti. Ma non sempre i frontali risultano così belli.


Poiché i contatti sono meccanici, sono soggetti a vibrazioni, cioè quando vengono chiusi a causa dell'elasticità dei materiali si verificano numerosi cortocircuiti e aperture incontrollati, come si può vedere nell'oscillogramma sopra.

Esistono due modi per gestire le chatter: Primo consiste nell'aggiungere condensatori e resistori, come mostrato nella figura seguente.


Poiché il chattering è un fenomeno a breve termine, viene facilmente estinto da un condensatore.


L'oscillogramma mostra che dopo l'installazione dei condensatori i fronti sono diventati meno ripidi e le vibrazioni sono scomparse.

Secondo modo- software e qui tutto dipende dall'implementazione del polling delle uscite dell'encoder. Se Lo stato dell'encoder viene monitorato utilizzando interrupt esterni, quindi dopo che l'interruzione è stata attivata, è necessario effettuare un ritardo di 20-30 millisecondi, durante il quale il MK non risponderà a un cambiamento nello stato di uscita, cioè non si sentirà rimbalzare. Se il polling delle uscite dell'encoder viene implementato utilizzando un timer, quindi l'intervallo tra i sondaggi dovrebbe essere maggiore della durata delle chiacchiere, gli stessi 20-30 millisecondi.

consideriamo metodi di elaborazione dei dati provenienti dall'encoder.
Il primo metodo consiste nel collegare uno dei piedini dell'encoder all'uscita degli interrupt esterni e configurarlo per interrompere su un fronte di discesa. Nell'interruzione controlliamo lo stato dell'altra gamba e se è zero la rotazione avviene in una direzione, altrimenti nell'altra. Di seguito è riportato il codice che implementa questo metodo per AVR.
#includere ISR(INT2_vect) ( if (PINB & 0X02) ( PORTAB |= (1<<0); } else { PORTB &= ~(1<<0); } //антидребезг _delay_ms(20); //сбрасываем флаг прерывания вызванный дребезгом GIFR = (1<Ruotando l'encoder in un senso il LED si accende, ruotandolo nell'altro si spegne.

Il secondo metodo è confrontando lo stato attuale e quello precedente. Esprimiamo i livelli logici di una sequenza di impulsi sotto forma di zero e uno.


Quindi otteniamo un numero finito di stati del codificatore. La prima cifra è il livello logico della prima uscita dell'encoder, la seconda è il livello logico della seconda uscita.

Supponiamo che l'ultimo stato in cui si trovava l'encoder fosse uguale a tre, se lo stato successivo è uguale a uno, ruota in una direzione, se due, quindi nell'altra. Si scopre che è possibile registrare la transizione da uno stato all'altro e determinare la direzione di rotazione, ma l'implementazione più semplice è quando si passa da 11 a 01 e 10. Di seguito è riportato il codice che implementa l'algoritmo descritto per AVR,
#define F_CPU 8000000UL #include #includere uint8_t last_state = 0; ISR(TIMER0_COMP_vect) ( //entrambi i pin dell'encoder sono collegati ai pin 2 e 3 della porta B //leggono il loro stato uint8_t current_state = (PINB & 0x06)>>1; //prende in considerazione la transizione solo se lo stato precedente è 11 //e se non è uguale al nuovo if ((last_state == 3) && (last_state != current_state)) ( //se il nuovo stato è 01 - accende il LED if(current_state == 1) ( PORTB |= 0x01; ) //se il nuovo stato è 10 - spegni il LED if(current_state == 2) ( PORTB &= ~0x01; ) ) //all'uscita dall'interrupt, lo stato corrente diventa quello precedente last_state = current_state; ) int main(void) ( //due ingressi per collegare l'encoder DDRB &= ~ 0x06; //collega gli ingressi all'alimentazione PORTB |= 0x06; //uscita per collegare il LED DDRB |= 0x01; // imposta il timer sulla modalità reset per coincidenza TCCR0=(1<È tutto.
Ho comprato l'encoder

In questo progetto demo esamineremo il compito di interfacciare un elemento di controllo chiamato encoder con un microcontrollore PIC.

Per realizzare il progetto dimostrativo avremo bisogno di:

  • Encoder a 24 posizioni;
  • 16 LED (3 mm);
  • driver LED;
  • microcontrollore

Un encoder è un elemento di controllo moderno e originale per dispositivi digitali e in apparenza è simile a un resistore variabile (vedi figura sotto). Un altro nome per questo controllo è sensore angolare, sensore di rotazione. La rotazione dell'albero è accompagnata da scatti, ad esempio 24 scatti per giro. L'encoder ha 3 uscite: A, B, C e viene utilizzato per inserire rapidamente i dati nei dispositivi digitali. Alcuni modelli hanno un pulsante integrato che si attiva premendo l'albero dell'encoder (viene aggiunta un'altra uscita).

Principio di funzionamento dell'encoder

Ruotando, ad esempio, un clic verso destra, viene chiuso prima il contatto A+C e poi B+C. Quando l'albero viene ruotato con questo clic, i contatti si aprono nella stessa sequenza. Quando l'albero viene girato nella direzione opposta, la sequenza di chiusura con il contatto C cambia, cioè girando a sinistra si chiudono prima B+C, poi A+C.

Utilizzando un encoder nei progetti di microcontrollore, è possibile implementare diversi tipi di input di dati utilizzando lo stesso encoder, tuttavia, ciò richiede feedback e visualizzazione in modo che l'utente sappia quali informazioni sta inserendo e in quale posizione si trova l'encoder.


Diagramma schematico: collegamento dell'encoder al microcontrollore PIC (clicca per ingrandire)

I pin A e B dell'encoder sono collegati alle porte RB4 e RB5 del microcontrollore, il pin C dell'encoder è collegato a terra. Vale la pena notare che le resistenze pull-up devono essere collegate alle linee di segnale dei pin A e B. Non è un caso che l'encoder sia collegato alle linee I/O specificate del microcontrollore: in primo luogo, la porta B ha resistori pull-up integrati e non dobbiamo collegarne di esterni, e in secondo luogo, la porta B del microcontrollore ha una funzione molto utile - "interrupt-on-change" - interruzione cambiando il livello, che ci permetterà di monitorare lo stato dell'encoder.

Per visualizzare i dati in ingresso vengono utilizzati 16 normali LED da 3 mm che saranno posizionati sul circuito stampato attorno all'encoder installato. I LED sono collegati al chip A6276.

Il chip è un driver LED con input di informazioni seriali a 16 bit. Il driver contiene un registro a scorrimento CMOS a 16 bit, latch e driver associati per controllare i LED e può pilotare più LED di quelli consentiti dal microcontrollore. Inoltre, il driver può essere controllato tramite un'interfaccia SPI, che riduce ulteriormente il numero di linee I/O utilizzate e rende il progetto scalabile.

Il software del microcontrollore per risolvere il nostro problema è relativamente semplice. Sono previste 3 modalità di funzionamento (immissione informazioni) e feedback:

  • Modalità di posizionamento a 360°: in questa modalità, i LED indicano la "posizione" corrente dell'encoder, l'utente può ruotare l'albero dell'encoder a sinistra e a destra di qualsiasi angolazione;
  • Modalità “Volume/Livello” - in questa modalità, i LED indicano il valore corrente tra i livelli minimo e massimo dell'intervallo di ingresso (come il livello del volume nei dispositivi audio);
  • Modalità interruttore rotante a 3 posizioni: in questa modalità, ci sono solo tre posizioni selezionabili che l'utente seleziona ruotando l'albero dell'encoder a sinistra/destra.

Dimostrazione del progetto

Un encoder è qualcosa che assomiglia a un resistore variabile, ma, a differenza di quest'ultimo, non ha limitatori e può ruotare in qualsiasi direzione all'infinito. Utilizzando un codificatore è molto comodo organizzare tutti i tipi di menu su schermo; in generale, un codificatore “pushable” (cioè se può funzionare anche come pulsante) è l'ideale per organizzare menu ciclici unidimensionali.

Esistono due tipi di encoder: assoluto - che emette immediatamente il codice dell'angolo di rotazione e incrementale - che emette impulsi durante la rotazione. Per quest'ultimo, il microcontrollore deve essere responsabile del conteggio degli impulsi e della loro conversione in angoli di rotazione.

Dal punto di vista progettuale gli encoder possono essere meccanici o ottici; nel primo vengono generati impulsi di rotazione su una coppia di contatti quando questi vengono chiusi da un contatto strisciante dell'albero; nel secondo viene giocato il ruolo dei contatti da fotodiodi e il ruolo del contattore è un LED che brilla attraverso un disco con fessure (ciao al mouse a sfera) .

Sebbene ci siano molte informazioni sulla programmazione degli encoder sulla rete, nonché librerie già pronte per questo, sono tutte un po' inutilmente ingombranti (IMHO): il polling dello stato viene solitamente implementato come una macchina a stati finiti sotto forma di interruttore blocco con if annidati, che sembra alquanto complicato (specialmente se scritto in assembler). Anche se l'implementazione potrebbe essere più semplice.

Gli encoder incrementali meccanici economici sono i più apprezzati nell'economia nazionale, quindi li prenderemo in considerazione. Il processo di rotazione dell'albero dell'encoder è mostrato schematicamente nella figura (in alto - rotazione in senso orario, in basso - in senso antiorario):


Qui A e B sono gli stessi contatti su cui il microcontrollore elaborerà i livelli. Il contatto mobile li chiude a terra se non cadono nei suoi fori. Si noti qui che la figura mostra solo quattro fori per semplicità. In effetti, ci sono molti di più di questi fori (ricorda ancora una volta il mouse a sfera e l'aspetto della sua ruota del chopper ottico). I terminali A e B vengono collegati tramite resistori alla tensione di alimentazione. Di conseguenza, ruotando, si ottengono i diagrammi mostrati nella figura sopra.

Lascia che entrambi i contatti cadano inizialmente nel foro, quindi su di essi ci sarà un livello elevato di tensione (sono anche collegati all'alimentazione). Inoltre, ruotando in senso orario, il contatto A sarà il primo a chiudersi a massa, poi si unirà il contatto B. Quindi, raggiunto il foro successivo del disco, il contatto A si aprirà e riceverà un livello alto, dopodiché il contatto B lo raggiungerà Dopo questi movimenti riporteranno i contatti al loro stato originale e con un'ulteriore rotazione questo diagramma verrà ripetuto ciclicamente.

Risulta quindi che lo stato attuale dell'encoder è descritto da un valore a due bit. Ma lo stato attuale in sé contiene poche informazioni utili e per analizzare la rotazione deve essere considerato insieme al valore dello stato precedente. E questa coppia determina già chiaramente la direzione di rotazione della maniglia. Per comodità, prendiamo un numero a quattro bit, i cui due byte più significativi contengono gli stati precedenti dei contatti A e B, e i due byte più bassi contengono quelli attuali.

E quando si ruota in senso antiorario

Binario Decimale
1110 14
0001 1
0010 2
0111 7

Ora l'algoritmo per determinare la direzione di rotazione dell'encoder sembra molto semplice: otteniamo il valore e confrontiamo se rientra in uno dei set (2, 4, 11, 13) e (1, 7, 8, 14). Se sì, allora abbiamo una svolta nella direzione corrispondente. Altrimenti, l'albero o non ruotava affatto, o ruotava così rapidamente da saltare diversi stati (se ciò accade spesso, allora dovresti pensare ad aumentare la frequenza del polling dello stato), oppure si verificava un "rimbalzo" dei contatti. Senza approfondire il motivo, tutti gli altri significati possono essere tranquillamente ignorati.

Ad esempio, considera il funzionamento di un encoder insieme a un microcontrollore AVR:


Qui vengono utilizzati per la connessione due pin di ordine inferiore della porta PB del microcontrollore ATMega8. Una coppia di resistori tira queste linee fino alla tensione di alimentazione (poiché i resistori interni dell'Atmega qui potrebbero non essere sufficienti per un funzionamento stabile), una coppia di condensatori viene installata per sopprimere il rumore impulsivo.

Per tale diagramma di connessione, è possibile disegnare la seguente implementazione in C:

Static uint8_t encoderGetVal() ( return PINB & 3; ) static uint8_t encoderGetCode() ( static uint8_t prev; uint8_t val = encoderGetVal(); uint8_t code = (prev<< 2) | val; prev = val; return code; } static void encoderInit() { DDRB &= ~0b11; PORTB |= 0b11; encoderGetCode(); } void onEncoderEvent(bool direction); void encoderCheck() { uint8_t code = encoderGetCode(); if (code == 1 || code == 7 || code == 8 || code == 14) { onEncoderEvent(true); } else if (code == 2 || code == 4 || code == 11 || code == 13) { onEncoderEvent(false); } }

Il codice è incredibilmente semplice: un paio di se e nessuna macchina a stati finiti. La funzione encoderInit() viene chiamata all'inizio per inizializzare la porta e ricordare il valore iniziale. La funzione encoderCheck() viene chiamata nel ciclo degli eventi (all'interno di main() o da un timer). Il gestore onEncoderEvent(bool) verrà chiamato ogni volta che l'encoder viene ruotato e riceverà un flag della direzione di rotazione.

Ma c'è un punto importante: l'encoder è una cosa sensibile e se provi a elaborare, ad esempio, gli eventi di navigazione nei menu in questo modo, anche una piccola rotazione della manopola dell'encoder chiamerà ripetutamente il gestore onEncoderEvent(), come il risultato è che il cursore del menu invece di spostarsi sull'elemento successivo/precedente volerà immediatamente alla fine/all'inizio dell'elenco. È possibile regolare la sensibilità dell'encoder modificando la frequenza della chiamata encoderCheck() (di solito la frequenza ottimale è ~ 10 Hz). In questo caso il metodo encoderGetCode() dovrebbe essere richiamato il più spesso possibile in modo da avere sempre il valore attuale dell'ultimo stato dei contatti (con una frequenza intorno ai 100 Hz).

In assembler questo codice potrebbe assomigliare a questo:

EQU encoder_port PORTB .EQU encoder_pin PINB .EQU encoder_ddr DDRB .DSEG .ORG SRAM_START sEncoderPrev: .BYTE 1 ... .CSEG .ORG $0000 ... Encoder_init: cbi encoder_ddr, 0 cbi encoder_ddr, 1 sbi encoder_port, 0 sbi encoder_port, 1 in r0, encoder_pin andi r0, 3 m sEncoderPrev, r0 ... Encoder_check lds ZL, sEncoderPrev lsl ZL lsl ZL in r0, encoder_pin andi r0, 3 m sEncoderPrev, r0 o ZL, r0 ; 1 7 8 14 -> senso orario cpi ZL, 1 breq Encoder_orario cpi ZL, 7 breq Encoder_orario cpi ZL, 8 breq Encoder_orario cpi ZL, 14 breq Encoder_orario ; 2 4 11 13 -> antiorario cpi ZL, 2 breq Encoder_antiorario cpi ZL, 4 breq Encoder_antiorario cpi ZL, 11 breq Encoder_antiorario cpi ZL, 13 breq Encoder_antiorario rjmp Encoder_done Encoder_orario: ; ; ecco il codice del gestore della rotazione in senso orario; Encoder_antiorario: ; ; ecco il codice del gestore della rotazione in senso antiorario; Intervallo_enc_done.

In breve, gli encoder possono essere chiamati trasduttori di spostamento angolare. Servono a trasformare l'angolo di rotazione di un oggetto rotante, ad esempio l'albero di un meccanismo, in un segnale di corrente elettrica. In questo caso viene determinato non solo l'angolo di rotazione dell'albero, ma anche il suo senso di rotazione, nonché la velocità di rotazione e la posizione attuale rispetto alla posizione originale.

Gli encoder sono diventati più popolari se utilizzati nei sistemi di movimento di precisione, nelle fabbriche di macchine utensili, nei complessi di produzione che utilizzano la robotica, nei dispositivi di misurazione che richiedono la registrazione di misurazioni precise di inclinazioni, rotazioni, rotazioni e angoli.

Tipi e principio di funzionamento

Gli encoder sono sensori di rotazione. Il sensore più semplice ha una maniglia che può essere ruotata in senso orario o antiorario. A seconda dell'angolo di rotazione e della direzione viene emesso un segnale digitale che informa sulla posizione della maniglia o in quale direzione è stata girata.

Per un encoder di questo tipo, mostrato in figura, la maniglia può essere utilizzata anche come pulsante. Questa è una funzione ausiliaria di un tipo specifico di encoder.

In base al tipo di dati in uscita gli encoder si dividono in due grandi gruppi:

  1. Assoluto.
  2. Incrementale.

Encoder assoluti

Con un encoder assoluto, l'intero cerchio di rotazione è diviso in un certo numero di settori, molto spesso della stessa dimensione. Questi settori sono numerati. Durante il funzionamento, l'encoder visualizza il numero del settore in cui si trova attualmente. Ecco perché si chiama assoluto. Con questo tipo di encoder è sempre possibile determinare con quale angolo rispetto al settore zero viene ruotato l'encoder in un determinato momento, ovvero quando ruotato produce i valori dei numeri del settore, fino al valore massimo. Poi torna a zero.

Se l'albero dell'encoder viene ruotato nella direzione opposta, inizierà a produrre valori opposti. Nel nostro caso, utilizza cinque pin per emettere valori di rotazione.

Questo algoritmo ha i suoi svantaggi. La tabella 1 mostra l'ordine dei valori di uscita dell'n-esimo encoder. Vale la pena prestare attenzione alle ultime due righe, il passaggio da 127 a 128.

Tabella 1

Assolutamente tutte le cose cambiano qui. In un encoder ideale cambiano tutti contemporaneamente e non ci sono problemi. In quasi un codificatore reale, i bit cambiano rapidamente, ma non simultaneamente. E ad un certo punto l'uscita dell'encoder risulta essere un valore completamente arbitrario. Poiché tutti i bit cambiano, quindi, l'encoder avrà un valore arbitrario da zero a tutti uno.

Un esempio di tale interruttore è mostrato a destra. Cosa potrebbe significare? Diamo un'occhiata a un esempio. Il microcontrollore utilizza un motore per controllare l'albero e ruotarlo fino a un certo angolo. Ad un certo punto, quando si passa dalla cella 127 alla cella 128, riceve un certo valore casuale. Il controllore conclude che l'albero si trova in una posizione completamente diversa, a differenza della posizione effettiva, e inizia a ruotarlo in una direzione diversa, a una velocità diversa, ecc.

Dopo un certo tempo, il microcontrollore riceve il valore corretto e inizia a provare a fermare l'albero e a ruotarlo nella direzione corretta. Questo processo può richiedere molto tempo, a condizione che un errore di questo tipo si verifichi frequentemente. Tali errori sono irregolari e piuttosto difficili da calcolare.

Codice grigio

Il problema sopra descritto viene risolto introducendo un codice Gray. Una caratteristica del codice Gray è che quando l'encoder viene impostato su uno, anche il valore del codice Gray cambia di uno. Cambia solo un tipo. Ciò può essere visto nella Tabella 2 nel confronto tra codice binario e codice Gray.

Tavolo 2

Le prime due righe sono le stesse, ma già nella seconda riga la parte centrale è cambiata. Poi cambia anche qualcosa. Vale anche la pena notare che l'ultimo e il primo codice Gray differiscono di un bit, il che significa che il codice Gray potrebbe entrare in un ciclo.

Il vantaggio di questo codice è che l'errore discusso sopra non è possibile. Tra gli svantaggi si può notare che il microcontrollore ha bisogno di convertire il codice Gray in codice binario per capire in quale posizione si trova l'encoder assoluto.

Encoder incrementali

Il tipo successivo è l'encoder incrementale, che ha una struttura più semplice. Ma allo stesso tempo non mostra la posizione specifica della sua penna. Mostra solo il senso di rotazione e il numero di divisioni di rotazione deve essere contato dal microcontrollore.

Un encoder incrementale ha una serie di strisce che sono collegate a terra per impostazione predefinita e, quando ruotate, creano e interrompono le connessioni. Il risultato è il segnale mostrato in figura (simile ad un'onda quadra). L'encoder ha due di queste strisce circolari. Le strisce sono sfalsate di un quarto e anche i segnali sono sfalsati di un quarto. Questo è importante perché consente di determinare il senso di rotazione.

Il circuito di un encoder incrementale può essere rappresentato nella figura a destra. I pulsanti indicano i collegamenti periodici dell'encoder a terra. Poiché l'encoder non è collegato internamente a un'unità logica, è necessario collegare indipendentemente le unità logiche dall'esterno tramite resistori all'uscita dell'encoder. In questo caso, quando nessuno dei piedini dell'encoder è collegato a terra, ce ne sarà uno logico sui piedini.

Se l'encoder ha collegato una gamba a terra, questa gamba avrà uno zero logico. In uno stato silenzioso, l'uscita dell'encoder è logica. Quando inizi a ruotare l'encoder in qualsiasi direzione, prima un pin è collegato a terra, poi l'altro. Successivamente, questi pin vengono disconnessi a loro volta da terra e su di essi viene nuovamente formata un'unità logica.

Il senso di rotazione può essere determinato da quale dei terminali è stato collegato per primo a terra. Quando si contano i cicli completi, è possibile contare il numero di clic effettuati dall'encoder.

Infatti l’encoder ha quattro stati:

  1. Due unità.
  2. Zero e uno.
  3. Zero e zero.
  4. Uno e zero.

Tre stati che non sono uguali a uno sono instabili e il codificatore non può trovarsi in essi. Molti microcontrollori implementano la funzione di conteggio dei turni utilizzando timer dotati di ingressi specifici. Il timer conta a livello hardware quanti clic e in quale direzione è stato ruotato l'encoder e ne visualizza il valore. Cioè, il contatore incrementa un numero.

Modificando questo numero è possibile determinare di quanti clic è stato ruotato l'encoder. Dal numero di clic è possibile determinare l'angolo di rotazione. L'encoder presenta anche un rimbalzo dei contatti, che rende difficile l'analisi del segnale.

Encoder ottici

Tale convertitore è realizzato sotto forma di un disco fissato su un albero e realizzato in vetro. Il sensore di rotazione ottico differisce dagli altri tipi in quanto dispone di un gruppo ottico aggiuntivo che si muove quando l'albero viene ruotato. Allo stesso tempo converte la coppia in un flusso luminoso, che viene poi ricevuto da un fotosensore.

Il convertitore ottico ricorda gli angoli di rotazione. In questo caso ad ogni singola posizione corrisponde uno speciale codice digitale che, insieme al numero di giri, costituisce l'unità di misura del sensore. L'encoder si collega e funziona in modo simile a un encoder incrementale.

In base alla natura del loro funzionamento, sono suddivisi in fotovoltaico E magnetico . Il principio di funzionamento del magnetico si basa sull'uso del , scoperto per la prima volta nel 1879. In questo caso, la differenza di potenziale appare solo quando un filo di corrente continua viene inserito in un campo magnetico.

In termini di precisione e proprietà di risoluzione, il tipo di sensore magnetico è inferiore a quello fotoelettrico, tuttavia è più semplice nel design e meno impegnativo in termini di condizioni operative e spazio. Un encoder magnetico è un dispositivo che rileva il passaggio del polo magnetico di un magnete durante la rotazione, posto in prossimità dell'elemento sensibile. Le informazioni del trasmettitore sono espresse in codice digitale.

Encoder fotoelettrico è un sensore che funziona secondo il principio fotoelettrico. Questo effetto si osserva quando una sostanza è esposta alla luce. Questo principio fu scoperto nel 1887. Quando si utilizza un tale sensore, il raggio luminoso viene costantemente convertito in un segnale di corrente elettrica.

Gli analoghi del codificatore fotoelettrico sono optoelettronici, ottici e. Questi sensori sono più sensibili alle caratteristiche di produzione, al funzionamento e ad altri fattori rispetto ad altri modelli. Tuttavia, ciò è giustificato dalla loro maggiore precisione, a differenza dei loro concorrenti.

I migliori articoli sull'argomento