Come evitare interferenze nella comunicazione wireless?


12

Sto lavorando al sistema di comunicazione wireless. Stiamo usando circa 10 coppie di trasmettitori e ricevitori. Stiamo usando il microcontrollore atmega16 per codificare e decodificare tramite le porte USART.

Ora siamo in grado di trasmettere i dati e ricevere lo stesso nell'estremità del ricevitore, ma c'è un grosso problema quando troviamo i 2 dati del trasmettitore che arrivano contemporaneamente. Il ricevitore non è in grado di ottenerlo a causa di interferenze.

Supponiamo che un trasmettitore invii "SENDA" mentre un altro trasmettitore invia "GETTS", in quel momento il ricevitore non può ricevere i dati corretti. Poiché tutti i trasmettitori e i ricevitori funzionano con la stessa frequenza, anche questa interferenza si sta verificando. Come posso risolvere questo problema?


4
Che tipo di circuità radio si trova tra il tuo UART e l'antenna?
jpc,

Risposte:


14

Lo sviluppo di un protocollo di comunicazione RF praticabile può essere un esercizio difficile ma educativo. Alcuni punti aggiuntivi da considerare oltre a quanto detto:

  1. Su alcuni hardware radio, è necessaria molta potenza per ascoltare un segnale. Con molte se non la maggior parte delle radio di piccole dimensioni, l'ascolto per un secondo richiederà più energia rispetto alla trasmissione per un millisecondo; su alcune radio, l'ascolto per un millisecondo può richiedere più energia rispetto alla trasmissione per un millisecondo. Se il consumo attuale non è un problema, l'ascolto continuo è molto più semplice dell'ascolto intermittente; se il consumo attuale è un problema, tuttavia, potrebbe essere necessario ascoltare in modo intermittente. Probabilmente non è una buona idea fino a quando non sei riuscito a ottenere qualcosa con un protocollo di ascolto continuo.
  2. L'ascolto prima della trasmissione può essere "educato", ma non è affatto utile in RF come ad esempio un cavo Ethernet. La segnalazione Ethernet è progettata in modo tale che non solo sia probabile che un dispositivo che ascolta prima della trasmissione di solito eviti una collisione, ma è anche progettato in modo tale che un dispositivo la cui trasmissione si scontra con quella di un altro dispositivo sia praticamente garantito da notare. La trasmissione RF non offre tale promessa. È del tutto possibile che quando P vuole trasmettere a Q, qualche altro dispositivo X che è più vicino a Q che a P trasmetterà abbastanza forte da impedire a Q di sentire la trasmissione di P, ma non abbastanza forte da essere notato da P. L'unico modo in cui P saprà che Q potrebbe non aver ricevuto la sua trasmissione è dal fatto che P non sentirà una risposta da Q.
  3. È importante fare attenzione al problema del consenso, molto più con RF che con la segnalazione via cavo. Se una P invia a Q, è possibile che Q ascolti la trasmissione di P e invii un riconoscimento, ma P per vari motivi non sentirà quel riconoscimento. È quindi necessario stare molto attenti a distinguere le ritrasmissioni dalle "nuove" trasmissioni.

    Il problema del consenso può essere particolarmente fastidioso se si cerca di risparmiare energia spegnendo i ricevitori quando non sono necessari. Supponiamo che due P e Q debbano comunicare una volta ogni 10 secondi, quindi si accendono e P invia a Q un pacchetto. Q riceve il pacchetto, invia il suo riconoscimento e - sapendo che P non invierà nulla per quasi dieci secondi, si spegne. Se P non riceve il riconoscimento di Q, lo ritrasmette; poiché Q dorme, tuttavia, non sentirà la ritrasmissione di P. Dal punto di vista di Q, questo non avrebbe importanza (ha già ricevuto i suoi dati), ma significa non importa quante volte P riprova, non avrà modo di sapere che Q ha ottenuto il suo pacchetto (almeno non fino al prossimo appuntamento in circa dieci secondi).

  4. È del tutto possibile avere una situazione in cui il nodo Q sarà in grado di ricevere trasmissioni da P, ma P non sarà in grado di ricevere trasmissioni da Q. Potrebbe non essere possibile comunicare utilmente in tali scenari, ma si dovrebbe almeno tentare per evitare di fare qualcosa di odioso (come avere P riprovare all'infinito una trasmissione di centinaia di tentativi al secondo)

Come detto, un protocollo di comunicazione RF praticabile può essere un esercizio difficile. Tuttavia, mi aspetto che probabilmente imparerai molto dall'esperienza.


8

Se non stai utilizzando un protocollo standard per questo, dovrai progettarne e implementarne uno, ad esempio un semplice esempio:

  • prima di trasmettere, un nodo dovrebbe ascoltare per verificare che il canale sia libero
  • se dopo la trasmissione di un messaggio non viene ricevuto alcun riconoscimento, il nodo dovrebbe attendere un periodo di tempo casuale e quindi riprovare, fino a un numero massimo di tentativi

Quindi quello che succede è che prima provi a evitare "jamming" ascoltando prima, quindi se si verifica ancora un jam lo rilevi attraverso una mancanza di riconoscimento dal nodo ricevente e poi riprovi dopo un ritardo casuale - i due trasmettitori jamming utilizzare diversi ritardi casuali, riducendo al minimo la possibilità di una seconda collisione.


2
Una grande limitazione della prevenzione delle collisioni è che non vi è alcuna garanzia che i futuri trasmettitori si trovino entro il raggio di ricezione dell'altro, anche se entrambi sono nel raggio di ricezione del loro obiettivo previsto.
supercat

1
La prevenzione delle collisioni fornisce solo alcuni miglioramenti nell'utilizzo del canale. Devi ancora fare riconoscimenti e ritrasmissioni. La chiave è aspettare un tempo casuale prima di ritrasmettere.
David Schwartz,

La cosa più importante è che questo funziona in tempo reale ed è anche un modo di comunicazione. quindi se lo facciamo in 2 modi allora farà più interferenza. :(
user934070,

OK - non sarà mai robusto o affidabile allora - puoi ascoltare prima di trasmettere ma a parte il fatto che non avrai mai alcuna garanzia che una trasmissione sia stata effettivamente ricevuta.
Paolo R,

4

Ecco due opzioni comuni

1) Implementare un algoritmo Listen Before Talk (LBT), che controlla se è in corso una trasmissione prima di iniziare la propria e, in tal caso, si arresta per un periodo di tempo. Il periodo deve contenere una lunghezza fissa e una lunghezza casuale in modo che non si arrestino tutti per lo stesso periodo. Molti protocolli radio standard includono questa procedura, vedere ETSI EN 300-220-1.

2) Implementare un sistema beacon in cui le trasmissioni sono temporizzate dal beacon. Ogni trasmettitore ha il proprio slot di temporizzazione. Normalmente useresti i numeri di serie nei dispositivi per determinare il loro slot e avresti un sistema per determinare chi invia il beacon. Poiché ciò si basa su tutti i trasmettitori che hanno uno slot diverso, non è una buona idea lasciarlo all'utente per identificare in modo univoco tutti i trasmettitori, a meno che non si abbia una solida procedura per questo.


A parte questo, penso che la seconda parte potrebbe trarre vantaggio dal CDMA se sanno che la maggior parte delle stazioni normalmente non dovranno trasmettere.
Kortuk,

1
@Kortuk: ho avuto l'impressione che uno dei vantaggi di CDMA sia che, se il ricevitore può essere sincronizzato con il mittente, il numero di errori di bit aumenterà all'aumentare del numero di trasmettitori simultanei, ma altrimenti lì non è "inceppamento" in quanto tale.
supercat

@supercat, ho l'impressione che tutti stiano assegnando casualmente intervalli di tempo. La maggior parte dei trasmettitori parla solo occasionalmente, quindi la possibilità di parlare in due contemporaneamente è molto piccola, ma a volte succede e si presenta come un piccolo numero di errori di bit in quel punto. Con l'interlacciamento e l'ECC generale puoi quasi ignorarlo. Detto questo, ognuno ha intervalli di tempo predeterminati basati su un generatore di numeri casuali per garantire che due trasmettitori non condividano costantemente lo stesso spazio e si incontrino solo occasionalmente. Posso chiedere a qualcuno che lo sa per certo e farli suonare.
Kortuk,

1
@Kortuk: questo era quello che pensavo intendesse CDMA, ma un certo numero di fonti, inclusa la pagina di Wikipedia, suggeriscono che si riferisce alla modulazione a una velocità superiore alla velocità in bit; se il trasmettitore inverte il suo segnale secondo un flusso di bit pseudo-casuale e il ricevitore fa lo stesso e quindi filtra il segnale risultante, il segnale originale può essere recuperato. Gli approcci basati sulla fascia temporale pseudo-casuale sono utili, ma non credo che CDMA sia il termine giusto. La maggiore difficoltà con tali approcci è il coordinamento. Vorrei davvero che ci fosse un segnale orario ad alta risoluzione ampiamente disponibile.
supercat

1
@Kortuk: WWV in qualche modo funziona per sincronizzare orologi digitali e orologi, ma ci vuole un minuto per inviare un segnale orario. Sarebbe molto più bello se ci fossero trasmissioni temporali ampiamente diffuse che potevano essere lette in 10 ms o meno e che era garantito che rientrassero in una certa piccola tolleranza del tempo della WWV in Colorado (il che significa che in una posizione a 1.000 miglia di distanza la trasmissione locale le trasmissioni temporali dovrebbero effettivamente condurre il WWV di circa 5ms).
supercat

3

Come capisco dai commenti, ecc., La potenza non è un problema, ma la velocità di comunicazione lo è. Quindi, ecco il mio suggerimento per un protocollo.

Numero di tutti i nodi, 0..n-1. Fai sapere a ciascun nodo quale numero è. Il nodo 0 sarà il master.

Ogni 15 ms, il nodo 0 invia un messaggio: "0HELO".
1ms dopo, il nodo 1 invia un messaggio: "1DATA".
1ms dopo, il nodo 2 invia un messaggio: "2NICE".
1 ms più tardi, il nodo 3 invia un messaggio: "3". (Questo nodo non ha nulla da dire)
1ms dopo, il nodo 4 invia un messaggio: "2CATS".
...
1ms dopo, il nodo 9 invia un messaggio: "9MICE".
Quindi c'è una pausa di 5ms.

I nodi inviano sempre i loro messaggi nelle loro fasce orarie corrette, anche se non hanno nulla da dire. In questo modo ti viene garantita una velocità di comunicazione di 66Hz, senza collisioni.


2

La comunicazione RF con più trasmettitori asincroni è un problema difficile. Un sacco di pensiero e ingegneria sono andati negli standard 802.11 e 802.15 per aggirare questi problemi. Se è necessario chiedere qui, è necessario attenersi all'hardware standard che implementa uno di questi standard.

Si noti che sebbene entrambi siano utili e rappresentino una progettazione accurata, in genere qualsiasi applicazione reale dovrà comunque implementare uno stack di protocollo al di sopra di questi standard. Questo sarebbe WiFi e TCP sopra 802.11 e Zigbee o Wichi di Microchip o alcuni altri sopra 802.15.

Ancora una volta, progettare una rete radio multi-point è fuori dalla tua portata se stai ponendo queste domande di base qui. Trascorrerai molto tempo e le cose non funzioneranno sempre bene.

La scelta tra 802.11 e 802.15 dipende principalmente dalla larghezza di banda, dai requisiti di portata e dalla potenza disponibile. 802.15 è più piccolo, potenza inferiore, larghezza di banda inferiore e portata ridotta. Con il giusto software di livello superiore, un dispositivo 802.15 può funzionare a lungo con le batterie, mentre ciò non è generalmente vero per 802.11.


2
Tutto dipende dall'applicazione. È davvero piuttosto difficile ma allo stesso tempo si può imparare molto dall'esercizio. E le cose che imparerà sono le leggi universali e non alcuni dettagli specifici di implementazione.
jpc,

9
"way out of your league" è un po 'duro. Sono in qualche modo sopra la testa e ho visto persone in questo tipo di posizione sprecare un anno su questo tipo di problema ... ma ciò non significa che non possano prendere consigli e farlo funzionare. Come diceva jpc, il successo qui potrebbe significare un salto significativo nella comprensione. Se fossero un mio dipendente con questa domanda (e potessi permettermi il tempo per la lezione) li spingerei avanti e spero che imparino qualcosa.
darron,

3
È un disservizio quando le persone vengono su questo sito in cerca di risposte per conoscere e risolvere un problema e lasciare costretti (con voti positivi) a una soluzione che non stavano chiedendo o che non possono usare.
Gioele B,

1
Le valutazioni @JoelB non impongono l'accettazione di una risposta.
Chris Stratton,

1

Concordo con l'ascolto prima di parlare e il sistema di segnalazione. Ma se si desidera utilizzare un singolo canale per trasmettere i dati contemporaneamente, è possibile utilizzare la tecnica di modulazione dello spettro di diffusione a sequenza diretta (DSSS). Questo potrebbe aiutarti a evitare interferenze.

Ma per questo potrebbe essere necessario acquistare un chip che lo implementa, ad esempio Xbee (basato su Zigbee). Se non riesci a cambiare il trasmettitore, dovresti attenersi alle altre risposte.


Grazie mille per i suggerimenti. Ma in realtà il nostro problema principale è che il nostro sistema funziona in tempo reale, quindi quando e da dove riceveremo un segnale è totalmente imprevedibile. Lascia che lo spieghi più in dettaglio. in realtà tutti i trasmettitori e i ricevitori sono posizionati all'interno della loro portata, cioè supponiamo che la loro portata sia di 100 metri, quindi tutti sono presenti all'interno di 50 metri, quindi qualsiasi segnale proveniente da un trasmettitore può raggiungere ogni nodo e di nuovo qualsiasi segnale può arrivare in qualsiasi momento. quindi come possiamo risolvere questo ,, ..
user934070

@ User934070 I sistemi di telefonia cellulare e il wifi utilizzano in genere uno spettro diffuso di qualche tipo o almeno tecnologie che seguono gli stessi concetti di base. Telefoni cellulari e laptop sono proprio come descrivi "quando e da dove riceveremo un segnale è totalmente imprevedibile"
Kellenjb,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.