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?
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.
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).
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
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.
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:
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:
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.
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.
dandavis
Spannungsspitze