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:
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.
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.
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:
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!
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.
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.
Jeroen3
Nur ich
Oliver
Lundin