Progetti di riferimento dischi encoder

Dischi assoluti con risoluzione non potenza di due: codici Gray ciclici per 360 e 1000 posizioni

Dischi assoluti con risoluzione non potenza di due: codici Gray ciclici per 360 e 1000 posizioni

Per 360 o 1000 posizioni assolute con un solo bit che cambia tra l’ultimo e il primo codice, si prende il tratto centrale simmetrico del codice Gray riflesso e si tolgono (2ⁿ − M)/2 codici a ciascuna estremità. Questo articolo ricava simmetria, formule di troncamento e di decodifica, spiega perché un numero dispari di posizioni è impossibile e fornisce numero di tracce, larghezza dell’elemento, tabella di decodifica e verifiche di layout per 360 e 1000 posizioni.

Tavole divisorie, attuatori per valvole e strumenti con visualizzazione decimale richiedono spesso 360 (1° per posizione) o 1000 posizioni assolute per giro. Il numero di bit del codice Gray dà 2ⁿ codici per giro, e né 360 né 1000 sono potenze di 2. La soluzione più diretta è prendere i primi 360 codici di un codice Gray a 9 bit, ma il primo codice G(0) = 000000000 e l’ultimo G(359) = 111010100 differiscono per 5 bit; se al passaggio della giunzione i bit commutano in ordine leggermente diverso, si può leggere un codice intermedio lontano dalla posizione reale. L’articolo fornisce una costruzione in cui anche primo e ultimo codice differiscono per un solo bit, la formula di decodifica e i punti a cui fare attenzione nel layout.

512 codici del codice Gray riflesso a 9 bit; 76 tolti a ciascuna estremità, conservati gli indici 76…435; al passaggio della giunzione 359 → 0 cambia solo l’MSB b8; in rosso il bit che cambia a ogni passo.
Figura 1 – 512 codici del codice Gray riflesso a 9 bit; 76 tolti a ciascuna estremità, conservati gli indici 76…435; al passaggio della giunzione 359 → 0 cambia solo l’MSB b8; in rosso il bit che cambia a ogni passo.

Simmetria del codice Gray riflesso

Il codice Gray riflesso a n bit è G(i) = i XOR (i » 1), i = 0…2ⁿ − 1. Si sostituisce i con la sua immagine speculare i′ = 2ⁿ − 1 − i, cioè il complemento bit a bit degli n bit di i:

i′ = i XOR (2ⁿ − 1), i′ » 1 = (i » 1) XOR (2^(n−1) − 1)

Facendo lo XOR delle due espressioni si ottiene

G(2ⁿ − 1 − i) = G(i) XOR 2^(n−1)

Cioè due codici simmetrici rispetto al punto centrale differiscono solo nell’MSB. Da qui viene la parola “riflesso”: nella seconda metà gli n − 1 bit inferiori rispecchiano la prima metà e l’MSB passa da 0 a 1.

Condizione di troncamento e decodifica

Per ottenere un codice ciclico con M posizioni si conservano gli indici centrali i = s … 2ⁿ − 1 − s, togliendo a ciascuna estremità

s = (2ⁿ − M) / 2

codici. Il primo codice del tratto G(s) e l’ultimo G(2ⁿ − 1 − s) sono esattamente una coppia speculare e differiscono solo nell’MSB, quindi anche la chiusura dall’ultimo al primo cambia un solo bit; all’interno del tratto ogni passo cambia già un solo bit. Il numero di bit è n = ⌈log₂M⌉; s deve essere intero, quindi M deve essere pari.

La decodifica avviene in due passi: prima conversione da Gray a binario, b(n−1) = g(n−1), b(k) = b(k+1) XOR g(k); poi sottrazione dell’offset, p = B − s. Se B < s oppure B > 2ⁿ − 1 − s, è stato letto un codice tolto, che si può segnalare direttamente come errore di lettura. Se lo zero meccanico va posto altrove, si somma una costante modulo M.

Il troncamento simmetrico non è l’unico taglio possibile. Esplorando il codice a 9 bit da ogni punto di partenza si trovano 4 tratti contigui di lunghezza 360 con primo e ultimo codice che differiscono per un bit, con inizio a 76, 204, 332 e 460; gli ultimi tre attraversano la giunzione 511 → 0, quindi la decodifica richiede un’operazione modulo in più. Il tratto simmetrico ha valori binari contigui e si decodifica con una sola sottrazione, ed è il più comodo.

Perché un numero dispari di posizioni è impossibile

Si considerano i codici a n bit come vertici di un cubo n-dimensionale; “cambiare un solo bit” è un passo lungo uno spigolo, e ogni passo inverte la parità del numero di bit a 1 nella parola di codice. Dopo un ciclo completo di ritorno all’inizio la parità deve essere ripristinata, quindi il numero di passi, cioè il numero di posizioni M, deve essere pari. La conclusione non dipende dalla costruzione: nessun codice ciclico che cambia un bit per passo può avere un numero dispari di posizioni.

Quando serve un numero dispari di posizioni (per esempio 125) ci sono due strade: realizzare un codice ciclico con 2M posizioni e dividere per 2 in uscita (per 125 posizioni, un tratto di 250 di un codice a 8 bit con s = 3); oppure ammettere che alla giunzione cambino due bit insieme e garantire la lettura con la sincronizzazione con la traccia incrementale, il che richiede un’analisi aggiuntiva della tolleranza di lettura alla giunzione.

Parametri per 360 e 1000 posizioni

Voce360 posizioni1000 posizioni
Numero di tracce n910
Offset s7612
Indici conservati76…43512…1011
Angolo per posizione1°0,36° (21,6′)
Raggio LSB di esempio15 mm18 mm
Lunghezza d’arco dell’elemento 2πr/M261,8 μm113,1 μm
Larghezza della barra più fine (2 elementi)523,6 μm226,2 μm
Primo codice / ultimo codice001101010 / 1011010100000001010 / 1000001010
Quota di codici non validi152/512 = 29,7%24/1024 = 2,3%

Tabella di decodifica per 360 posizioni (estratto):

Posizione pIndice iParola di codice b8…b0Binario BB − 76
076001101010760
177001101011771
179255010000000255179
180256110000000256180
359435101101010435359

I pattern delle tracce sono mostrati in Figura 2. Dopo il troncamento il numero di transizioni di ogni traccia si riduce di conseguenza: per 360 posizioni b0 ne ha 180, b1 ne ha 90, e b8 è ancora chiaro per mezzo giro e scuro per l’altro mezzo.

Vista sviluppata delle 9 tracce del codice Gray troncato per 360 posizioni: a sinistra il giro completo, a destra un ingrandimento vicino alla giunzione; alla giunzione cambia solo b8, e il segmento trasparente di b4 che la attraversa è largo solo 8 posizioni.
Figura 2 – Vista sviluppata delle 9 tracce del codice Gray troncato per 360 posizioni: a sinistra il giro completo, a destra un ingrandimento vicino alla giunzione; alla giunzione cambia solo b8, e il segmento trasparente di b4 che la attraversa è largo solo 8 posizioni.

Due punti a cui fare attenzione nel layout

Larghezze irregolari delle barre alla giunzione. Dopo il troncamento il segmento di ogni traccia che attraversa la giunzione è composto da due pezzi, uno dall’inizio e uno dalla fine del tratto, quindi la sua larghezza non è più il valore regolare di quella traccia. Per 360 posizioni la larghezza regolare delle barre di b4 è di 32 posizioni, ma il segmento trasparente che attraversa la giunzione è di sole 8 posizioni; anche b6 e b7 hanno segmenti irregolari di 232 e 104 posizioni. La larghezza linea minima resta determinata dai 2 elementi di b0, quindi la producibilità non ne risente, ma la verifica del layout e le regole AOI non possono essere scritte come “larghezza di barra fissa per traccia”: vanno confrontate con la tabella dei codici posizione per posizione sull’intero giro.

Rilevamento degli errori limitato tramite codici non validi. I codici tolti non compaiono mai nella lettura normale, quindi leggerne uno si può segnalare come errore. Ma per un singolo bit errato solo circa il 9,9% dei casi cade in un codice non valido a 360 posizioni, e solo circa l’1,4% a 1000 posizioni; un MSB errato trasforma il codice nel suo codice speculare, che è sempre valido e non può mai essere rilevato. Se serve una diagnostica del codice letto, è comunque necessario un controllo aggiuntivo.

Punti chiave di progettazione

  • Formula di troncamento: n = ⌈log₂M⌉, s = (2ⁿ − M)/2, conservare i = s…2ⁿ − 1 − s; per 360 posizioni s = 76, per 1000 posizioni s = 12.
  • La decodifica richiede solo la conversione da Gray a binario seguita dalla sottrazione di s; un valore binario fuori da s…2ⁿ − 1 − s si segnala come errore di lettura.
  • Non prendere semplicemente i primi M codici: per 360 posizioni primo e ultimo differiscono per 5 bit, e alla giunzione si può leggere un codice lontano dalla posizione reale.
  • Per un numero dispari di posizioni non esiste un codice ciclico a passo singolo; realizzare 2M posizioni e dividere per 2, oppure sincronizzare con la traccia incrementale alla giunzione.
  • Verificare il layout posizione per posizione rispetto alla tabella dei codici dell’intero giro, non con la “larghezza di barra fissa per traccia”: per 360 posizioni b4 ha alla giunzione un segmento largo solo 8 posizioni.
  • I codici tolti intercettano solo circa il 10% o meno degli errori su un singolo bit, e gli errori dell’MSB non vengono mai rilevati; la diagnostica richiede misure aggiuntive.

Sintesi

Nel codice Gray riflesso due codici simmetrici rispetto al punto centrale differiscono solo nell’MSB; prendendo il tratto centrale simmetrico si ottiene un codice Gray ciclico per qualsiasi numero pari di posizioni, e la decodifica richiede una sola sottrazione in più. Un numero dispari di posizioni non si può realizzare come codice ciclico a passo singolo a causa della parità. 360 e 1000 posizioni richiedono rispettivamente 9 e 10 tracce, e le larghezze irregolari delle barre alla giunzione vanno verificate in modo specifico nel layout.


Traduzione dell’articolo originale cinese (0303). ENC7 – produttore di dischi encoder (richiesta) · Articoli tecnici · https://enc7.com

© Langfang Jingzheng Optoelectronic Technology Co., Ltd. Tutti i diritti riservati. Articolo realizzato con l’assistenza dell’IA.

Have a drawing? Get an engineer's review.

Send your outer diameter, bore, line count or bit count, substrate and readhead wavelength. Our engineers check manufacturability and reply with a quotation and sample lead time.

WhatsApp