RS-485-Modbus-Gerät an MCU

Ich habe ein Gerät (ein Energiezähler), das Daten über RS-485 (Modbus-Protokoll) sendet. Und ich möchte es mit MCU sammeln. Das Wichtigste ist, dass ich versuche, ein Board zu entwerfen, und ich möchte, dass es skalierbar ist. Das heißt, ich habe möglicherweise 1 Gerät angeschlossen oder vielleicht 2 oder 3 Geräte (mit unterschiedlichen Slave-IDs). Ich habe folgende Fragen:

  • Ich denke, ich brauche eine MCU mit einem UART und dann muss ich einen RS-485-Treiber ( wie diesen ) hinzufügen, und mir geht es gut? Ich meine, Modbus ist nur ein Protokoll, also sollte ich mir in der Designphase darüber keine Gedanken machen?
  • Sollte ich eine MCU mit 1 UART in Betracht ziehen oder brauche ich mehr? Ist die MCU mit einem einzigen UART in der Lage, mit mehreren Geräten zu kommunizieren? Ich meine, ein UART stellt nur Rx- und Tx-Leitungen bereit, sodass es einfach ist, eine Verbindung zu einem Gerät herzustellen. Aber wie geht man mit mehr um?
  • Muss ich das ganze Modbus-Zeug manuell handhaben? Es kann einfach mit dem PC gemacht werden, aber wie kann ich es mit meiner MCU machen? Ich muss Funktionscodes, Datenanordnung und all diese Dinge von Grund auf neu definieren? Oder gibt es verfügbare Bibliotheken für einige MCUs?

Vielen Dank im Voraus!

Antworten (2)

Ja, offensichtlich brauchen Sie einen UART. Dein Fahrer sieht auch okay aus. Ein UART ist genug. Versuchen Sie nicht, Ihr Projekt zu erstellen, wenn Sie mit Begriffen wie: Bussystem, RS485, Physical Layer, UART, RS232, Halbduplex, Master-Slave-Topologie, Bus-Arbitrierung nicht vertraut sind. Damit verstehen Sie, was ein Bussystem ist und wie mehrere Geräte an einer Leitung funktionieren. Ein guter Ausgangspunkt sind Anwendungshinweise von einigen RS485-Anbietern und Tutorials, zum Beispiel dieses .

Persönlich habe ich den ST3485 verwendet, der hier einen Anwendungshinweis enthält, der einige grundlegende Dinge erklärt, aber Sie können die gleichen Informationen auch von allen anderen Anbietern finden.

Für Ihre Firmware- und Protocool-Entschlüsselung gibt es viele Bibliotheken da draußen. Zunächst müssen Sie wissen, ob Sie ein Master- oder ein Slave-Gerät bauen möchten. Für alle oben genannten Punkte gilt: Google ist dein Freund. Aber damit Google das Richtige findet, müssen Sie die Terminologie kennen (was zu suchen ist)!

Danke für die Info. Ihr erster Link ist eine gute Übersicht. Du hast Recht, dass man alles finden kann, wenn man Google richtig benutzt, aber das ist nicht immer einfach. Sie haben einen guten Einblick in die Spezifikationen/Tutorials der Anbieter gegeben. Bis jetzt habe ich nur einfache Punkt-zu-Punkt-Kommunikation betrieben. Daher ist die Mehrpunktkommunikation für mich etwas undurchsichtig.

Wenn es sich um MODBUS-RTU handelt, sollten Sie sich frühzeitig Gedanken über die Hardware machen. Das MODBUS-RTU-Protokoll hat eine 3-1/2-Zeichen-MARK-Bedingung, um START/END anzuzeigen, was ein gewöhnlicher UART möglicherweise nicht unterstützt.

Bei MODBUS ASCII gibt es dieses Problem nicht – der Doppelpunkt und CR/LF werden als Trennzeichen verwendet. Der Nachteil ist natürlich, dass es viel langsamer ist.

Für MODBUS-RTU besteht eine Lösung darin, den RXD-Eingang auch an einen Timer-Eingang anzuschließen. Auf diese Weise können Sie den MARK-Zustand mit einem Timer erkennen.
@KubaOber Genau - deshalb muss man es frühzeitig in Betracht ziehen - (höchstwahrscheinlich) einen zusätzlichen Pin und etwas interne Timer-Hardware widmen.
Danke schön. Das ist eine Art Fallstrick, der mir nicht bewusst war. Soweit ich weiß, gibt es keine Möglichkeit, für eine bestimmte MCU schnell abzuschätzen, ob dies der Fall ist und nur tief in der Spezifikation zu finden ist?
Ja, Sie müssen die Funktionen der CPU-Peripherie studieren, wenn Sie diese Art von Modbus unterstützen müssen.