Langstrecken-Übersprechen von Arduino-Tasten über Cat5e-Kabel

Ich entwickle ein Hardwaresystem, bei dem ein Arduino im Serverraum sitzt und über USB/seriell mit dem Hauptcomputer kommuniziert. Benutzer können Tasten an Remote-Panels drücken, um verschiedene Funktionen auf dem Computer auszulösen.

Das am weitesten entfernte Remote-Panel ist 250 Fuß entfernt und mit einem Cat5e-Kabel verbunden. Jedes Panel hat insgesamt 7 Tasten, wobei jeder der Drähte im verdrillten Paar verwendet wird, wobei 1 für Masse übrig bleibt.

Ich verdrahte jede der Tasten direkt mit dem Arduino, indem ich den internen Pull-up-Widerstand verwende. Bei dieser Implementierung scheint es viele Konsistenz- und Zuverlässigkeitsprobleme zu geben. Manchmal werden die Tastendrücke nicht registriert, und manchmal wird stattdessen der andere Draht im verdrillten Paar ausgelöst (orange / orange-weiß.)

Wie kann ich dieses Übersprechen und diese Inkonsistenz verhindern?

Entprellen in der Software, um Geister-Fehlalarme zu vermeiden. Verwenden Sie stärkere Klimmzüge, um falsche Falschmeldungen zu vermeiden. Versuchen Sie auch, kleine Kappen (0,1 - 10 uf) an jedem Eingang zu gnd, um zu vermeiden, dass winzige Impulse abgefangen werden. Wenn Sie jeweils nur eine Taste drücken müssen, schließen Sie jede an einen anderen Widerstandswert und Masse an und vervierfachen Sie dann die Verdrahtung: 4 für Masse, 4 für Signal. Ziehen Sie das Signal am Arduino-Ende hoch, sodass jede Taste einen eindeutigen Spannungsteilerausgang erzeugt, der vom ADC gelesen wird. Selbst bei Rauschen sollten Sie in der Lage sein, 7 eindeutige Werte einschließlich 0 und 1023 zu unterscheiden. Pullup einstellen, um Leitungsverluste zu kompensieren.
Bitte zeichnen Sie einen Schaltplan (bearbeiten Sie Ihre Frage mit dem Schaltungstool) von dem, was Sie haben.

Antworten (8)

Der Punkt des verdrillten Paares besteht darin, ein Signal und seine Rückkehr auf dem Paar zu haben. Die Verwendung der beiden Hälften eines Paars für ein nicht zusammenhängendes Signal ist eine unbeabsichtigte Verwendung, und die enge Verdrehung der beiden Hälften zusammen führt zu starkem Übersprechen, wie Sie erfahren haben.

Erwägen Sie die Verwendung eines Mikrocontrollers am Remote-Ende und eines Differenzsignals wie RS-422, um mit Ihrem lokalen Ende zu kommunizieren. Bei niedrigeren Geschwindigkeiten wie 9600 bps (ausreichend für 8 Tasten) sollten Sie keine Probleme aufgrund der Fehlanpassung zwischen der üblichen 120-Ohm-Impedanz für RS-422 und der 100-Ohm-Impedanz des Ethernet-Kabels haben.

Die beiden differentiellen Zweige der Signalleitung sollten sich auf derselben verdrillten Doppelleitung befinden.

Ich wollte RS-485 vorschlagen, aber das scheint genau dasselbe zu sein, nur die Verwendung von Tri-State-Ausgängen, um einen Bus zu machen?
@AndreKR, das ist richtig, RS485 ist im Wesentlichen eine leistungsfähigere Spezifikation, die ein einzelnes Twisted Pair mit mehreren Knoten teilen kann, die es zu unterschiedlichen Zeiten ansteuern. Ich weiß nicht genug über die ursprüngliche Anwendung in der Frage, um zu wissen, ob ein einzelner RS485-Bus machbar ist. Es sieht so aus, als ob sie eine Sterntopologie benötigen, die auf dem physischen Standort der Panels und des Serverraums basiert.

Da Sie wahrscheinlich keine ultraschnelle Reaktion auf die Tasten benötigen, würde ich zuerst versuchen, den Schalterleitungen einfache RC-Filter hinzuzufügen. Idealerweise auf der Mikrocontroller-Seite, aber ich denke, Sie würden auf der Switch-Seite immer noch davon profitieren. Sie erhalten Übersprechen, weil der Schalter beim Auslösen die Leitung mit einer scharfen Kante auf Masse legt. Diese scharfe Kante hat viel Hochfrequenzenergie, die in die benachbarten Drähte einkoppelt. Wenn Sie die Flanke mit einem einfachen RC-Filter verlangsamen, sollten Sie viel weniger Übersprechen bekommen und die Störfestigkeit im Allgemeinen erhöhen (wenn Sie dies auf der Seite des Mikrocontrollers tun). Wählen Sie eine Grenzfrequenz irgendwo um 100 Hz (siehe Wiki-Link unten).

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

https://en.wikipedia.org/wiki/Low-pass_filter#RC_filter

Ich mag diese Lösung, keine Notwendigkeit, es kompliziert zu machen, wenn ein Widerstand und eine Kappe das Problem beheben.

Wie andere vorgeschlagen haben, können Sie am anderen Ende etwas codieren und Differenzsignale über das Cat5e-Kabel übertragen.

Eine Alternative, die darauf beruht, dass es sich um eine menschliche Schnittstelle und folglich eine niedrige Datenrate handelt, ist die Verwendung von DTMF, dem Signalisierungsverfahren für Festnetztelefone mit Tonwahl.

Sie können einen DTMF-Encoder für etwa 5 US-Dollar von seriösen Quellen und einen Mehrkanal-DTMF-Decoder für etwa das gleiche erhalten. Die UI-Tasten müssen in einer Matrix angeordnet werden, sodass das Drücken einer Taste zwei Pins verbindet.

Einige Nachteile sind eine geringe Latenz und die Unfähigkeit, mehrere Tastendrücke gleichzeitig zu signalisieren.

Einige Vorteile. Sehr geringe Teileanzahl. Einfaches Debuggen. Hohe Zuverlässigkeit. Da es sich um eine Niederfrequenz handelt, muss der Abschluss nicht sehr präzise sein.

Diese Lösung ist nur für ein System geeignet, das keinen hohen Datendurchsatz erfordert, wie Ihres.

Die Schlüssel (Wortspiel beabsichtigt) dazu, die Sie vielleicht Ihrer Antwort hinzufügen möchten, sind, dass (a) dies genau wie die Telefonsignalisierung über ein einzelnes Paar funktioniert und (b) Twisted-Pair-Ethernet gut für die Telefonnutzung geeignet ist - wenn Sie Gehen Sie zurück zu Cat 3-Tagen war es ziemlich üblich, eine Telefonleitung (oder 2) mit Ethernet (das nur 2 Paare benötigte) in einem einzigen Kabel zu kombinieren.

Sie könnten auch ein Paar für Strom/Masse verwenden, um drei differentielle Paartreiber (vielleicht 3/4 eines AM26LS31) auf der anderen Seite mit Strom zu versorgen, um 7 mögliche Kombinationen zu machen und jeden Schalter eine eindeutige Binärziffer übertragen zu lassen, die am Arduino über dekodiert werden soll ein differentieller Paarempfänger mit 100-Ohm-Terminatoren. Sie müssen ein wenig Diodenlogik durchführen, aber der Vih des AM26LS31 beträgt 2 V, sodass dies kein Problem darstellen sollte.

Aufbauend auf Antworten und Kommentaren, die andere erwähnt haben:

  1. Das Übersprechen ist überschaubar, wenn Sie über genügend Entprellung verfügen. Sprich, 0,5 Sek.
  2. Der interne Pullup ist ein zu hoher Widerstand für diese Distanz. Ich würde für diese Entfernung maximal 1 km empfehlen.
  3. Achten Sie auch beim Arduino darauf, einen Keramikkondensator am Eingang (0,1 uF) zu verwenden, um Störungen zu beseitigen.
  4. Wenn dafür zu viel Rauschen vorhanden ist, können Sie auch einen Optokoppler zusammen mit der Software-Entprellung verwenden, aber ich glaube nicht, dass Sie ihn brauchen werden.

Die Entprellung erfordert jedoch möglicherweise etwas Benutzertraining, um sie an die 0,5-Sekunden-Verzögerung anzupassen.

Ich hatte vor ungefähr 4 Jahren ein ähnliches Problem, irgendwie. Ich habe CANbus über etwa 250 Fuß CAT5 ausgeführt. Alles lief gut, während das Kabel in der Box aufgerollt war (das Art-Sammelkabel kommt herein). Bei der Installation lief es komisch und das Signal wurde intermittierend. Das wurde gelöst, indem die Übertragungsgeschwindigkeit erheblich verlangsamt wurde. Allerdings löst das dein Problem nicht wirklich.

Wie andere angedeutet haben, haben Sie zwei Probleme, das Prellen des Schalters, das naturgemäß zu einer induktiven Kopplung zwischen benachbarten Drähten führt (in diesem Fall die verdrillten Paare). Sie verwenden CAT5 genau falsch, aber hey, CAT5-Kabel sind billig und einfach.

Ich gehe davon aus, dass Sie vermeiden möchten, mehr Komponenten an Ihre vorhandene Schaltung anzuschließen, das verstehe ich, aber ich stimme anderen Postern zu, dass 250 Fuß Kabel zurück zu Ihren Arduino-Eingängen eine Beschädigung Ihres Arduino riskieren.

Davon abgesehen ist das Entprellen der Schalter in der Software die kostenlose Möglichkeit, das Problem zu lösen. Eine einfache Verzögerung führt zu mittelmäßigen Ergebnissen. Eine ausführliche Beschreibung von Ganssle gibt es hier: http://www.ganssle.com/debouncing-pt2.htm Hier ist ein Algorithmus in C beschrieben (lesenswert): https://www.kennethkuhn.com/electronics/ debounce.c Ein anderer Typ hatte ein ähnliches Problem wie Sie und fand einen Kollegen, der den Code in einer Form implementierte, die leicht für einen Arduino implementiert werden konnte. Sein Beitrag ist hier: https://forum.arduino.cc/t/debouncing-many-switches-used-for-mcu-input-via-a-shift-register/489054/2 Dieser Typ geht auf eine Menge Nützliches ein detailliert und bietet Links zur Bibliothek auf Github ( https://github.com/tcleg/Button_Debouncer) wo sich die Programme befinden. Es ist robust, anpassbar und Sie können den Code anpassen, um die Tasten zusammen zu multiplexen, was Ihnen viel mehr Kombinationen als nur Ihre 7 Tasten ermöglicht.

Sie müssen wahrscheinlich ein wenig mit dem Code herumspielen, aber es ist ziemlich einfach und funktioniert gut.

Um auf die Vorschläge des anderen zurückzukommen, an beiden Enden ein Arduino zu verwenden und etwas wie RS-422 zu verwenden, um das Signal zu übertragen, kann ich diese Module vorschlagen (die RS-485 sind. Sie sind ziemlich nett, RS-485-Module: https : //www.droking.com/TTL-To-RS485-Module-DC-3.0V-30V-RS485-To-TTL-Mutual-Conversion-Hardware-Automatic-Flow-Control-Module-Converter-Module?search=rs485 billig und Sie müssen nur die seriellen Pins auf Ihrem Arduino verwenden und nur ein Paar Drähte verwenden.Die werden von den 5V- und GND-Pins auf dem Arduino gespeist.Sie ​​haben eine Verbindung zu Amazon.Diese sind schöner als die wirklich billigen Boards und RX-TX-LEDs helfen beim Debuggen.

250 Fuß und direkt in einen ungeschützten Mikroeingang? Ahh, vielleicht solltest du das nochmal überdenken!

Mikroprozessor-IO sollte fast nie direkt der Außenwelt ausgesetzt sein (ich sage fast, weil es einige Fälle gibt, in denen es schwer zu vermeiden ist).

Wenn ich dies zeichnen würde, würde ich Ihre Ein-Knopf-pro-Draht-Sache vielleicht gleich lassen (kein wirklicher Grund, dies nicht zu tun), aber die Vorgänge am Prozessor wären subtiler.

Erstens haben Schalter normalerweise sowohl einen minimalen als auch einen maximalen Schaltstrom, wenn Sie möchten, dass die Dinge zuverlässig funktionieren, und ich würde wetten, dass Ihre 100 uA oder so von diesem eingebauten Pullup bei weitem nicht genug Strom sind.

Zweitens wird das Filtern am Eingang sehr hilfreich sein.

Dies ist ungefähr das Minimum, das ich in dieser Situation verwenden würde:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

R2 versorgt die Schaltkontakte mit echtem Strom, um den erforderlichen Wetzstrom bereitzustellen, damit sie zuverlässig funktionieren. Stellen Sie ihn gemäß dem Wert des Schalterdatenblatts ein.

R1 dient zwei Zwecken, es fungiert in Kombination mit C1 als Filter, um jegliche HF von der Leitung zu entfernen, ein langer Draht ist schließlich eine perfekt cromulent Antenne, wenn Sie keine Gegenmaßnahmen ergreifen, es wirkt auch in Kombination mit den Dioden, um den Stoßstrom zu begrenzen das könnte durch ESD oder induzierte Überspannungen fließen und dem Mikro zumindest eine Chance geben.

Es ist durchaus üblich, dass die Schutznetzwerke in der Industrie mehr Teile ausmachen als der Rest des Systems, aber das ist der Preis für ein robustes Design.

Mein bevorzugter Ansatz für solche Dinge ist tatsächlich, einen analogen Eingang zu verwenden, EIN Paar Drähte und Vorwiderstände am entfernten Ende zu schalten, es richtig zu machen und der Prozessor kann kurze und offene Kabel sowie jede Kombination von bis zu erkennen ungefähr 6 oder so Tasten, nicht schlecht für einen Pin und eine kleine Handvoll Passive. Dieser Trick stammt direkt aus der Automobilpraxis, wo er bei Dingen wie am Lenkrad montierten Bedienelementen sehr verbreitet ist.

schematisch

Simulieren Sie diese Schaltung

Auf diese Weise können Sie jede Tastenkombination sowie ein kurzgeschlossenes oder offenes Kabel erkennen.

Die Verbindung der Mikroprozessor-Pins mit der Außenwelt ist bestenfalls wackelig. Sie müssen eine Art Schnittstelle verwenden, um das Signal zu bereinigen und das Mikro von der Außenwelt zu isolieren. Ein einfacher Spannungsteiler, der unten gezeigt wird, wird den Zweck erfüllen. Versorgen Sie den Schalter mit einer höheren Spannung, z. B. 12 V, falls vorhanden. Die Oberseite des Spannungsteilers geht zum Knopf, die Unterseite ist Masse, verbunden mit der Masse, die den Schalter mit 12 V versorgt. R1 ist ungefähr 1,4 K R2 ist 1 K, der Ausgang geht an den Mikrostift. Diese Schaltung ist zuverlässig und kostengünstig.

Geben Sie hier die Bildbeschreibung ein