Was ist die maximale Kabellänge für die serielle Kommunikation zwischen zwei Arduinos?

9

Ich baue ein Projekt, in dem zwei Arduinos durch drei Drähte verbunden werden: TX ein RX für serielle Kommunikation und ein gemeinsames GND. Was wäre die maximale Länge der Drähte hier, bevor die Kommunikation beeinträchtigt wird?

Ich benutze ein Arduino Mega R3 auf der einen Seite und ein Arduino Mini auf der anderen Seite.

Ich habe keine besonderen Anforderungen an die Baudrate, ich könnte die niedrigste verwenden, wenn dies in irgendeiner Weise hilft.

Hobie
quelle

Antworten:

4

Sie müssen angeben

  • Die Reihenfolge der Reichweite, an der Sie interessiert sind - liegt sie in der Größenordnung von Metern, mehreren zehn Metern, Kilometern oder zwischenstaatlich? :-). ALLE sind mit geeigneten Kompromissen möglich.

  • Wie Sie sich mit der Schaltung verbinden möchten - direkte Arduino-Pins, High / Low-Puffer, Differentialtreiber, ...

Wenn Sie 5V / 0V "unipolar" verwenden, können Sie bei beispielsweise 9600 Baud viele Meter mit geeigneten Treibern erhalten. Wenn Sie einen Arduino-Pin direkt verwenden, spielen der Drahtwiderstand und die Induktivität mit zunehmender Reichweite eine Rolle.

Bei 300 Baud können Sie mit Twisted-Pair-Kabeln Hunderte von Metern erreichen. Mit zunehmender Reichweite gewinnen Aspekte wie Übersprechen von der anderen Schaltung und externes Rauschen an Bedeutung. Bei größeren Entfernungen mit 4 Drähten, bei denen Signal + Masse jeweils miteinander verdrillt sind, hilft ABER es ist wahrscheinlich, dass bei interessierenden Bereichen 2 Drähte plus Masse in Ordnung sind.

Wenn Sie bereit sind, genügend Spannung zu verwenden und langsam genug zu signalisieren, können Sie über Tausende von Kilometern signalisieren - wie dies bei sehr frühen Telegraphenkabeln der Fall war. Die benötigten Tausenden von Volt und Signalgeschwindigkeiten von vielleicht einigen Bits pro Sekunde sind in den meisten Fällen abschreckend.

Russell McMahon
quelle
Die Entfernung, die ich zurücklegen möchte, beträgt ungefähr 40-50 Meter von unserem Haus bis zum Tor draußen. Meine Absicht war es, die relevanten Arduino-Pins direkt mit einem Kabel zu verbinden, das ich aus einer früheren Intercom-Installation gefunden habe.
Hobie
2
Eine gewisse Gefahr für Arduino mit längeren Kabelstrecken. Induktion, Leckage, elektrostatische Aufladung. (Blitz & Boden steigen nur vielleicht aufgrund eines Stromausfalls auf, aber ...). Es ist eine gute Idee, die Klemmdioden auf allen Leitungen auf die Stromversorgungsschienen umzukehren. Basic Driver IC eine sehr gute Idee. Sogar ein xx74xx14 hexadezimaler Schmitt-Inverter-IC an jedem Ende wäre nützlich. (wobei xx mit der Familie variiert). Richtige Leitungstreiber noch besser, aber das ist ein Anfang. WENN Ihr Arduino wertvoll ist, verwenden Sie einen Puffer.
Russell McMahon
Vielen Dank an alle für die Kommentare und Vorschläge. Um herauszufinden, ob ich die angegebene Entfernung (ca. 40 m) mit einer einfachen Verbindung zurücklegen kann, habe ich es mit zwei Arduino Uno versucht, die jeweils als Sender und Empfänger eingerichtet sind. Die Karten werden direkt über die TX / RX-Leitungen (Pins 0 und 1) mit 9600 Bit pro Sekunde verbunden. Der Absender sendet jede Sekunde eine Testzeichenfolge, während der Empfänger auf eingehende Daten wartet. Ich verwende eine vorhandene Leitung (keine Informationen über die Qualität / Spezifikationen dieses Kabels. Wie auch immer, das Sender / Empfänger-Paar scheint in dieser Entfernung und Konfiguration problemlos zu funktionieren.
Hobie
Vielen Dank, hätten Sie einen bestimmten Vorschlag / Link zu einem IC oder Treiberchip?
Hobie
@hobie Bei 50 Metern und 9600 Baud können Sie wahrscheinlich mit fast jedem digitalen 5-V-Treiber-IC und sogar nur digitalen Ausgangs-ICs gute Ergebnisse erzielen (probieren Sie es aus und sehen Sie es sich an). Ein nützlicher Ausgangspunkt sind die Schmitt-Trigger-CMOS-Inverter, typischerweise 74xxx14, CDxxx14, MM ..... 14. Suchen Sie nach von Schmitt ausgelösten Wechselrichtern und vermeiden Sie die Wechselrichter mit der niedrigsten Antriebsleistung.
Russell McMahon