Ist RS-485 eine geeignete physikalische Schicht für Atmega-Chips in einer Hausüberwachungssituation?


7

Ich beabsichtige, einige Atmega-basierte Home-Monitoring-Chips zu bauen. Ich möchte Temperatur, Luftfeuchtigkeit und aktuelle Werte überwachen. Die Überwachung des Strompegels würde mit einem induktiven Aufnehmer an Wechselstromleitungen erfolgen. Zusätzlich möchte ich einige Pins auf jedem Monitor haben, die als ferngesteuertes GPIO verwendet werden können.

Mein Plan ist es, Attiny84-Chips zu verwenden, um dies zu implementieren. Jede Karte würde mit +15 VDC und +7 VDC gespeist. Ich kann dies mit Reglern der Serie 780x auf +5 VDC und +12 VDC regeln, um die Chips und andere Sensoren oder Relais mit Strom zu versorgen, die ich mir wünsche.

Für die Stromversorgung werden zwei Paare im Cat5e-Kabel verwendet. Geräte sind miteinander zu verketten. Dadurch bleiben zwei Paare im Kabel übrig. Nach dem, was ich gelesen habe, scheint RS-485 eine attraktive Lösung für Daten und Kontrolle zu sein. Das letzte Gerät benötigt einen angeschlossenen Abschlusswiderstand, aber das sollte einfach sein.

Wenn ich das richtig verstehe, fügt das Hinzufügen eines Chips zu meiner Schaltung wie einem MAX485 nur die physische Fähigkeit zur RS-485-Signalisierung hinzu. Ich brauche noch eine Software-Implementierung für die Kommunikation und darüber hinaus ein aktuelles Protokoll für mehrere Geräte, um Daten auszutauschen. Ich hätte bis zu 12 Geräte, die mit einem einzigen Master verkettet sind. In einem Halbduplex-RS-485-System verhält sich der Bus im Grunde genommen wie eine Party-Leitung.

Das Master-Gerät würde die folgenden Funktionen in der Reihenfolge während jeder Kommunikationsrunde ausführen.

  1. Senden eines Synchronisationssignals. Dies wäre ein bekanntes Bytemuster, gefolgt von einem Bezeichner und einer Prüfsumme. Die Kennung wäre eine eindeutige Kennung für diese Kommunikationsrunde. Zusätzlich würde diese Datensequenz die Kennung eines Slave-Geräts enthalten, das in dieser Runde Daten senden darf.

  2. Warten auf eine Nachfrist. Diese Kulanzfrist wird verwendet, damit ein unbekanntes Gerät eine Anforderung zum Beitritt zum Netzwerk an den Master senden kann.

  3. Empfangen von Daten von dem Slave-Gerät, das in den in Schritt 1 gesendeten Synchronisierungsdaten angegeben ist.

  4. Senden von Steuerbefehlen an eine beliebige Anzahl von Slave-Geräten. Dies umfasst GPIO-Befehle und Join-Netzwerkbestätigungen. Alle Steuerbefehle müssen später vom Slave bei einer Übertragung zurück zum Master bestätigt werden.

Die Slave-Geräte befinden sich in einem von zwei Zuständen

  1. Vom Meister nicht anerkannt. Es synchronisiert das Synchronisationssignal und sendet in der Kulanzperiode. Im Idealfall sendet der Master in Schritt 4 der nächsten Kommunikationsrunde eine Bestätigung zurück. Wenn das Gerät dies nicht empfängt, wartet es eine zufällige Anzahl von Runden, bevor es es erneut versucht. Auf diese Weise können Kollisionen in der Kulanzfrist, die durch mehrere Geräte verursacht werden, die versuchen zu senden, schließlich behoben werden.

  2. Vom Meister bestätigt. Das Gerät überträgt Sensordaten, wenn dies durch das vom Master gesendete Synchronisationssignal angezeigt wird. Während dieser Zeit sendet das Gerät auch Bestätigungen von Steuerbefehlen zurück. Es ignoriert die Kommunikation zu und von anderen Slaves mit dem Master.

Die Idee dahinter ist, dass die RS-485-Implementierung im Atmega-Controller nur Software sein wird. Das Gerät kann offensichtlich nicht ständig Daten senden und empfangen, oder es wäre als Sensorgerät nicht nützlich. Die Länge einer Runde in der realen Welt muss groß genug sein, damit der Fehler in den im Oszillator eingebauten Chips unbedeutend ist. Auf diese Weise kann die Synchronisation basierend auf dem Signal vom Master für mehrere Runden beibehalten werden, ohne dass tatsächlich Daten empfangen oder gesendet werden müssen.

Während der Verbindungsphase ermöglicht dies die Synchronisation, sodass der Slave den Zeitraum für die Übertragung einer Verbindungsanforderung korrekt identifizieren kann.

Sobald sich der Slave im Netzwerk befindet, kann das Gerät erkennen, wann es auf die Berechtigung zum Senden und Empfangen von Daten warten muss. Dies bedeutet auch, dass das Gerät die Option hat, eine oder mehrere Kommunikationsrunden zu "überspringen", um Sensormessungen durchzuführen, GPIO zu befehlen oder was auch immer ich brauche. Die Theorie besagt, dass, wenn das Gerät nur Sensordaten senden durfte, es nicht sofort wieder angefordert werden darf und auch keine neuen Daten vorliegen.

Das Problem dabei ist, dass, da ein Slave für mindestens eine Runde effektiv aus der Kommunikationsschicht ausscheidet, alle Befehle an Slaves mit einer Nachricht zurück an den Master bestätigt werden müssen. Dadurch kann der Master Befehle einfach bis zur Bestätigung erneut übertragen. Dies bedeutet auch, dass Befehle Zustandsbeschreibungen und keine Zustandsänderungen sein sollten. Es besteht eine sehr reale Chance, dass ein Slave einen Befehl mehr als einmal ausführt. Ich weiß nicht genau, wie Bestätigungen funktionieren, aber es wird wahrscheinlich nur eine Nachricht sein, die aus einer Identifikationsnummer und einer Prüfsumme besteht.

Welche Prüfsumme ich auch immer in diesem System verwende, sie muss billig zu berechnen sein, da ich sie auf Chips ausführen werde, die nur eine Taktrate von etwa 8 MHz haben und 8-Bit-Computer sind.

Der größte Nachteil dieses Systems ist, dass die Slaves, wenn sie aus irgendeinem Grund alle aus- und wieder eingeschaltet werden, kollidieren, wenn sie versuchen, sich in der Nachfrist dem Netzwerk anzuschließen. Dies bedeutet, dass es sehr lange dauern kann, bis alle wieder dem Netzwerk beitreten.

Vermisse ich damit etwas Bedeutendes? Gibt es große Entscheidungen, die ich völlig ignorieren muss? Ist mein Verständnis von RS-485 als große Parteilinie korrekt?


Das scheint furchtbar kompliziert. Woher kennen Sklaven ihre Kennung (Adresse)?
kkrambo

1
@ kkrambo-Slaves haben beim ersten Einschalten zunächst keine Adresse. Sie erhalten eine vom Master und schreiben dann die Adresse und eine Prüfsumme in eine Adresse in das Innere des EEPROM. Alternativ kann ich dies auf meiner Workbench tun, wenn ich ein bestimmtes Gerät mit einer bestimmten Adresse benötige.
Eric Urban

Ich habe kürzlich ein Wetterüberwachungssystem mit vielen der gleichen Sensoren gebaut, die auf meinem Grundstück verteilt sind. Ich habe mich für CANbus anstatt für Modbus entschieden, weil die Chips bei eBay reichlich und billig waren und große Entfernungen (500 m-1 km) zwischen Knoten zuließen!
Tom O'Connor

Antworten:


4

Der größte Nachteil dieses Systems ist, dass die Slaves, wenn sie aus irgendeinem Grund alle aus- und wieder eingeschaltet werden, kollidieren, wenn sie versuchen, sich in der Nachfrist dem Netzwerk anzuschließen. Dies bedeutet, dass es sehr lange dauern kann, bis alle wieder dem Netzwerk beitreten.

Wenn Sie eine begrenzte Anzahl potenzieller Adressen haben (z. B. 256), kann der Master immer eine derzeit nicht verbundene Slave-Adresse abfragen, um festzustellen, ob sie in Aktion getreten ist. Wenn Sie also 20 aktive Slaves haben, fragt der Master in jeder "Runde" einen 23. Slave ab und erhöht numerisch die nicht verbundene Sklavenadresse für die nächste "Runde". Es dauert nur ein paar Sekunden, um genügend Runden zu machen, um einen neuen Sklaven zu finden, und dann ist die Arbeit erledigt.

Keine Notwendigkeit, eine Nachfrist zu haben; Nur ein weiterer Slave-Steckplatz reicht aus, und wenn ein neuer Slave (oder fehlerhafter Slave) gefunden wird, wird er als "aktiv" aufgeführt.

Und ja, RS485 ist dafür eine geeignete physikalische Schicht.

Mein Plan ist es, Attiny84-Chips zu verwenden, um dies zu implementieren. Jede Karte würde mit +15 VDC und +7 VDC gespeist. Ich kann dies mit Reglern der Serie 780x auf +5 VDC und +12 VDC regeln, um die Chips und andere Sensoren oder Relais mit Strom zu versorgen, die ich mir wünsche.

Ich würde Low-Drop-Out-Regler verwenden und der Drop-Out-Spannung etwas mehr Headroom geben - es wird möglicherweise eine Spannungsinduktion von Ihrer lokalen AC-Hausverkabelung geben, und dies bedeutet, dass die Regler etwas mehr Platz benötigen, um richtig zu regeln.

Ich würde auch die Verwendung der Manchester-Codierung in Betracht ziehen, damit Sie die empfangenen Daten ohne Angst vor Korruption hochpassfiltern können. Eine Vorspannung von 100 kOhm nach dem Kondensator sollte in Ordnung sein, egal wie viele Slaves Sie installiert haben, dh die Impedanzanpassung von Ende zu Ende des Kabels wird nicht zerstört. Ich weiß nicht, mit welcher Datenrate Sie arbeiten möchten, aber es scheint sinnvoll, mit oder über 9600 Baud zu arbeiten, um dem Hochpassfilter dabei zu helfen, Wechselstromstörungen zu blockieren. Ja, ich weiß, dass RS485 eine Stromschleife ist, aber wenn Sie in der Entwurfsphase ein wenig mehr Hardware-Sicherheit bieten können, zahlt sich dies aus.

Durch das Entwerfen für die Manchester-Codierung haben Sie auch eine bessere Chance, HF-Verbindungen zu implementieren, falls in Zukunft weitere erforderlich sein sollten.

Nur ein paar Gedanken dazu, wenn Sie Ihr eigenes Protokoll schreiben.


Danke für Ihre Antwort. Können Sie eine Beispielschaltung für die Hochpassfilterung der Daten mit einer Datenrate von 9600 Baud bereitstellen?
Eric Urban

2
Nun, Sie verwenden Kondensatoren, um jeden Slave an die gemeinsame Leitung anzuschließen, und Sie haben Vorspannungswiderstände an den A- und B-Anschlüssen der 485-Schnittstellen-Slave-Seite dieser Kondensatoren. Wenn Manchester mit 9600 Bit / s codiert ist, beträgt die niedrigste Frequenz 9,6 kHz. Wenn Sie also 100 k Pull-Ups und Pull-Downs auf jeder A- und B-Leitung verwenden, müssen Sie einen Kondensatorwert auswählen, der einen Hochpasspunkt von 3 dB bei etwa 1 kHz erzeugt. Klingt so, als wäre ein 3n3 für die Wechselstromkopplung geeignet - er bildet eine RC-Abschaltung von 964 Hz und blockiert 60 Hz recht gut.
Andy aka

3

Auf der Kabelebene ist RS-485 eine "Party Line". RS-485 ist einfach zu implementieren, wenn nur ein Master vorhanden ist. Wenn Ihre Geräte keine "P2P" -Konnektivität benötigen (z. B. kümmert sich der aktuelle Sensor nicht um die Luftfeuchtigkeit), ist Modbus eine bewährte und einfache Lösung. Das Rad nicht neu erfinden.

Ich habe FreeMODBUS mit vielen AVRs verwendet , um Slaves zu implementieren (es ist ziemlich aufgebläht, aber der Speicher ist billig). Sie können einen USB <-> RS485-Adapter kaufen und Software wie qModMaster ausführen , um Ihren Sensor zu testen, oder libmodbus verwenden , um Ihre eigenen Programme zu schreiben.

Wenn Sie "Multi Master" benötigen, ist RS-485 eine sehr schlechte Wahl und Ihre mittlere Zugriffskontrolle wird komplex sein (war schon da, haben Sie das getan). In diesem Fall wäre CAN die übliche Wahl.

Stellen Sie beim Anschließen vieler Geräte an einen einzelnen Bus sicher, dass die maximale Einheitslast Ihrer Transceiver nicht überschritten wird .


Ich werde einen einzelnen Master betreiben. Ich werde mir FreeMODBUS ansehen. Mein Anliegen bei Modbus ist, dass es so konzipiert zu sein scheint, dass es alles kann, obwohl mein Anwendungsfall begrenzt ist.
Eric Urban

1
Sie müssen nicht alles implementieren. Grundsätzlich benötigen Sie die Funktionscodes "Register lesen" und "Register schreiben".
Filo

2
Ich habe Modbus sowohl über RS485 als auch über Ethernet verwendet. Das Protokoll selbst ist sehr standardisiert und funktioniert, solange Sie die Verkabelung gerade halten (für RS485 - Ethernet ist es schmerzlos) und einen einzigen Master haben. Was die Register tatsächlich bedeuten, variiert VIEL und es gibt dort keinen Standard. Ich habe jede mögliche Kombination aus Byte-Orientierung, Gleitkomma-Format usw. gefunden. Einige Implementierungen "erweitern" Modbus, indem sie einen Wert in einem Register verwenden, um die Verwendung eines anderen Registers zu ändern oder andere verrückte Dinge zu tun. Sie können Ihren eigenen "Standard" erstellen und dieser ist genauso Standard wie der Modbus anderer.
Manassehkatz-Moving 2 Codidact

1
  1. Ich würde die Hardwareplattform überdenken. Verwenden Sie etwas billiges und modernes wie stm32f0- oder f1-Chips. Sie haben alle notwendige Hardware (einschließlich Dose)
  2. Überkomplizieren Sie einfache Aufgaben nicht. Ihre Idee ist ein perfektes Beispiel dafür, wie man keine Kommunikation macht.
  3. Verwenden Sie etwas Vorhandenes und Standardisches wie Modbus. Sie können auch andere Geräte anschließen.
  4. Das Multimaster-System ist für das Hausautomationssystem zu kompliziert.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.