Datenaustausch über 5 Meter Kabel

Ich habe einen Mikrocontroller, der über ein Kabel kommunizieren muss, das ca. 5m lang, mit einem weiteren sehr kleinen Mikrocontroller. Die Geräte werden im Freien unter verschiedenen Bedingungen eingesetzt. Die Datenrate wird nicht sehr hoch sein. Wenn Sie den kleinen uC mit dem Kabel an den großen uC anschließen, werden eine Identifikationszeichenfolge und periodische (jede Minute) Batterieaktualisierungen vom kleinen uC gesendet.

Ich dachte an I2C, bin mir aber nicht sicher, ob es für solche Anforderungen ausgelegt ist? CAN ist auch möglich, aber ich denke, es ist ein bisschen übertrieben für meine Bedürfnisse. Hat jemand gute Ideen?

EDIT: Ich möchte so wenig Pins wie möglich für das Kabel verwenden.

Ich persönlich würde mich für RS422 oder RS485 entscheiden.
@Majenko Ich möchte so wenig Pins wie möglich für die Kabel verwenden.
Halbduplex RS-485 erfordert mindestens zwei Drähte, obwohl eine gemeinsame Erdung empfohlen wird.
(1) Ich stimme zu, dass I2C nicht für einen solchen Anwendungsfall entwickelt wurde. Gut, dass Sie von Anfang an auf solche Dinge achten. Weniger Chancen, dass du wie dieser Typ enden würdest . (2) Artikel über RS-485 aus der Arduino-Perspektive . (stilistische Anmerkung) Die akzeptierten Akronyme für Mikrocontroller sind uC oder MCU (Microcontroller Unit) oder μC (Fancy). MC könnte für Mega-Controller stehen.
Da dies nur ein Netzwerk mit zwei Geräten unter 50 Fuß ist, funktioniert das gute alte RS-232 alternativ gut und erfordert nur drei Drähte für Vollduplex (TX, RX und Masse).
@PeterK hat mich geschlagen, aber RS232 klingt wie eine gute Passform dafür, 2 Datenpins + gemeinsame Masse sind ungefähr so ​​​​gut, wie Sie für Vollduplex bekommen können, ohne die Sende- / Empfangselektronik viel komplexer zu machen ( Einzeldraht-Vollduplex könnte mit frequenzgefilterter Signalisierung im HF-Stil erreicht werden, würde hier aber wirklich verschwenderisch erscheinen)
@PeterK Vielen Dank für deine Antwort. Ich werde anfangen zu lesen, wie man es mit Arduinos testet!
Es klingt, als würde nur der kleine uC sprechen. Besteht überhaupt Kommunikationsbedarf in die andere Richtung? Oder ist es streng einseitig? Ich denke auch an die äußeren Bedingungen, die Sie unterstützen möchten, sowie an Kosten und Verfügbarkeit und wie gut die Dinge mit Software und verfügbarer Peripheriehardware im uC zusammenpassen. Randbedingungen können hier reichlich vorhanden sein. Können Sie diese Dinge weiter erläutern, einschließlich der äußeren Bedingungen und wie das Kabel in der Praxis getragen und verwendet wird? RS-232- und RS-485-Signalisierung sind offensichtlich. Aber es gibt andere Optionen im Auge.
Wenn der Kleine regelmäßige Updates durchführt, können Sie einfach einseitiges RS232 ausführen. Nur TX und Gnd. Haben Sie an Bluetooth gedacht? 15 Fuß ist einfach.
Bluetooth wären die wenigsten Pins möglich. 0.
@jonk Ja, im Moment hört der große Mikrocontroller nur zu, aber vielleicht möchte ich in Zukunft die bidirektionale Kommunikation integrieren. Das Kabel muss sehr robust sein, da es in Taschen und Autos transportiert wird. Es wird auch in sehr unwegsamem Gelände sein. Es wird bei Schnee und Regen, aber auch an heißen Sommertagen im täglichen Einsatz sein.
So. Was halten Sie von der Verwendung von Koax? Es ist ziemlich robustes Zeug und Sie können bei Bedarf sogar gepanzertes Zeug bekommen. Sie können bidirektionale Übertragungen über eine gemeinsam genutzte Leitung durchführen. Aber das kennst du ja schon von I2C, nehme ich an. Meistens denke ich hier jedoch an robuste Signalisierung. Kugelsicher. (CAN ist so, aber wie Sie sagten, es kann übertrieben sein. Aber cripes, Sie können CAN gegen die Autobatterie kurzschließen und es überlebt immer noch. CAN ist eine verdammt gute Medizin, wenn Sie "kugelsicher" wollen.)
@jonk der CAN-Bus sieht vielleicht ein bisschen übertrieben aus, aber er würde auch nur 2 Pins und 3,3 V erfordern, oder? Ich glaube, ich brauche auch einen Transceiver für mein Arduino
Ich denke, CAN gibt es in 3,3-V- und 5-V-Varianten, und die 5-V-Varianten, die ich gesehen habe, sind mit einer separaten Schiene ausgestattet, sodass sie mit 3,3 V uC auch bei Verwendung von 5-V-Signalisierung gut funktionieren. Siehe zum Beispiel den Microchip MCP25625. Siehe auch das TI-Papier "SLLA337" über 3,3-V-CAN.
@jonk vielen Dank! Ich werde den CAN-Bus und auch den MAX3232 testen.
Ich denke, ich denke wirklich an Ihre Verkabelung und Anschlüsse als das große Problem. Vielleicht möchten Sie Dinge, die sehr einfach zu bedienen sind, und das funktioniert einfach die ganze Zeit. Ich denke da etwa an die Mikrofon-XLR-Anschlüsse mit Phantomspeisung. Sie haben sie mit und ohne Verriegelungsfunktionen und sie sind ziemlich robust. So ist auch ein Teil der Mikrofonverkabelung vorhanden. Nur ein Gedanke. Keine Ahnung, wie sie draußen zurechtkommen würden, aber Musiker müssen bei schlechtem Wetter etwas unternehmen. Also vielleicht okay.
Ein anderer Ansatz könnte darin bestehen, Hausinstallationsstecker zu verwenden und spezielle Kabel mit Verlängerungskabel für den Außenbereich und Steckern an beiden Enden zu verdrahten. Auch dafür gibt es schicke 30A-Verriegelungssteckverbinder, und zwar in 3- und 4-Leiter-Varianten. Nicht zu teuer. Erhältlich bei Home Depot und Lowes. Nun, das ist vorerst mein letzter Gedanke.
@jonk vielen Dank für deine Hilfe! die xlr idee ist keine schlechte idee. Ich werde mir das mal anschauen, aber ich kann mir vorstellen, dass der Stecker wirklich groß ist.
@perotom: groß ist gut, wenn du draußen mit unbeholfenen Leuten bist, die helfen, Dinge zu verbinden. Ich mag auch Verriegelungsverbinder für solche Dinge. Nun, nur ein Gedanke zum Nachdenken.

Antworten (3)

Während CAN ein bisschen "übertrieben" sein kann, ist es immer vorzuziehen, wenn Sie diese Option haben. Kurzvergleich bzw. CAN versus RS232/RS422/RS485:

CAN-Vorteile:

  • Weitaus robuster und toleranter gegenüber EMI. Aber in Bezug auf die Technologie selbst und in Bezug auf den eingebauten Schutz in einem Standard-Transceiver.
  • Funktioniert gut ohne abgeschirmte Kabel bei niedrigeren Baudraten.
  • Eingebaute Fehlerbehandlung, CRC und Frame-Synchronisation. Es besteht also keine Notwendigkeit, ein weiteres obskures, benutzerdefiniertes UART-basiertes Protokoll zu erfinden. Das bedeutet, dass CPUs keine Zeit mit Codierung/Decodierung, CRC-Berechnung usw. verschwenden müssen.
  • Einfach zu warten und einfach von einem Punkt-zu-Punkt- zu einem Mehrknotensystem umzugestalten, falls dies in Zukunft erforderlich sein sollte.

CAN-Nachteile:

  • Keine wirklich sinnvolle Wahl, es sei denn, Ihre MCU verfügt über ein CAN-Peripheriegerät auf dem Chip. Externe CAN-Controller sind lästig und gehören der Vergangenheit an.
  • Möglicherweise etwas höherer Stromverbrauch als UART-basierte Lösungen.

Die Kosten für CAN-Transceiver im Vergleich zu RS-xxx-Transceivern sollten ungefähr gleich sein (außer wenn Sie alte Mist-Transceiver wie MAX232 auswählen, die 5x 1uF-Entkopplungskappen benötigen). Signalspannungspegel spielen keine Rolle, es gibt CAN- und RS-xxx-Transceiver für 3,3 V und 5 V.

Die Anzahl der Drähte für ein Semi-Duplex-System beträgt in jedem Fall 3. Bei CAN haben Sie CAN H, CAN L und Signalmasse. Bei zB RS-422 haben Sie T+, T- und Signalmasse. Das Überspringen der Signalmasse wird in beiden Fällen wirklich nicht empfohlen. Hören Sie nicht auf Leute, die Ihnen etwas anderes sagen.

Kleiner Punkt: " ... Transceiver wie MAX232, die 5x 1uF-Entkopplungskappen benötigen. " Die Kappen sind für die Spannungsverdoppler, um die (ca.) +7 und -7 V aus der +5 V-Versorgung zu erzeugen. Gibt es ein bekanntes Problem mit dem MAX232?
@Transistor MAX202 funktioniert genauso gut, benötigt aber nur 100 nF. Das Gleiche gilt für die meisten Second Sources mit dem Namen irgendetwas-232. Jura-Technologie versus Kreide-Technologie ... wählen Sie Ihren Lieblingsdinosaurier.
@Lundin, also denke ich, ich werde den Bus nehmen. Es ist vielleicht etwas komplizierter zu programmieren, aber vielseitiger.
@perotom Möglicherweise möchten Sie überprüfen, ob für die angegebene MCU vorgefertigte Treiber verfügbar sind. Das erspart Ihnen viel Arbeit.
@Lundin Ich denke, Arduino hat einige vorgefertigte Treiber. Danke!

Ich werde auch für RS232 stimmen, Sie sollten jedoch auf eine Sache achten, die sonst niemand erwähnt hat. Sie sagen nicht, welche Mikrocontroller Sie verwenden, aber das Folgende gilt für die meisten, die ich verwendet habe ...

Ihr Mikrocontroller verfügt über mindestens eine Datensendeleitung (TX) und mindestens eine Datenempfangsleitung (RX). Diese Leitungen schalten zwischen niedrig und hoch um, wenn Sie je nach Gerät zwischen Spannungspegeln von 0 V und ~5 V oder 0 V und 3,3 V senden/empfangen. Angenommen, beide Mikrocontroller verwenden die gleichen Spannungspegel, dann könnten Sie im Prinzip einfach TX von einem Mikro an RX des anderen anschließen und umgekehrt. Dies funktioniert für kurze Entfernungen und niedrige Datenraten, aber ich denke, dass 5 m dafür viel zu lang sind, und ich denke auch, dass es eine schlechte Praxis ist, dies zwischen Systemen zu tun.

Verwenden Sie besser einen Pegelwandler (wie die MAX232-Familie für 0-5-V-Systeme oder den MAX3232 für 0-3-V-Systeme) an jedem Ende. Diese wandeln die logische 0 in ~+12V und eine logische 1 in ~-12V um, sodass Ihre Kommunikationsleitung elektrisch dem RS232-Standard entspricht.

Hoffe das hilft,

Jo

Der Mikrocontroller, den ich derzeit verwende, ist ein STM32F205 ARM Cortex M3. Ein weiteres Problem ist, dass dieses Gerät ein mobiles Gerät mit nur einer 3,3-V-Batterie ist, also keine 12-V-Stromversorgung.
Du brauchst kein 12V Netzteil. Die von mir genannten Geräte erzeugen die erforderlichen Spannungspegel intern (Sie benötigen außerdem 4 Kondensatoren - Werte sind vom Gerät abhängig, also schauen Sie im Datenblatt nach). Stellen Sie nur sicher, dass Sie die MAX3232-Version verwenden, die mit einer 3,3-V-Versorgung korrekt arbeiten kann, der MAX232 arbeitet mit einer 5-V-Versorgung. Ich sollte hinzufügen, dass andere Unternehmen außer Maxim ähnliche Geräte herstellen.
wird mit Steckern fest verdrahtet? zB RJ45 Die verschachtelten Erdungen senken die Leitungsimpedanz und verbessern die Immunität. Wenn die Gefahr von Masseschleifen oder Gleichtaktstörungen besteht, verbessert ein Ferrit-Ringkern mit Schleifen aus Flachdraht oder verdrillten Paaren darum herum die Störfestigkeit. Da RS485 viel niederohmiger und symmetrischer ist, verbessert dies auch die Immunität gegen CM-Störungen erheblich. Dann können Sie der Einfachheit halber herkömmliche CAT-Drahtkabel mit Steckern in Betracht ziehen.
RS-232 ist heutzutage für jeden Zweck ziemlich veraltet. Der einzige Vorteil dieses alten Mülls ist, dass Sie ihn verwenden können, um mit alten PCs zu kommunizieren. Abgesehen davon gibt es nie einen Grund, RS-232 RS-422 vorzuziehen. Mit UART auf reinem TTL-Pegel zu arbeiten, ist nicht einmal eine Option außerhalb einer Leiterplatte, das ist einfach völlig unprofessionell und sogar I2C wäre dann eine viel bessere Wahl.

Abgesehen von der Frage nach den besten Alternativen (ich empfehle es nicht wirklich, aber es kann funktionieren), habe ich I2C erfolgreich über lange Strecken (zwischen Gebäuden) in der Produktion geführt und es hat jahrelang funktioniert.

  • Sie können die I2C-Taktrate bis auf 10 kHz reduzieren und zusätzliche Filterkappen auf die Leitungen setzen, um HF herauszufiltern.
  • Viele der Chips sind vollkommen zufrieden mit höheren Strömen als 1,5 mA und laufen mit 5,10 oder 20 mA, je nachdem, was Ihre Chips verarbeiten können
  • Stellen Sie sicher, dass Sie I2C-Chips (CMOS-Schmitt-Schwellenwerte) und nicht SMBUS (TTL-Pegel) verwenden, da diese weitaus anfälliger für Rauschen sind.
  • Führen Sie den Strom über die gleichen Drähte, haben Sie eine geeignete Umgehung.
  • paarweise verdrillte/abgeschirmte Kabel. http://www.i2cchip.com/i2c_connector.html#Crosstalk
  • Verwenden Sie einen Busschalter, um dieses Segment von lokalen I2C-Teilen zu isolieren
  • erkennen, dass Fehler zu erwarten sind und entwickeln Software darum herum. (dh wiederholen Sie z. B. Ihre Anzeige alle paar Sekunden, anstatt sie zwischen den Aktualisierungen stundenlang zu lassen)
  • Hüten Sie sich vor I2C-Bus-Deadlocks, die durch Rauschen entstehen können, das einen zusätzlichen Taktimpuls injiziert, und stellen Sie sicher, dass Ihr Master dies erkennt und damit umgeht. (Ich wette, der Arduino-Aktiencode nicht)

Siehe Abschnitt 19 I2C Bus Deadlock in http://www.i2cchip.com/pdfs/bl233_b.pdf