Wie vermeide ich Störungen in der drahtlosen Kommunikation?

12

Ich arbeite an einem drahtlosen Kommunikationssystem. Wir verwenden ungefähr 10 Paare von Sendern und Empfängern. Wir verwenden atmega16 Mikrocontroller zum Kodieren und Dekodieren von USART-Ports.

Jetzt sind wir in der Lage, die Daten zu senden und auf der Empfängerseite zu empfangen, aber es gibt ein großes Problem, wenn wir feststellen, dass die 2 Senderdaten gleichzeitig kommen. Der Empfänger kann es aufgrund von Störungen nicht empfangen.

Angenommen, ein Sender sendet "SENDA", während ein anderer Sender "GETTS" sendet. Zu diesem Zeitpunkt kann der Empfänger keine korrekten Daten empfangen. Da alle Sender und Empfänger auf derselben Frequenz arbeiten, tritt diese Störung auf. Wie kann ich dieses Problem beheben?

user934070
quelle
4
Welche Art von Funkverbindung befindet sich zwischen Ihrem UART und der Antenne?
jpc

Antworten:

14

Die Entwicklung eines funktionsfähigen RF-Kommunikationsprotokolls ist eine schwierige, aber lehrreiche Aufgabe. Ein paar zusätzliche Punkte, die über das Gesagte hinausgehen sollten:

  1. Bei einigen Funkgeräten ist viel Energie erforderlich, um auf ein Signal zu warten. Bei vielen, wenn nicht den meisten kleinen Radios wird das Hören für eine Sekunde mehr Energie erfordern als das Senden für eine Millisekunde; Bei einigen Radios kann das Abhören einer Millisekunde mehr Energie erfordern als das Senden für eine Millisekunde. Wenn der Stromverbrauch kein Problem darstellt, ist kontinuierliches Hören viel einfacher als intermittierendes Hören. Wenn jedoch der Stromverbrauch ein Problem darstellt, muss möglicherweise zeitweise zugehört werden. Wahrscheinlich keine gute Idee, bis Sie es geschafft haben, mit einem Continuous-Listen-Protokoll etwas in Gang zu bringen.
  2. Das Abhören vor dem Senden mag "höflich" sein, aber es ist bei HF bei weitem nicht so nützlich wie beispielsweise bei einem Ethernet-Kabel. Die Ethernet-Signalisierung ist so konzipiert, dass ein Gerät, das vor dem Senden lauscht, in der Regel nicht nur eine Kollision vermeiden kann, sondern auch so konzipiert ist, dass ein Gerät, dessen Übertragung mit der eines anderen Geräts kollidiert, dies garantiert bemerkt. HF-Übertragung bietet kein solches Versprechen. Es ist durchaus möglich, dass, wenn P an Q senden möchte, ein anderes Gerät X, das näher an Q als an P ist, laut genug sendet, um zu verhindern, dass Q die Übertragung von P hört, aber nicht laut genug, damit P dies bemerkt. Die einzige Möglichkeit, wie P weiß, dass Q seine Übertragung möglicherweise nicht erhalten hat, ist die Tatsache, dass P keine Antwort von Q hört.
  3. Es ist wichtig, das Konsensproblem im Auge zu behalten - viel mehr bei HF als bei drahtgebundenen Signalen. Wenn ein P an Q sendet, ist es möglich, dass Q die Übertragung von P hört und eine Bestätigung sendet, aber P wird diese Bestätigung aus verschiedenen Gründen nicht hören. Es ist daher sehr vorsichtig zu sein, um Neuübertragungen von "neuen" Übertragungen zu unterscheiden.

    Das Konsensproblem kann besonders ärgerlich sein, wenn versucht wird, Energie zu sparen, indem Empfänger ausgeschaltet werden, wenn sie nicht benötigt werden. Angenommen, zwei P und Q sollen einmal alle 10 Sekunden kommunizieren, also schalten sie sich ein und P sendet Q ein Paket. Q empfängt das Paket, sendet seine Bestätigung und - in dem Wissen, dass P fast zehn Sekunden lang nichts sendet, schaltet es ab. Wenn P die Bestätigung von Q nicht erhält, sendet er erneut. da Q jedoch schläft, hört er die erneute Übertragung von P nicht. Aus Qs Sicht spielt das keine Rolle (er hat seine Daten bereits erhalten), aber es bedeutet, dass er unabhängig davon, wie oft P es wiederholt, nicht wissen kann, ob Q sein Paket erhalten hat (zumindest nicht bis zum nächsten Rendezvous in etwa zehn Sekunden).

  4. Es ist durchaus möglich, dass der Knoten Q Übertragungen von P empfangen kann, aber P Übertragungen von Q nicht empfangen kann. In solchen Szenarien ist es möglicherweise nicht möglich, sinnvoll zu kommunizieren, aber man sollte sich zumindest bemühen um zu vermeiden, dass etwas Unangenehmes getan wird (wie wenn P eine Übertragung endlos mit Hunderten von Wiederholungsversuchen pro Sekunde wiederholt)

Wie gesagt, ein funktionsfähiges RF-Kommunikationsprotokoll kann eine schwierige Aufgabe sein. Trotzdem würde ich erwarten, dass Sie wahrscheinlich viel aus dieser Erfahrung lernen werden.

Superkatze
quelle
8

Wenn Sie hierfür kein Standardprotokoll verwenden, müssen Sie eines entwerfen und implementieren, z. B. ein einfaches Beispiel:

  • Vor dem Senden sollte ein Knoten abhören, um zu überprüfen, ob der Kanal frei ist
  • Wenn nach dem Senden einer Nachricht keine Bestätigung empfangen wird, sollte der Knoten eine zufällige Zeitspanne warten und dann erneut versuchen, eine maximale Anzahl von Wiederholungsversuchen durchzuführen

Was also passiert, ist, dass Sie zuerst versuchen, ein "Stören" zu vermeiden, indem Sie zuerst zuhören. Wenn dann immer noch ein Stau auftritt, erkennen Sie dies durch eine fehlende Bestätigung vom empfangenden Knoten und versuchen es dann nach einer zufälligen Verzögerung erneut - die beiden störenden Sender werden es tun Verwenden Sie verschiedene zufällige Verzögerungen, um die Wahrscheinlichkeit einer zweiten Kollision zu minimieren.

Paul R
quelle
2
Eine wesentliche Einschränkung der Kollisionsvermeidung besteht darin, dass es keine Garantie dafür gibt, dass sich potenzielle Sender innerhalb der Empfangsreichweite voneinander befinden, auch wenn beide innerhalb der Empfangsreichweite ihres beabsichtigten Ziels liegen.
Supercat
1
Die Vermeidung von Kollisionen verbessert lediglich die Kanalauslastung. Sie müssen noch Bestätigungen und Neuübertragungen vornehmen. Der Schlüssel besteht darin, vor dem erneuten Senden eine zufällige Zeit zu warten.
David Schwartz
Das Wichtigste ist, dass dies in Echtzeit funktioniert und es sich auch um eine Einwegkommunikation handelt. Wenn wir es also in zwei Richtungen schaffen, wird es mehr Störungen verursachen. :(
user934070
OK - dann wird es niemals robust oder zuverlässig sein - Sie können vor dem Senden zuhören, aber abgesehen davon, dass Sie niemals die Garantie haben werden, dass eine Übertragung tatsächlich empfangen wurde.
Paul R
4

Hier sind zwei gebräuchliche Optionen

1) Implementieren Sie einen LBT-Algorithmus (Listen Before Talk), der prüft, ob gerade eine Übertragung stattfindet, bevor Sie Ihre eigene starten. In diesem Fall wird die Übertragung für einen bestimmten Zeitraum unterbrochen. Der Zeitraum sollte eine feste Länge und eine zufällige Länge enthalten, damit nicht alle für den gleichen Zeitraum zurücktreten. Viele Standard-Funkprotokolle enthalten dieses Verfahren, siehe ETSI EN 300-220-1.

2) Implementieren Sie ein Beacon-System, bei dem die Übertragungen vom Beacon zeitgesteuert sind. Jeder Sender erhält einen eigenen Zeitschlitz. Normalerweise verwenden Sie Seriennummern in den Geräten, um deren Steckplatz zu bestimmen, und verfügen über ein System, um zu bestimmen, wer die Bake sendet. Da dies davon abhängt, dass alle Sender einen anderen Steckplatz haben, ist es nicht ratsam, es dem Benutzer zu überlassen, alle Sender eindeutig zu identifizieren, es sei denn, Sie verfügen über ein solides Verfahren dafür.

Martin
quelle
Abgesehen davon denke ich, dass Teil zwei CDMA nutzen könnte, wenn sie wissen, dass die meisten Stationen normalerweise nicht senden müssen.
Kortuk
1
@Kortuk: Ich hatte den Eindruck, dass einer der Vorteile von CDMA darin besteht, dass - wenn der Empfänger mit dem Sender synchronisiert werden kann - die Anzahl der Bitfehler zunimmt, wenn die Anzahl der gleichzeitigen Sender zunimmt, ansonsten jedoch ist kein "Stauen" als solches.
Supercat
@supercat, ich habe den Eindruck, dass jeder zufällig Zeitfenster zuweist. Die meisten Sender sprechen nur gelegentlich, so dass die Chance, dass zwei gleichzeitig sprechen, sehr gering ist. Dies kommt jedoch gelegentlich vor und zeigt sich in einer geringen Anzahl von Bitfehlern an diesem Punkt. Mit Interlacing und allgemeinem ECC können Sie dies so gut wie ignorieren. Das heißt, jeder hat vorbestimmte Zeitschlitze, die auf einem Zufallszahlengenerator basieren, um sicherzustellen, dass sich keine zwei Sender ständig den gleichen Raum teilen und sich nur gelegentlich treffen. Ich kann jemanden fragen, der es genau weiß, und ihn
einschalten lassen
1
@Kortuk: Früher dachte ich, dass CDMA das bedeutet, aber eine Reihe von Quellen, einschließlich der Wikipedia-Seite, deuten darauf hin, dass es sich um eine Modulation mit einer höheren Geschwindigkeit als der Bitrate handelt. Wenn der Sender sein Signal gemäß einem Pseudozufallsbitstrom invertiert und der Empfänger das resultierende Signal ebenfalls filtert, kann das ursprüngliche Signal wiederhergestellt werden. Ansätze, die auf einem pseudozufälligen Zeitfenster basieren, sind nützlich, aber ich halte CDMA nicht für den richtigen Begriff. Die größte Schwierigkeit bei solchen Ansätzen ist die Koordination. Ich wünschte wirklich, es gäbe ein weit verbreitetes hochauflösendes Zeitsignal.
Supercat
1
@Kortuk: WWV funktioniert irgendwie für die Synchronisation von Digitaluhren, aber es dauert eine Minute, bis ein Zeitsignal gesendet wird. Es wäre umso schöner, wenn es weit verbreitete Zeitsendungen gäbe, die in 10 ms oder weniger gelesen werden könnten und in Colorado garantiert innerhalb einer bestimmten kleinen Toleranz der WWV-Zeit liegen würden (was bedeutet, dass die lokal weitergeleiteten Zeitsendungen an einem Ort in 1000 Meilen Entfernung liegen Zeitsendungen sollten eigentlich 5ms vor WWV liegen).
Supercat
3

Wie aus den Kommentaren usw. hervorgeht, ist die Stromversorgung kein Problem, die Kommunikationsgeschwindigkeit jedoch. Also, hier ist mein Vorschlag für ein Protokoll.

Nummerieren Sie alle Knoten mit 0..n-1. Teilen Sie jedem Knoten mit, um welche Nummer es sich handelt. Knoten 0 wird der Master sein.

Alle 15 ms sendet der Knoten 0 eine Nachricht: "0HELO".
1ms später sendet Knoten 1 eine Nachricht: "1DATA".
1ms später sendet Knoten 2 eine Nachricht: "2NICE".
1 ms später sendet Knoten 3 eine Nachricht: "3". (Dieser Knoten hat nichts zu sagen)
1ms später sendet Knoten 4 eine Nachricht: "2CATS".
...
1ms später sendet Knoten 9 eine Nachricht: "9MICE".
Dann gibt es eine Pause von 5ms.

Die Knoten senden ihre Nachrichten immer in den richtigen Zeitfenstern, auch wenn sie nichts zu sagen haben. Auf diese Weise wird eine Kommunikationsrate von 66 Hz ohne Kollisionen garantiert.

Raketenmagnet
quelle
2

Die HF-Kommunikation mit mehreren asynchronen Sendern ist ein schwieriges Problem. Viele Überlegungen und technische Maßnahmen haben sich mit den Standards 802.11 und 802.15 befasst, um diese Probleme zu umgehen. Wenn Sie hier nachfragen müssen, sollten Sie sich an die Standardhardware halten, die einen dieser Standards implementiert.

Beachten Sie, dass beides zwar nützlich ist und viel Sorgfalt erfordert, in der Regel jedoch in jeder realen Anwendung ein Protokollstapel implementiert werden muss, der über diesen Standards liegt. Dies wären WiFi und TCP über 802.11 und Zigbee oder Microchips WiWi oder einige andere über 802.15.

Das Entwerfen eines Mehrpunkt-Funknetzwerks ist ein Ausweg aus Ihrer Liga, wenn Sie hier solche grundlegenden Fragen stellen. Sie verbringen einfach viel Zeit und die Dinge werden immer noch nicht immer richtig funktionieren.

Die Wahl zwischen 802.11 und 802.15 hängt hauptsächlich von Ihren Bandbreiten- und Reichweitenanforderungen und der verfügbaren Leistung ab. 802.15 ist kleiner, hat eine geringere Leistung, eine geringere Bandbreite und eine geringere Reichweite. Mit der richtigen Software der höheren Ebene kann ein 802.15-Gerät eine lange Zeit mit Batterien betrieben werden, wohingegen dies für 802.11 im Allgemeinen nicht zutrifft.

Olin Lathrop
quelle
2
Auf die Anwendung kommt es an. Es ist zwar ziemlich schwierig, aber gleichzeitig kann aus der Übung viel gelernt werden. Und die Dinge, die er lernen wird, sind universelle Gesetze und keine implementierungsspezifischen Details.
JPC
9
"Ausweg aus deiner Liga" ist ein bisschen hart. Sie sind etwas überfordert, und ich habe gesehen, dass Leute in dieser Position ein Jahr mit dieser Art von Problem verschwendet haben ... aber das bedeutet nicht, dass sie keine Ratschläge annehmen und es zum Laufen bringen können. Wie JPC sagte, könnte Erfolg hier einen bedeutenden Sprung im Verständnis bedeuten. Wenn sie ein Angestellter von mir mit dieser Frage wären (und ich könnte mir die Zeit für die Lektion leisten), würde ich sie anstoßen und hoffen, dass sie etwas lernen.
Darron
3
Es ist ein schlechter Service, wenn Leute auf diese Site kommen, um Antworten zu suchen, um ein Problem zu erkennen und zu lösen, und sich (durch Gegenstimmen) gezwungen fühlen, eine Lösung zu finden, nach der sie nicht gefragt haben oder die sie nicht verwenden können.
Joel B
1
@JoelB Upvotes erzwingen keine Annahme einer Antwort.
Chris Stratton
1

Ich bin damit einverstanden, dass ich zuhöre, bevor ich spreche, und mit dem Beacon-System. Wenn Sie jedoch gleichzeitig einen einzelnen Kanal für die Datenübertragung verwenden möchten, können Sie die DSSS-Modulationstechnik (Direct Sequence Spread Spectrum) verwenden. Dies kann Ihnen helfen, Störungen zu vermeiden.

Aber dafür müssen Sie vielleicht einen Chip kaufen, der ihn implementiert, zum Beispiel Xbee (basierend auf Zigbee). Wenn Sie Ihren Sender nicht wechseln können, sollten Sie sich an die anderen Antworten halten.

HzJavier
quelle
Vielen Dank für Ihre Anregungen. Unser Hauptproblem ist jedoch, dass unser System in Echtzeit arbeitet. Wann und von wo wir ein Signal erhalten, ist also völlig unvorhersehbar. Lassen Sie es mich genauer erklären. Tatsächlich befinden sich alle Sender und Empfänger innerhalb ihrer Reichweite. Angenommen, ihre Reichweite beträgt 100 Meter, dann sind alle innerhalb von 50 Metern vorhanden, sodass jedes von einem Sender ausgegebene Signal zu jedem Knoten gelangen kann und jedes Signal zu jeder Zeit.
Also
@ User934070 Bei Mobiltelefonsystemen und WLAN wird normalerweise ein breites Spektrum oder zumindest Technologien verwendet, die denselben Grundkonzepten folgen. Handys und Laptops sind genau wie Sie beschreiben "wann und von wo wir ein Signal erhalten, ist völlig unvorhersehbar"
Kellenjb