Entscheidungshilfe zwischen RS485 oder CAN [geschlossen]

PROBLEM

Ich baue eine Robotersteuerplatine, um sie als Hobby an einen Raspberry Pi anzuschließen. Ich habe gerne spezialisierte Platinen für verschiedene Funktionen und suche nach Lösungen für den Kommunikationsbus. In der Vergangenheit habe ich versucht:

  • 5V UART: Probleme mit Rauschen
  • I2C: funktioniert einfach nicht mit Rauschen
  • POF Plastic Optical Fibers: Cool, aber teuer und groß
  • RS485 über Audiokabel mit 3,5-mm-Klinkensteckern mit benutzerdefiniertem Protokoll: Funktioniert wie ein Zauber. Ich mag, wie günstig die Stecker und die Kabel sind.

Unten ein Bild als Referenz eines der Roboter, die ich in der Vergangenheit mit einem RS485-Bus mit benutzerdefiniertem Protokoll über Audiokabel mit 3,5-mm-Buchse erstellt habe.

Motorplatinen mit RS485-Bus mit 3,5-mm-Audiobuchsen

Unten ein Bild als Referenz meiner neuesten Iteration des Raspberry Pi-Roboterhuts. Ich möchte ein Display und Anschlüsse für einen Kommunikationsbus hinzufügen, einen besseren Leistungsregler hinzufügen und Motor- und Servosteuerungen auf Slave-Boards übertragen.

Geben Sie hier die Bildbeschreibung ein

IDEEN

Ich denke darüber nach, entweder einen CAN-Bus oder einen RS485-Bus mit einem weniger benutzerdefinierten Protokoll zu implementieren, das auf dem Markt von Nutzen ist.
Hier ein Beispiel eines Slaves, der den CAN-Bus verwendet.
Hier ein Beispiel eines Slaves, der den RS485-Bus mit seinen benutzerdefinierten Protokollen verwendet.

Spezifikationen:

  • Drei Drähte (zwei Daten + eine Abschirmung), damit ich Audiokabel und 3,5-mm-Klinkenbuchsen für meine Sklaven verwenden kann
  • Ich möchte, dass der Bus weniger benutzerdefiniert ist, damit ich ihn an vorhandene Add-On-Boards anschließen kann
  • 1 MB/s Bandbreite
  • Unempfindlich gegen Lärm

FRAGE

Ich hätte gerne Vorschläge, welchen Bus Sie in dieser Anwendung verwenden würden, insbesondere wenn es einen Bus gibt, den ich nicht berücksichtigt habe, Vorschläge zu einem Standardprotokoll über den RS485-Bus oder Ihre Gründe, warum Sie sich für einen CAN-Bus entscheiden würden. Danke für eure Beiträge!

LÖSUNG

Bei RS485 werden keine dominanten Protokolle verwendet, und CAN hat einen großen Datenrahmen-Overhead.
Ich habe mich entschieden, zwei 3-polige 3,5-mm-Klinkenstecker mit einem RS485-Transceiver zu implementieren, der an einen AT4809 für die Hardware angeschlossen ist. Über den RS485-Bus werde ich mein benutzerdefiniertes Master-Slave-Protokoll wiederverwenden.

Unten ein Schema und die anfängliche Platzierung von Komponenten.Schaltpläne und Erstplatzierung

RS-485 erfordert nur einen Transceiver auf dem rpi, CAN erfordert einen Controller über spi/i2c. Wählen Sie RS-485, geht direkt auf den GPIO-Header. Außerdem benötigen beide Busse noch eine "gemeinsame" Masse, also theoretisch 3-Draht, optionale Abschirmung. Diese Frage ist jedoch besser für ein Forum wie EEVblog geeignet.
Sie können weiterhin CAN PHY verwenden und UART-Daten darauf übertragen, es ist kein CAN-Controller erforderlich, es sei denn, es muss das CAN-Protokoll verwendet werden. Ebenso entspricht RS-485 nicht unbedingt dem UART-Protokoll, auch wenn es normalerweise damit verwendet wird.
Ich würde fragen, warum es so viel Rauschen gibt, dass alle anderen Kommunikationsprotokolle nicht funktionieren würden? Motoren, sicher, aber der Effekt kann mit Dämpfern und Filtern reduziert werden. Und eine gute Filterung und Abschirmung sollte die Wirkung von Rauschen auf den Kommunikationssignalleitungen reduzieren. Andernfalls maskieren Sie möglicherweise ein Problem mit industrietauglicher Kommunikation, nur damit das Rauschen an anderen Stellen Probleme verursacht.
Sie kommen zu spät zur Party, aber einer der Gründe, warum Sie Probleme mit Lärm haben, ist, dass die Verkabelung schrecklich ist. Einige Kabelkanäle, in denen Kabel von Leistungs- und Motorantriebselektronik ferngehalten werden, würden die EMV erheblich verbessern. Was Sie derzeit haben, sind im Grunde etwa 20 gelb gefärbte Antennen, die alle EMI von den Platinen und Motoren auffangen. Aber dann bin ich mir nicht sicher, wie gut Rasp Pi überhaupt für EMI-intensive Anwendungen ist (es braucht vielleicht einen Pi-Filter? har har ...). RS-485 oder CAN ist jedoch der richtige Weg.

Antworten (1)

Ich fürchte, Sie vergleichen Äpfel mit Birnen.

RS-485 ist einfach eine Möglichkeit, einen Bus zu fahren. Sie nehmen Ihren UART-Ausgang, übersetzen ihn über einen RS-485-Sender, empfangen ihn mit einem Empfänger und speisen ihn dann in den Ziel-UART ein. Kinderleicht.

CANBus ist eine viel kompliziertere Angelegenheit. Sie müssen einen CAN-Controller mit Datenpaketen füttern. Der Controller treibt dann den physikalischen Bus mit einem viel komplizierteren Protokoll zum Empfänger, und der Empfänger erzeugt ein rekonstruiertes Paket. Tatsächlich würden die beiden Controller Ihre UARTs ersetzen.

Was die Zuverlässigkeit betrifft, ist CANBus besser. All der zusätzliche Müll, den ein CANBus verwendet, dient zwei Dingen: der Auswahl einer aus einer Reihe von Einheiten, die alle mit dem Bus verbunden sind, und der Fehlererkennung und -korrektur.

Wenn Sie sagen, Sie wollen 1 Mb/s Bandbreite, werden Sie das nie von CANBus bekommen. Es stimmt, dass Sie CANBus mit 1 MHz betreiben können, aber wenn Sie jeweils 1 Byte senden, erhalten Sie nur einen Effekt von 140 kb/s. Es dauert 58 Taktzyklen, um einen 1-Byte-CANBus-Frame zu senden. Es ist zwar möglich, den Bus mit 5 MHz zu betreiben, aber das bringt Sie nur auf effektive 700 kb/s.

Um fair zu sein, hat ein UART, der mit 1 MHz betrieben wird, nur einen Durchsatz von 700 - 800 kb / s, abhängig von Ihrer Wahl des Frame-Setups, aber Sie können ihn problemlos schneller fahren.

Siehe https://en.wikipedia.org/wiki/CAN_bus für eine Übersicht.

Es ist auch normal, dass eine einzelne CANBus-Quelle die 5-Volt-Stromversorgung für alle anderen Einheiten bereitstellt. Das bedeutet, dass Sie 4 Signale auf Ihrem Bus benötigen, und ein Audiokabel wird ihn nicht unterbrechen.

Deine Erklärung ist klar. Ich mag es nicht, Strom neben com bereitzustellen, weil es den Strombedarf des Masters belastet und Slaves sehr unterschiedliche Stromanforderungen haben. Ich wäre damit einverstanden, dass die Signalrate etwa 1 MHz beträgt und ich keine effektive Bandbreite von 1 Mbit / s habe (das ist viel Overhead für CAN!).
Mein GD32VF103 hat sowohl UART- als auch CAN-Peripheriegeräte. Würden Sie die Verwendung von CAN empfehlen oder würden Sie ein Protokoll für RS485 empfehlen?
@05032MendicantBias - Die 5 V vom CANBus-Master werden nur verwendet, um den Transceiver-Teil des CANBus-Controllers anzutreiben. Infolgedessen ist die Leistungsaufnahme direkt proportional zur Anzahl der an den Bus angeschlossenen Transceiver.
@ 05032MendicantBias - Ich kann nicht wirklich eine Empfehlung aussprechen. Ich kenne deine Messwerte nicht. Hat Ihr UART-Peripheriegerät beispielsweise RS485-Fähigkeit? Manche tun es, manche nicht. Wenn nicht, wie groß ist die Bereitstellung der physischen Schicht? Sie erhalten keine 1 Mbit/s von CANBus. Wie viel brauchst du eigentlich? Wenn es über 140 kbs ist, ist CANBus aus, es sei denn, Sie können ein 5-Mbit / s-Gerät bekommen. CANBus ist mit einem 120-Ohm-TWP-Bus spezifiziert – wie nah ist dieser an Ihrem Audiokabel? Es gibt viele andere Probleme, aber ich weiß einfach nicht genug, um Sie zu beraten.