Tutorial: utilizzo moduli radio con PIC - Come comunicare

La comunicazione fra questi tipi di moduli radio non e' elementare e richiede qualche importante considerazione:

Ho gia' trattato due volte l'utilizzo di questi moduli in contesti diversi, legati a specifiche progettuali differenti.
Potete trovare qui queste trattazioni:

In questo articolo esporro' invece un modo piu' generale di utilizzare i moduli radio, un modo valido per un buon numero di diversi progetti.

Innanzitutto, se provassimo ad inviare al trasmettitore un segnale modulato in uno dei protocolli generalmente usati (tipo RS232), ci accorgeremmo che all'uscita del ricevitore il segnalesi presenterebbe terribilmente distorto ed inutilizzabile. Questo perche' la fascia di moduli radio utilizzati dispone di uno stadio di ingresso che richiede un segnale modulato in modo da avere molte transizioni di livello e componente continua minima.

Il motivo di questa caratteristica e' dovuto all'architettura interna del trasmettitore e del ricevitore, ed e' da attribuire principalmente alla necessita' di mantenereil prezzo piu' basso possibile. Moduli di fascia piu' alta non hanno questo problema.

Ad ogni modo, per assecondare questo problema, le scelte sono semplicemente tre: utilizzare il protocollo Manchester, una modulazione ASK-OOK o una modulazione FSK. Tutte queste alternative rispondono ai due requisiti appena esposti, ed ognuno ha i suoi pro e i suoi contro.

- Protocollo Manchester: il protocollo Manchester e' particolarmente indicato per questo tipo di trasmissione poiche' con questo tipo di codifica l'informazione trasmessa risiede nelle transizioni di livello del segnale piuttosto che nella temporizzazione dei suoi livelli logici. Ad esempio, se a meta' bit vi e' una transizione da alto a basso, il bit e' un "1" logico, se la transizione e' in senso opposto allora il bit e' uno "0" logico.

Di fatto questo e' il protocollo piu' utilizzato nei dispositivi che utilizzano commercialmente moduli radio di questo tipo.

Esempio tratto da Wikipedia: dato "11011000100" codificato in Manchester
Come si puo' osservare, il valore del bit e' dato da una transizione a meta' dello stesso.

Esistono numerose librerie che rendono facile implementare una modulazione Manchester, ed in ogni caso sarebbe semplice anche implementarla da zero in qualsiasi linguaggio. Purtroppo, nonostante il largo utilizzo, questa codifica presenta qualche problema nel nostro caso.

In primo luogo, l'aggancio del segnale ricevuto da parte del ricevitore e' difficoltoso; ma soprattutto il problema e' dato dal fatto del cosiddetto "tempo di attivazione".

Il tipo di ricevitori che stiamo usando (superrigenerativi), infatti, richiede un certo tempo per iniziare a ricevere correttamente il segnale. Questo significa che trasmettendo un pacchetto di dati, i primi bit potrebbero essere persi fino a quando il ricevitore non avra' agganciato completamente il segnale. Per evitare cio' si trasmette solitamente un "preambolo" formato da un'onda quadra pura, che ha lo scopo di "svegliare" il ricevitore, e solo successivamente si inviano i dati.

In definitiva, questo protocollo va utilizzato solamente su moduli radio con un tempo di aggancio molto breve. Solitamente i moduli radio di bassa fascia non rispondono a tali requisiti, ragion per cui e' necessario esplorare anche le altre possibilita' elencate in precedenza.

- Modulazione ASK OOK: la modulazione ASK ("Amplitude-shift keying") consiste nel variare l'ampiezza dell'onda portante a seconda del livello logico del bit da trasmettere. Quando i possibili livelli sono solo 2 ("1" e "0"), allora questa modulazione prende il nome di OOK ("On - off keying"). In questo caso, per trasmettere un 1 logico viene inviata l'onda portante alla sua ampiezza standard, per inviare invece uno "0" logico l'onda portante non viene inviata.

Per sfruttare questo tipo di modulazione nel nostro caso, il PIC del trasmettitore deve inviare al modulo radio trasmettitore un'onda quadra (ad una certa frequenza per un certo tempo) per trasmettere un "1", e non deve inviare niente (per lo stesso tempo) per inviare uno "0". La figura sottostante rappresenta il segnale NRZ che si vuole trasmettere, e sotto l'onda come il PIC dovrebbe inviarla al modulo trasmettitore.

(clicca sull'immagine per vederla più grande)

Qual'e' il punto di forza di questa tecnica? Essenzialmente, il fatto che il segnale cosi' ottenuto dispone di numerosissime transizioni di livello e di una componente continua minima, cosi' da giungere in uscita dal modulo ricevitore in modo quanto meno distorto possibile. Inoltre, la decodifica di un segnale del genere e' generalmente un'operazione semplice anche per MCU a bassa potenza.

La questione del "tempo di aggancio" permane comunque anche in questo caso, e sarebbe opportuno anche in questo caso prevedere un "preambolo" di attivazione prima dell'invio dei dati.

In seguito vedremo un esempio pratico di trasmissione utilizzando questo tipo di modulazione.

- Modulazione FSK: la modulazione FSK ("Frequency-shift keying") consiste nel variare la frequenza dell'onda portante a seconda del livello logico del bit da trasmettere. Nel nostro caso, questo è attuabile nello stesso modo della precedente modulazione: inviando al modulo trasmettitore, ad esempio, un'onda quadra a 3 kHz per indicare un "1", ed una a 1.5 kHz per indicare uno "0". Rispetto alla modulazione OOK, la presenza di segnale decodificabile anche per lo "0" logico comporta una maggiore immunita' dai disturbi ma una complicazione del sistema di decodifica che dovra' distinguere non solo la presenza di segnale, ma anche la frequenza dell'onda modulante in uscita dal modulo ricevitore.

Utilizzando questa modulazione si hanno comunque tutti i vantaggi della modulazione OOK (alto numero di transizioni e bassa componente continua). In definitiva e' consigliato l'utilizzo di questa modulazione quando la MCU delegata alla ricezione ha a disposizione una potenza necessaria alla decodifica (eventualmente sarebbe opportuna una MCU delegata alla decodifica) o quando l'ambiente e' fortemente disturbato, ad esempio dalla presenza di molti altri dispositivi che lavorino sulla stessa frequenza.

Per quanto riguarda le caratteristiche del segnale inviato, la frequenza utilizzata per la modulazione OOK o FSK deve rientrare nel range specificato dal datasheet dei moduli radio (solitamente non supera i 5 kHz) e il tempo di durata di un bit deve essere sufficientemente alto da poter essere individuato e interpretato con sicurezza, ma un tempo troppo alto allungherebbe eccessivamente i tempi totali di trasmissione. La frequenza scelta deve essere individuata in una via di mezzo a seconda delle specifiche progettuali.