Codifica Manchester: che cos’è e perché usarla?

Codifica Manchester: che cos’è e perché usarla?

La codifica di Manchester, un modo semplice ed efficace per migliorare la comunicazione digitale ad alta velocità o wireless.

Probabilmente hai notato che la comunicazione digitale seriale è diventata piuttosto popolare. Ci sono molti gusti: tra le interfacce standard a livello di scheda abbiamo UART , SPI e I2C. La comunicazione “digitale” può anche essere realizzata mediante segnali analogici; un esempio è un collegamento dati RF che utilizza le modifiche dell’ampiezza, della frequenza o della fase per trasferire in modalità wireless dati binari. E poi ci sono interfacce differenziali ad alta velocità , come i collegamenti di comunicazione seriale basati su LVDS o USB.

La codifica Manchester è una tecnica di modulazione dati che può essere utilizzata in molte situazioni ma che è particolarmente utile nel trasferimento di dati binari basato su segnali analogici, RF, ottici, digitali ad alta velocità o segnali digitali a lunga distanza.

Lo standard di codifica Ethernet utilizza la codifica Manchester.

Buono, ma non perfetto

Nonostante i vantaggi travolgenti della comunicazione digitale standard rispetto alla segnalazione analogica, esistono alcune limitazioni generali. Uno è il problema della sincronizzazione: il ricevitore deve sapere esattamente quando campionare i dati in arrivo (si noti che questa sincronizzazione non è necessaria in, per esempio, una trasmissione audio analogica – il segnale audio demodulato può essere consegnato all’altoparlante senza interpretazione esplicita di dati sul lato ricevitore).

Un altro è la necessità dell’accoppiamento DC. I dati digitali possono includere sequenze lunghe e ininterrotte di uno o di zeri, e quindi un segnale digitale standard utilizzato per trasmettere questi dati rimarrà alla stessa tensione per un periodo di tempo relativamente lungo. Se tentassimo di accoppiare questo segnale usando un condensatore di blocco avremmo problemi, come mostrato nei seguenti diagrammi Ltspice.

Per prima cosa il decadimento DC decade a zero, quindi tutto è a posto finchè il segnale è in transizione. Ma quando una lunga sequenza di uno o zero causa l’interruzione della transizione del segnale originale, il segnale digitale diventa una tensione costante che viene bloccata dal condensatore.

Una soluzione

La codifica di Manchester offre un rimedio a queste due limitazioni. È un semplice schema di modulazione digitale che fa due cose:

  1. assicura che il segnale non resti mai a livello logico basso o logico alto per un lungo periodo di tempo

  2. converte il segnale di dati in un segnale dati più sincronizzazione.

Prima di entrare nei dettagli della codifica di Manchester, discutiamo la motivazione: perché non aggiungere semplicemente un segnale di clock separato per la sincronizzazione? E perché dovremmo accoppiare in ac un segnale digitale?

Clock da evitare

In molti casi, è perfettamente accettabile utilizzare un segnale di clock separato per ottenere la sincronizzazione tra trasmettitore e ricevitore. Ma a volte questo approccio è indesiderabile, come quando è necessario ridurre al minimo il numero di interconnessioni tra le parti di un sistema, o quando la miniaturizzazione richiede il microcontrollore con un basso numero di pin che in qualche modo possa fornire la funzionalità richiesta.

In altre situazioni, un segnale di clock separato non è praticabile. Ad esempio, sarebbe altamente inefficiente includere due trasmettitori e ricevitori RF separati (ad esempio, uno per i dati e uno per il clock) in un complesso collegamento dati wireless.

Se si ha familiarità con l’interfaccia UART, si sa che è possibile utilizzare i segnali di temporizzazione interni anziché un clok esterno condiviso dal trasmettitore e dal ricevitore. Ma questa strategia apporta limiti significativi:

  • Non è robusto contro le variazioni di frequenza dell’orologio interno, che diventano più problematiche quando il trasmettitore e il ricevitore si trovano in ambienti diversi.

  • Manca di flessibilità perché richiede che i dispositivi Tx e Rx siano esplicitamente preconfigurati per la stessa velocità di trasmissione dati.

  • Generalmente il ricevitore richiede una frequenza di clock interna significativamente più alta della velocità di trasmissione dati, e ciò potrebbe porre delle fastidiose restrizioni sulla velocità massima alla quale i dati possono essere trasferiti.

Evitare il collegamento DC

Con sistemi complessi, specialmente quelli che comportano alte tensioni, non è sempre facile garantire che la tensione di modo comune di un segnale trasmesso sia compatibile con il range di modo comune accettabile del ricevitore. Questo è un problema anche quando si utilizza uno standard differenziale come RS-485 . Un’altra preoccupazione sono le correnti in caso di guasto: l’accoppiamento diretto non offre alcuna protezione contro le correnti risultanti da un cortocircuito.

Pertanto, l’accoppiamento AC è un modo semplice per mitigare gli inconvenienti e i rischi .

La soluzione di Manchester

L’idea alla base della codifica di Manchester è la seguente: possiamo usare le transizioni di tensione , invece dei livelli di tensione , per rappresentare uno e zero. Si consideri il seguente diagramma:

Nella parte superiore del diagramma abbiamo un’interfaccia digitale standard composta da un segnale di dati e un segnale di clock.

Nella parte inferiore del diagramma c’è un segnale codificato da Manchester per gli stessi dati.

Si noti come le transizioni si verificano nel mezzo degli stati logici del segnale dati standard (in altre parole, la transizione di Manchester è allineata con il bordo del clock che verrebbe utilizzato per campionare i dati).

Si noti inoltre che un bit alto corrisponde sempre ad una transizione da alto a basso e un bit basso corrisponde sempre ad una transizione da basso ad alto. (Si potrebbe anche usare il contrario, l’importante è che i circuiti del ricevitore sappiano quale formato aspettarsi).

Risulta immediatamente chiaro che il problema dell’accoppiamento AC viene eliminato: ogni bit richiede una transizione e pertanto il segnale dati non resterà mai a livello logico basso o logico alto per un lungo periodo di tempo. Questo è evidente nel seguente diagramma, che mostra un segnale digitale standard 111111 binari e un segnale codificato da Manchester per la stessa sequenza binaria, per praticità è stato omesso il segnale di clock in quanto non rilevante per il disegno.

Il problema di sincronizzazione è un po ‘meno semplice perché abbiamo ancora bisogno di estrarre in qualche modo il clock dal segnale; tuttavia, possiamo intuitivamente vedere che la regolarità delle transizioni fornisce informazioni su quando il segnale dei dati deve essere campionato.

Il diagramma precedente mostra anche uno svantaggio non banale della codifica di Manchester: la velocità di trasmissione dei dati è dimezzata rispetto alla larghezza di banda del segnale dati. Un segnale codificato da Manchester richiede una transizione per ogni bit, il che significa che due stati logici di Manchester vengono utilizzati per trasmettere uno stato logico standard. Pertanto, per trasferire i dati alla stessa velocità è necessario il doppio della larghezza di banda.

Questo potrebbe non sembrare un problema, perché non usare solo un segnale a frequenza più alta? Bene, se la larghezza di banda del segnale è il fattore limitante della velocità con cui i dati possono essere spostati dal trasmettitore al ricevitore e se si è già alla massima velocità di trasmissione dati, non è possibile aumentare la frequenza del segnale di un fattore due; invece, è necessario ridurre la velocità dati di un fattore due.

Come generare dati codificati da Manchester in hardware e firmware

La codifica Manchester è una forma di modulazione , ma non preoccuparti, è molto più semplice delle tecniche RF che sono più comunemente associate a questa parola. Questo schema di modulazione richiede solo dati digitali, il corrispondente segnale di clock e un po ‘di hardware o firmware. Le differenze tra i dati modulati e i dati originali sono le seguenti:

  • I dati sono rappresentati utilizzando transizioni a livello logico piuttosto che livelli logici.
  • Il segnale di clock non deve essere inviato al ricevitore perché è incorporato nel flusso di dati modulato.

Oltre a eliminare la necessità di un segnale di clock trasmesso, la codifica Manchester rende possibile l’uso dell’accoppiamento AC, poiché il segnale modulato non rimane a livello logico alto o basso per un lungo periodo di tempo. Un importante svantaggio della codifica Manchester è la velocità dati ridotta: poiché gli uni e gli zeri sono rappresentati utilizzando le transizioni invece dei livelli logici, uno stato logico nel segnale originale si trasforma in due stati logici nel segnale di Manchester.

Manchester via Hardware

In teoria, è estremamente facile generare un flusso di dati codificato da Manchester tramite hardware. A differenza del circuito analogico progettato con cura o dei potenti processori di segnale digitale utilizzati per le tecniche avanzate di modulazione RF, la codifica Manchester richiede solo un gate XOR.

Puoi facilmente verificarlo osservando il diagramma temporale mostrato sopra: quando clock e dati sono allo stesso livello logico, il segnale di Manchester è basso; quando sono a livelli logici diversi, il segnale di Manchester è alto.

La ragione per cui questa è un’implementazione più “teorica” è perché l’uscita del gate XOR sarà soggetta a transizioni spurie, dette anche glitch. Questo è un problema non banale perché la codifica di Manchester riguarda esclusivamente le transizioni. Queste transizioni spurie si verificano perché il gate XOR è un dispositivo molto semplice. Tutto ciò che fa è confrontare due input e generare un output in base alla tabella di verità XOR. Se i segnali di clock e dati non sono perfettamente allineati (e non è mai una buona idea aspettarsi la perfezione), uno passerà prima dell’altro, e il gate XOR è abbastanza veloce da aggiornare il suo output basandosi su questa combinazione transitoria (ed errata) di i due segnali di ingresso.

Non penso che l’approccio drastico dello XOR sia inutile. Se si riesce a garantire un’ottima sincronizzazione tra i dati e i segnali di clock, come quando i due segnali sono generati e XORizzati all’interno di un FPGA, potrebbe probabilmente funzionare abbastanza bene. Inoltre, l’effetto della sincronizzazione imperfetta è meno significativo quando il periodo di dati è molto lungo rispetto alla durata del glitch, poiché le transizioni spurie (a frequenza più alta) possono essere filtrate prima che i dati di Manchester vengano interpretati dal ricevitore.

Per quanto ne so, questo problema tecnico non può essere risolto semplicemente aggiungendo una porta qui o un flip-flop lì. Le ricerche su Internet non producono molte informazioni, probabilmente perché oggigiorno è molto più comune generare i dati di Manchester nel firmware (vedere la sezione successiva). Tuttavia, sembra che Harris A. Quesnell Jr. fosse determinato a generare dati di Manchester privi di errori senza l’ausilio del firmware, e puoi leggere il suo circuito nella documentazione del brevetto.

Questo è lo schema riportato nel brevetto.

Come ho detto, non è il genere di cose che puoi ottenere aggiungendo un paio di porte o un flip-flop. Apprezzo le soluzioni hardware, ma in questo caso, consiglio di affrontare il problema Manchester in firmware.

Manchester tramite firmware

Un’implementazione del firmware elimina le transizioni spurie perché i dati originali vengono convertiti in una sequenza Manchester di uno e zero prima che diventi un normale segnale elettrico. Tutto quello che devi fare è guidare questa sequenza di uni e zeri su un pin GPIO, e il gioco è fatto. In questo caso, i vantaggi rispetto all’implementazione hardware sono piuttosto significativi. La maggior parte dei sistemi in questi giorni include già un processore in grado di gestire questa attività.

Non c’è molto da dire sui dettagli necessari per realizzare la codifica basata su firmware. Si prendono i dati originali e si sostituiscono ciascun uno o zero con una coppia uno-zero (ovvero una transizione del fronte di discesa) o una coppia zero-uno (cioè una transizione del fronte di salita). È quindi possibile inserire questi bit Manchester su un pin di uscita utilizzando una routine di servizio di interrupt associata a un timer in overflow in base alla velocità di trasmissione desiderata. Un’altra opzione è quella di utilizzare una delle periferiche di comunicazione seriale del processore.

Come decodificare i dati codificati da Manchester mediante l’hardware

Fin qui tutto bene, ma la codifica di Manchester avrà poco valore nel sistema di comunicazione se non riesci a convertire un segnale di Manchester in valori uno e zero.

Affettare dati

Un circuito che può tornare utile in qualsiasi ricevitore di Manchester è chiamato “data slicer”.

Sappiamo che la codifica Manchester è compatibile con l’accoppiamento AC e, quando viene utilizzato l’accoppiamento AC, il valore medio del segnale ricevuto sarà zero. Tuttavia, le caratteristiche logico-alto e logico-basso possono essere meno prevedibili, specialmente quando il segnale di Manchester è esposto a rumore o attenuazione significativi durante il suo viaggio dal trasmettitore al ricevitore.

Un affettatore di dati (lo so la traduzione in italiano del termine non è dei migliori, accetto suggerimenti), converte questa forma d’onda rumorosa / attenuata in una forma d’onda digitale pulita confrontando il segnale di Manchester con il valore medio del segnale; il valore medio viene estratto utilizzando un filtro passa-basso RC. Se il segnale in entrata è superiore al valore medio, il comparatore si satura alla tensione logica alta; se il segnale in entrata è inferiore al valore medio, si satura alla bassa tensione logica.

Come di solito accade con i circuiti di confronto, un’implementazione reale dovrebbe incorporare l’isteresi non disegnata nello schema di principio per semplificare la trattazione. Se si pianifica l’elaborazione dei dati di Manchester in un microcontrollore, è possibile scegliere un dispositivo con un modulo comparatore che incorpori l’isteresi programmabile. Questo sarebbe un modo conveniente per suddividere i dati in entrata e fornire la forma d’onda risultante direttamente al processore che convertirà il segnale Manchester ripulito in normali dati a livello logico.

Decodifica tramite hardware

Dopo il taglio dei dati, il ricevitore ha un segnale codificato da Manchester conforme ai livelli logici previsti e privo di quantità significative di rumore. Il prossimo compito è concettualmente semplice, ma non sempre così semplice nella vita reale: dobbiamo interpretare le transizioni positive e negative come uno e zero (o zeri e uno, a seconda di come hai codificato i dati).

È possibile eseguire questa operazione tramite hardware. Sono disposto a scommettere, tuttavia, che la maggior parte dei dispositivi basati su Manchester utilizzano il firmware per la decodifica. Le implementazioni hardware sono alquanto complesse e non possono competere con la flessibilità e le funzionalità avanzate che possono essere facilmente incorporate in un microcontrollore o processore di segnale digitale. Tuttavia, l’hardware è più veloce e non consuma risorse della CPU, quindi c’è sicuramente un valore nel perseguire una soluzione di decodifica basata, almeno in parte, sull’hardware.

Microchip

Ho trovato questo primo circuito in una app note di Microchip.

http://ww1.microchip.com/downloads/en/AppNotes/01470A.pdf

Non è destinato a essere una soluzione di decodifica autonoma; piuttosto, stanno presentando un approccio che può essere implementato usando l’hardware che hanno incorporato in alcuni dei loro recenti microcontrollori, vale a dire, le celle logiche configurabili (CLC) e un oscillatore a controllo numerico (NCO).

Diagramma tratto da Microchip.

Cypress

Il prossimo circuito è di Cypress e deve essere utilizzato con un dispositivo PSoC 1.

sempre da una app note della casa costruttrice

http://www.cypress.com/file/138821/download

Diagramma tratto da Cypress.

Entrambe queste implementazioni sono interessanti in quanto non recuperano i dati originali direttamente dalle transizioni di Manchester, nonostante il fatto che la codifica di Manchester sia basata sulle transizioni. Piuttosto, sfruttano il fatto che il livello logico originale è sempre presente poco prima della transizione. Ciò sarà più chiaro se diamo un’occhiata al solito diagramma temporale di Manchester:

Diciamo che il bordo attivo del clock è il fronte di salita. Se il segnale dati è basso sul fronte di salita del clock, il segnale di Manchester effettua una transizione da basso ad alto per rappresentare la logica bassa. Se il segnale dati è alto sul fronte di salita dell’orologio, il segnale di Manchester effettua una transizione da alto a basso. Il segnale di Manchester ha transizioni sempre quando il clock ha un fronte di salita.

Inoltre, il segnale di Manchester deve prepararsi a questa transizione spostando, se necessario, lo stato che gli consente di effettuare la transizione richiesta. Se il segnale di Manchester deve effettuare una transizione da basso ad alto (corrispondente a un basso logico), deve essere logico basso prima di effettuare questa transizione. Se deve effettuare una transizione da alto a basso (corrispondente alla logica alta), deve essere logico prima di effettuare la transizione. Pertanto, il livello logico del segnale di Manchester immediatamente prima della transizione è uguale al livello logico dei dati originali.

Sia l’approccio di Cypress che quello di Microchip incorporano un ritardo che fa sì che il circuito campiona il segnale di Manchester dopo che sono trascorsi tre quarti del periodo di bit. Questo tempismo si basa sul fatto che il segnale di Manchester potrebbe dover passare a metà del periodo di bit (presupponendo che il periodo di bit inizi con il fronte di salita dell’orologio originale, come nei diagrammi sopra). Ritardando per tre quarti del periodo di bit, il circuito è garantito per campionare il segnale dopo la transizione del periodo del bit centrale e prima della transizione attiva.

Creare il ritardo appropriato è facile se il ricevitore conosce sempre il periodo di bit che verrà utilizzato dal trasmettitore, ma anche se non lo fosse, il ricevitore può recuperare il clock dal flusso di dati di Manchester. Puoi trovare più di quanto tu abbia mai voluto sapere sul recupero del clock di Manchester in questa tesi

http://digital.library.okstate.edu/etd/umi-okstate-1551.pdf

 

Silicon Labs

Se si vuole riflettere su un altro circuito decodificatore, la seguente implementazione (anch’essa basata sul concetto del periodo dei tre quarti del bit) è stata progettata da SiLabs per l’uso nei suoi microcontrollori che includono unità logiche configurabili (CLU).

https://www.silabs.com/documents/public/application-notes/AN921.pdf

Diagramma tratto da Silicon Labs.

Conclusione

Sicuramente questo articolo non avrà fugato tutti i dubbi ma, tramite i link presenti nell’articolo potrà essere approfondito l’argomento in ogni sua parte.

Continuando in una trattazione più approfondita i più avrebbero abbandonato la lettura, per quelli realmente interessati sarà una prima infarinatura per proseguire nella conoscenza di questo argomento. Per tutti gli altri sarà una nozione che non fa male conoscere senza però avere la necessità di approfondire ulteriormente l’argomento.

Amilcare

VOTO
2 commenti
  1. Amilcare
    Amilcare dice:

    Non ho mai pensato a tale ipotesi ma se viene usato attualmente per le trasmissioni LAN probabilmente il sistema usato di avere il livello originale guardando il livello appena prima della transizione che è lo stesso del segnale prima della codifica effettivamente funziona.
    Prometto che quanto prima approfondisco questo aspetto e riferisco.

    Approvazioni
  2. theremino dice:

    Articolo bellissimo !!!
    L’ho letto tutto d’un fiato e mi ha fatto capire quasi tutto in cinque minuti.
    Mi resta un dubbio però. Ho cercato un po’ in internet e non sono riuscito a risolverlo:
    1) Ho visto l’immagine con il segnale sempre a uno che è una onda quadra alla frequenza del clock.
    2) Ho cercato in Internet una immagine con il segnale sempre a zero e non l’ho trovata.
    3) Da quel che ho capito se il segnale è sempre a zero dovrebbe venir fuori una onda quadra uguale a quella che si ottiene con il segnale sempre a uno. Per cui come si farebbe poi a distinguere i due segnali?

    Approvazioni

Lascia un Commento

Vuoi partecipare alla discussione?
Fornisci il tuo contributo!

Lascia un commento