Wo ist die Entprellschaltung für entfernt montierte Tasten und Drehgeber zu platzieren

Ich habe eine Anwendung, bei der ein Druckknopf und ein mechanischer Gray-Code-Drehgeber (Benutzereingaben) entfernt von der Hauptplatine montiert werden müssen. 24" - 48" entfernt. Dies aus Platz- und Verpackungsgründen.

Ist es in Ordnung, die RC-Entprellschaltung auf der Platine und die Schalter/Encoder ferngesteuert über Kabel zu haben, oder muss die Entprellschaltung mit den Schaltern verbunden sein?

Encoderschaltung aus Datenblatt:

Geben Sie hier die Bildbeschreibung ein

Antworten (3)

Die Entprellung (und alle Rauschfilter, ESD-Schutzschaltungen) sollten sich auf der Hauptplatine befinden.

Die Schalter selbst benötigen nichts Lokales und es wäre auch nicht optimal, dort zusätzliche Schaltungen zu haben.

Bearbeiten: Wenn der Gray-Code -Encoder aktiv ist (optisch oder magnetisch), könnten einige Remote-Schaltkreise nützlich sein - sicherlich eine Bypass-Versorgung, vielleicht einige Vorwiderstände an den Ausgängen, vielleicht sogar ein lokaler Versorgungsregler.

Der Encoder ist der mechanische Typ.
Dann keine Sorge. Aber machen Sie sich Sorgen über ESD von Fingern usw. Auch RC ist keine Entprellschaltung, es sei denn, sie wird mit einem Schmitt-Trigger-Eingang kombiniert. RC kann aus anderen Gründen verwendet werden (Filterung und ESD), aber die Entprellung ist einfach und gut in der Firmware. Wenn es eine externe Entprellung erfordert, machen Sie möglicherweise etwas falsch (z. B. die Verwendung von Portwechsel-Interrupts anstelle von Abfragen).
Mein Gerät verwendet eine ereignisgesteuerte Zustandsmaschine und die Schaltfläche und der Drehgeber verwenden Interrupts. Ich verwende die aus dem Datenblatt vorgeschlagene "Entprell" -Schaltung - ich habe sie meiner Frage hinzugefügt.
Ich schlage vor, Polling bei < 1 kHz zu verwenden, nicht Interrupts. Ihre Ereignisse wären die entprellten Änderungen aus der (zeitgeberunterbrechungsgesteuerten) Abfrageroutine.
Ich muss sehen, wie sich das auf meinen Code auswirkt. Der Hauptschleife jedes Zustands muss die Abfrageroutine hinzugefügt werden. Vielleicht muss ich einen separaten Umfrage-Thread erstellen. Die aktuellen Interrupt-gesteuerten Eingänge funktionieren jedoch mit dem System.

Da Sie "Anwendung" erwähnt haben, gehe ich davon aus, dass Sie hier Code ausführen, der die Schaltflächen und Kontakte überwacht. Wenn das der Fall ist, kann ich Ihnen aus meiner Erfahrung sagen, dass es besser ist, Ihr Entprellen programmgesteuert durchzuführen. Erwägen Sie die Entwicklung einer Funktion, die Sie gelegentlich aufrufen, um nach Schaltflächen zu suchen. Ohne in eine bestimmte Sprache einzutauchen, was die Funktion tun würde, ist dies ...

  1. Setzen Sie als einmalige Initialisierung eine Variable auf den Wert des Millisekunden-Timers Ihres Systems und initialisieren Sie möglicherweise eine statische "Schaltflächenvariable" als Bitmap aller Ihrer Schaltflächen und setzen Sie sie auf Null (oder "-1", wenn "HIGH " ist der Standardzustand Ihrer Schaltflächen). Initialisieren Sie außerdem zwei Variablen, eine zur Darstellung Ihrer Entprellzeit in Millisekunden (beginnen Sie beispielsweise mit 20).
  2. Wenn Ihre Anwendung Ihre Funktion aufruft, sollte sie die Schaltfläche (oder mehrere Schaltflächen) überprüfen. Wenn im Vergleich zu Ihrer gespeicherten Variable keine Schaltfläche den Status geändert hat, geben Sie einfach die vorhandene gespeicherte Statusvariable der Schaltfläche zurück.
  3. Wenn eine Schaltfläche den Status geändert hat , überprüfen Sie Ihren aktuellen System-Millisekunden-Timer und subtrahieren Sie die Zeit, die in der Timer-Variablen gespeichert ist, die Sie zuvor initialisiert haben. Wenn die Differenz kleiner als Ihre Entprellzeit ist, ignorieren Sie die Änderung einfach und geben Sie die unveränderte Schaltflächenstatusvariable zurück.
  4. Wenn Sie zu diesem Schritt gelangen, HAT sich eine oder mehrere Tasten geändert UND mindestens Ihre angegebene Entprellzeit ist abgelaufen. Speichern Sie in diesem Fall den neuen Schaltflächenstatus in Ihrer Schaltflächen-Bitmap, initialisieren Sie den Timer erneut auf die aktuelle Millisekundenzeit des Systems und geben Sie die Schaltflächenvariable zurück.

Das ist auch alles. Sie haben sich nicht nur mindestens 2 Komponenten pro Taste (das RC-Netzwerk) gespart und effektiv einen "Brick Wall" -Filter erstellt, der viel präziser und konsistenter ist als das RC-Netzwerk. Außerdem haben Sie es sehr einfach gemacht, die alles wichtige Entprellzeit zu ändern, ohne Teile auszulöten.

Eine Anmerkung zu dieser Methodik: Es ist auch möglich, eine ähnliche Funktion per Interrupt aufzurufen, anstatt sie als Teil einer Round-Robin-Sequenz in Ihrer Hauptprogrammschleife aufzurufen. Meiner Meinung nach ist dies KEINE gute Idee, da ein defekter rauschender Kontakt viele Interrupts erzeugen würde, die Ihr Programm leicht blockieren könnten. Im Allgemeinen wurden in größeren Systemen, in denen ein Interrupt tatsächlich Tastenbetätigungen meldet (wie ein Tastatur-Interrupt in einem Computer), die Tastenbetätigungen bereits von einer kleinen dedizierten MCU in der Tastatur selbst vorverarbeitet. Wenn Sie es in einem kleineren System tun und ALLE Entprellungen selbst durchführen, ist die von mir vorgeschlagene Methode die bessere Wahl.

Ich mag den Software-Ansatz, aber ich verwende Interrupts für die Schaltfläche und den Encoder. Die Anwendung ist eine "ereignisgesteuerte Zustandsmaschine".
Sie können wahrscheinlich immer noch einen Timer-Interrupt einstellen, der so oft wie die von Ihnen gewählte Entprellzeit ausgelöst wird, was die von mir vorgeschlagene Funktion noch einfacher macht. :-) Wenn ein Tastenwechsel gefunden wird, wird er dann bereits aufgrund der Timerrate als entprellt bestätigt. Nach der Erkennung können Sie einen ausstehenden Zustand direkt in Ihrer Zustandsmaschine in die Warteschlange stellen. Ich schätze, ich mag einfach die Psudo-„Integrations“-Reaktion von RC-Filtern zum Entprellen nicht, und ich schätze, ein bisschen Geizhals, wenn es darum geht, Teile zu eliminieren (wahrscheinlich, weil ich am Ende so viele Platinen in meiner eigenen Garage stopfe; -)
Mir scheint das Polling mit dem Graycode-Encoder etwas schwierig zu sein, da ich nach zwei Eingängen suche und überwache, welcher sich zuerst geändert hat. Ich würde fast die Hardwarelösung für den Encoder bevorzugen.
Hier sind meine letzten 2¢. Ich habe kürzlich einen Gray-Code-Drehgeber für eine Audio-Lautstärkeregelung verwendet. Natürlich garantiert der Gray-Code selbst, dass sich zu einem bestimmten Zeitpunkt nur ein Kontakt ändern kann, was nett war, aber die Abfrage mit Software-Entprellung hat ziemlich gut funktioniert. Zum einen konnte ich durch Variieren der Entprellung steuern (oder vielleicht begrenzen), wie schnell der Benutzer die Lautstärke mit einer schnellen Drehung des Knopfes ändern durfte. Ich brauchte eine Weile, um die ideale Entprelleinstellung zu bestimmen, aber es wäre sicherlich ein Schmerz gewesen, diese Experimente durchzuführen, um ein RC-Netzwerk zu ändern.

Ob es besser ist, die Tastenentprellung programmgesteuert, in Hardware oder einer Kombination aus beidem zu handhaben, hängt von der Art der Prellung ab. Einige Arten von Knöpfen haben einen Widerstand, der sich unregelmäßig ändern kann, wenn sie gedrückt werden; Wenn sie langsam gedrückt werden, kann sich diese unregelmäßige Periode über einen beträchtlichen Bruchteil einer Sekunde erstrecken. Wenn ein Prozessor zwischen einem niedrigen Widerstand, einem hohen Widerstand und einem offenen Stromkreis unterscheiden kann, funktioniert das Ignorieren von Tastendrücken, bis ein niedriger Widerstand erkannt wird, und das Ignorieren von Freigaben, bis ein offener Stromkreis erkannt wird, gut. Wenn ein Prozessor solche Unterscheidungen jedoch nicht treffen kann, gibt es möglicherweise eine Grenze für viel Software, die allein ohne zusätzliche Hardware auskommen kann.

Der robusteste Ansatz besteht in vielen Fällen darin, ein System mit sowohl Schließer- als auch Öffnerkontakten zu entwerfen; ein derartiger Ansatz kann sowohl im gedrückten als auch im nicht gedrückten Zustand einen Ruhestrom von nahezu null ergeben, während er unter praktisch keinem Prellen jeglicher Form leidet. Ich sehe kein technisches Hindernis für die Entwicklung eines Drehgebers mit ähnlicher Funktionalität, aber ich kenne keinen solchen existierenden Geber.

Macht Sinn. Stimmen Sie zu, dass, wenn Hardware-Entprellung implementiert ist, diese entfernt vom physischen Schalter/Knopf, Encoder platziert werden kann?
@GisMofx: Wichtig ist, dass die Signale, die für eine robuste Ausgabe erforderlich sind, überall dort verfügbar sind, wo die Entprellung gehandhabt wird. Wenn man z. B. eine Gruppe von Tasten haben würde, die ein 74HC165-Schieberegister speisen, und sie das von mir erwähnte Problem des "zweifelhaften Widerstands" hätten, müsste Hardware, die beim Entprellen hilft, vor den Schieberegistern stattfinden (obwohl eine solche Hardware vielleicht die Form von Klimmzügen, die selektiv auf 2,8 oder 3,3 Volt ziehen könnten).