Intelligente Methoden zum Erkennen einer Taste (weniger Stromverbrauch)


28

Während eines Meetings für ein bestimmtes Projekt wurde ich gebeten, über die Art und Weise nachzudenken, wie ein Knopfdruck mit einer MCU erkannt werden kann. Die Erkennung sollte so wenig Strom wie möglich verbrauchen. Auf den ersten Blick dachte ich an die typische Strecke mit Pull-Up oder Pull-Down:

schematisch

simulieren Sie diese Schaltung - Schaltplan erstellt mit CircuitLab

Einige Anti-Bounce-Funktionen werden hier nicht berücksichtigt, da dies den Rahmen dieser Frage sprengt. In beiden Fällen hängt der Gesamtstromwert, der fließt, vom Widerstandswert ab, wenn die Taste gedrückt wird. Um es (den Strom) zu minimieren, könnte ich den Widerstandswert erhöhen, aber nicht so sehr, da es, wenn ich recht habe, auch vom Leckwert des Eingangsstifts abhängt. Außerdem würde sich ein großer Widerstand langsam erholen.

Meine Frage lautet wie folgt: Welche intelligenten Methoden gibt es, um einen Knopf zu erkennen, der keinen Strom verbraucht (normalerweise für Anwendungen mit hohem Stromverbrauch)? Gibt es Methoden, die beim Drücken der Taste kaum Strom verbrauchen?


5
Ein Pulldown von 10k verbraucht fast keinen Strom. 3,3 V ergeben 330 uA. Und bei den meisten modernen MCUs haben Sie die Möglichkeit, intern eine einzurichten, die einen noch höheren Widerstand aufweist. Davon abgesehen können Sie die Tastenspeisung von einem MCU-Pin über einen BJT oder MOSFET aktivieren. Aktivieren Sie es nur während des Lesens und lesen Sie mit Polling.
Lundin

27
@Lundin In "modern" Begriffen, 330 A kann einen hohen Strom sein ...μ
awjlogan

6
In der Tat können viele Mikrocontroller Schlafströme von nur 2-10 μA erreichen. Es ist traurig, 30-mal so viel mit einem einzigen Pulldown zu verschwenden, besonders in einer batteriebetriebenen Situation.
Whatsisname

1
Wie groß ein Widerstand ist, den Sie für einen Pulldown verwenden können, hängt von der Pin-Impedanz ab und von der Spannung, mit der sie schalten. Angenommen, Sie haben einen 3,3-V-Pin in einem Zustand mit hoher Impedanz, der auf 2,4 V umschaltet. Alles, was Sie wirklich brauchen, ist eine geringfügig niedrigere Impedanz als der Eingang. Ich würde empfehlen, ein Potentiometer anzubringen und zu messen, wie hoch der Wert eines Widerstands ist, mit dem der Stift zuverlässig arbeitet, und dann den Wert um 20% zu senken, um einen Spielraum zu behalten.
Betrunkener Code-Affe

Antworten:


29

Eine Schwachstrommethode, die ich einmal verwendet habe, war das Anschließen eines Schalters zwischen zwei Mikrocontroller-E / A-Pins.

Ein E / A wurde als Ausgang (SWO) konfiguriert. Der zweite wurde als Eingang (SWI) konfiguriert, dessen programmierbares internes Pull-up aktiviert ist.

Der Schaltzustand wurde selten (alle 10 ms) von einer Software-Interruptroutine abgetastet. Die Lesesequenz war: SWO niedrig fahren, SWI lesen, SWO hoch fahren.

Dies bedeutete, dass ein gedrückter Schalter nur den SWI-Pulldown-Strom für weniger als 1 us durch sich selbst und SWO zog, während ein nicht gedrückter Schalter keinen Strom zog. Diese Stromaufnahme für <1 us alle 10 ms führte zu einem winzigen durchschnittlichen Stromverbrauch.


Es ist fraglich, warum Sie das Hochziehen mit dieser Technik benötigen. Sequenz SWO Low, SWI lesen, SWO High, SWI Read kann ausreichen, um festzustellen, ob die Pins miteinander verbunden sind. Sie können den SWO auch auf mehrere Switches verteilen.
Trevor_G

8
@ Trevor Es ist keine besonders gute Idee, den Eingang potentialfrei zu lassen, wenn der Schalter geöffnet ist. Abhängig von der Technologie kann dies dazu führen, dass der Eingangspuffer Strom verbraucht, wenn sich sein Eingang in einem Zwischenzustand befindet.
RoyC

1
@Trevor Multipliziert den Pull-up-Widerstand effektiv mit dem Tastverhältnis sw1 sw2. Es bleibt ein Pull-up, das uns zum OP-Schema 1 zurückführt. Es kann in einer geräuscharmen Umgebung funktionieren.
RoyC

2
Muss die MCU nicht wach bleiben, um das Polling durchzuführen, anstatt sich auf einen Interrupt zu verlassen?
AndreKR

5
Hallo @AndreKR, wir hatten eine batteriebetriebene Mikrocontroller-Anwendung und es mussten mehrere Schalter angeschlossen werden, so dass wir diese Technik verwendeten, da es ziemlich mühelos war. Wir hatten keine MCU nur zur Schaltererkennung eingebaut. Die MCU zeichnete zwischen ihren 10-ms-Interrupts etwa 900 nA im Ruhezustand auf, sodass sich die Einsparungen beim Hochziehen auszahlen.
TonyM

23

Ein SPDT ( S ingle P ole D ouble T hRow) , um Ihre hocheffiziente Taste sein würde.

Bildbeschreibung hier eingeben

Quelle: http://www.ni.com/white-paper/3960/en/

In Ihrem Fall würde der 1P an die MCU gehen, der 1T an VCC, der 2T an GND.


+1 .. es hat mich immer genervt, dass Subminiatur-SPDTs entweder sehr schwer zu finden sind oder viel zu viel kosten ...
Trevor_G

1
@ Trevor Ja ... einige Dinge sind leider sehr überteuert. Während andere Artikel unterbewertet sind (MCU für ein Beispiel). Sie können nicht alles haben.
Harry Svensson

Das ist eine großartige Idee. Leider konnte ich keine SPDT CMS-Schaltfläche finden, die meinen Anforderungen entsprach. Ich werde diese Schaltung jedoch im Auge behalten
vionyst

10

Wie lange wird die Taste gedrückt? Wenn es sich nicht um einen Kippschalter handelt (der seinen Zustand beibehält), sondern um einen Momentschalter, ist der Strom, der beim Drücken der Taste fließt, aufgrund der kurzen Zeit, in der die Taste tatsächlich geschlossen ist, weitgehend irrelevant.

Jede der beiden von Ihnen gezeigten Schaltungen ist in Ordnung, es spielt keine Rolle.

Sie können davon ausgehen, dass der Eingangsverlust und / oder der Strom in einem MCU-Eingang vernachlässigbar ist . Alle MCUs sind heutzutage in CMOS-Technologie und haben praktisch keinen Eingangsstrom. Also hör auf darüber nachzudenken, es ist nicht da.

Anstelle eines externen Widerstands können Sie auch den internen Pull-up-Widerstand verwenden, der in viele MCU-Eingänge integriert ist. Dieser Widerstand hat möglicherweise einen relativ niedrigen Wert (möglicherweise 50 kOhm), sodass beim Drücken der Taste ein geringer Strom fließt.

Sie können auch 1 Mohm Widerstand für ein Pull-Up / Pull-Down verwenden. Nur in sehr "schmutzigen" Umgebungen (elektrisch gesehen) benötigen Sie möglicherweise einen niedrigeren Wert. Sie können auch einen 100-nF-Kondensator parallel zum Schalter schalten, um Störungen durch andere Schaltkreise in der Nähe zu unterdrücken.

Pro-Tipp: Reservieren Sie einen Platz für einen solchen Kondensator auf der Platine, montieren Sie jedoch keine Kappe. noch. Bei Problemen: Platzieren Sie es und prüfen Sie, ob dies hilfreich ist.

Um den Status des Switches zu ermitteln, verwenden Sie entweder Polling (wie in TonyMs Antwort) oder einen Interrupt . Es hängt von der Anwendung ab, welche für den Stromverbrauch (der MCU) besser ist.


Eigentlich ist der Knopf nur ein Moment, aber die Zeit, die er gedrückt wird, kann lang genug sein (Minuten)
vionyst

Wenn das Gerät rund um die Uhr in Betrieb ist, können einige Minuten immer noch nicht viel bedeuten. Wichtig ist der Arbeitszyklus, 5 Minuten pro Stunde sind 5 x 60/3600 = 8,3%. Selbst bei einem Strom von 100 uA würde der Switch in meinem Szenario durchschnittlich 8,3 uA verbrauchen . Meine Botschaft ist: Konzentrieren Sie sich nicht zu sehr auf den Strom, den der Schalter beim Drücken verbraucht, ohne ihn mit dem Stromverbrauch des gesamten Systems zu vergleichen. Nur wenn die Beiträge gleich sind, ist es sinnvoll, den Stromverbrauch des Schalters zu verbessern. Es hat keinen Sinn, einen 0,1-uA-Schalter zu verwenden, wenn die MCU kontinuierlich 1uA verwendet.
Bimpelrekkie

"Es hat keinen Sinn, einen 0,1-uA-Schalter zu verwenden, wenn die MCU kontinuierlich 1uA verwendet." das klingt aus. Ich denke du meinst 1uA Peak. 10% nur für den Umstieg wären überhöht;)
Trevor_G

@ Trevor Keine Spitze, ich meine 1uA Durchschnittsstrom für die MCU, aber 0,1uA, wenn der Schalter gedrückt wird. In Kombination mit einem Schalter mit 0,1 A, der nur für (relativ) kurze Zeit gedrückt wird, trägt der Schalter fast nichts zum durchschnittlichen Gesamtstromverbrauch bei, da der durchschnittliche Strom 100% x 1 uA + 8,3% * 0,1 uA = 1,0083 uA beträgt (8,3% aus dem obigen Kommentar wiederverwendet).
Bimpelrekkie

2
Ja, es liest sich so, als hättest du 0.1uA Durchschnitt auf dem Schalter gemeint. Was für einen Dip-Schalter nicht unangemessen wäre.
Trevor_G

10

Eine Methode, die ich verwendet habe, nutzt die kapazitive Natur von CMOS-Eingängen.

schematisch

simulieren Sie diese Schaltung - Schaltplan erstellt mit CircuitLab

In dem Stromkreis über dem Schalter kann der Pulldown-Widerstand im geschlossenen Zustand die Eingangskapazitäten des GPIO auf Masse laden / entladen.

Der Trick bei dieser Schaltung besteht darin, die bidirektionale Natur eines GPIO zu verwenden, um den Eingang auf einem logisch hohen Pegel zu halten, wenn der Schalter offen ist.

Die Steuerroutine schaltet den Stift periodisch auf einen hohen Pegel oder aktiviert kurz das Hochziehen, lange genug, um eine Ladung der Kappen aufrechtzuerhalten. Der Eingangsstift wirkt dann wie ein dynamisches Speicherbit und hält bei den meisten Geräten diese Ladung für eine beträchtliche und verwendbare Zeitdauer.

Bei korrekter Konfiguration entlädt sich die Ladung auf dem Pin schneller als die Aktualisierungsrate, wenn die Taste gedrückt wird. Dieser Zustand kann dann als Teil des Auffrischungsalgorithmus als ein Lesevorgang vor der Auffrischungsoperation erkannt oder zum Auslösen eines Interrupts verwendet werden.

Während des Auffrischimpulses wird kurz Strom verbraucht, um sowohl die Kondensatoren als auch den Widerstand aufzuladen und zu schalten, wenn dieser geschlossen ist. Die Länge des Auffrischimpulses ist jedoch kurz und die Abfragefrequenz führt dazu, dass der Auffrischstrom relativ unbedeutend ist.

Offensichtlich ist diese Methode aktiv. Wenn das Mikro in den Ruhezustand versetzt wird, ist der Zustand des Schalters beim Aufwachen unbestimmt. Der erste Auffrischungszyklus nach dem Aufwecken muss den gelesenen Pin ignorieren. Diese Methode sollte auch nicht zum Aufwecken des Mikros verwendet werden. Vor dem Zubettgehen ist es auch ratsam, den Stift als niedrigen Ausgang zu aktivieren, um ihn im stromlosen Zustand zu parken.

Zum Lesen von statischeren Schaltern, wie z. B. Einrichtungs-DIP-Schaltern, kann eine dedizierte Routine anstelle eines kontinuierlichen Auffrischungszyklus verwendet werden. Nach dem Lesen sollten die GPIO-Pins in einem aktiven niedrigen Ausgangszustand (Nullstrom) "geparkt" werden, um das Problem der schwebenden Eingänge zu vermeiden.

HINWEIS: Diese Technik leidet ein wenig unter Rauschempfindlichkeit, wenn die Spurenlängen lang sind und sich durch einen verrauschten Bereich bewegen. Daher sollte R1 in der Nähe des Eingangsstifts liegen. Ich würde es jedoch nicht empfehlen, wenn Sie einen Schalter in einiger Entfernung an einer Frontplatte anbringen möchten, es sei denn, Sie fügen dem Pin eine zusätzliche Kapazität hinzu.


1
Dies scheint in der Tat sehr anfällig für EMI zu sein. Wenn irgendeine Form von Radioenergie in diesen Stromkreis gelangt und ich denke, alle Wetten sind aus. Gut, dass drahtlose Geräte heutzutage nicht so verbreitet sind :)
Lundin

@Lundin es ist nicht so schlimm, wie du vielleicht denkst. 30pF und ein Megapixel ergeben einen recht guten Filter.
Trevor_G

8

Wenn es sich bei Ihrer Taste um einen Piezoschalter handelt, ist die einzige erforderliche Leistung die Leistung, die durch Drücken der Taste erzeugt wird.

Zum Beispiel: R2 / C1 sammeln die durch Drücken des Piezo erzeugte Energie. D1 verhindert, dass die C1-Spannung zu hoch wird. R1 leert C1, wenn die Taste losgelassen wird. Das MCU-GPIO muss sich im Eingangsmodus ohne Pull-Modus befinden. Voilà, Taste erkennen mit Null Stromaufnahme aus der Versorgung.

schematisch

simulieren Sie diese Schaltung - Schaltplan erstellt mit CircuitLab


3
Hmm, können Sie einen funktionierenden Prototyp davon erstellen / entwerfen und den Nutzen der Lösungen mit einem normalen Schalter zeigen, den wir seit 30 Jahren verwenden?
Bimpelrekkie

Sicher. Ich habe ein Beispielschema hinzugefügt. Bauen Sie das einfach. Vorteil ist, dass im geschlossenen oder offenen Zustand kein Strom aus der Versorgung gezogen wird. Zu den Nachteilen gehört eine unzureichende Steuerung des zum Aktivieren des Schalters erforderlichen Aufwands (ein aktiver Schaltkreis wäre besser, aber dies vereitelt den äußerst geringen Vorteil des Schaltkreises), und es handelt sich um ein neuartiges Design im Vergleich zum 30 (300?) Jahre alten normalen Schalterkonzept.
Heath Raftery

Trotzdem hat mein Rechner viele Knöpfe und läuft mindestens 5 Jahre auf einer Knopfzelle. Ich sehe immer noch nicht, wie Ihre Lösung dazu beitragen würde. Ich denke immer noch, dass es eine "Lösung" für ein nicht existierendes Problem ist. Und auch teurer.
Bimpelrekkie

1
Oh ich stimme zu! Es erfüllt die ursprünglichen Kriterien "verbrauchen so wenig Strom wie möglich", aber warum das Sparen von weniger als einem Millijoule tatsächlich sinnvoll ist, ist schwer vorstellbar.
Heath Raftery

Macht die Eingangsimpedanz der MCU wegen der hohen Ausgangsimpedanz des Piezo nicht schlimme Sachen?
Scott Seidman

5

Wenn das Gerät in der Lage sein muss, auf unbestimmte Zeit in einem der beiden Zustände zu bleiben, ist die Verwendung eines SPDT-Schalters die Methode mit der geringsten Leistung, da ein statischer Stromkreis so geschaltet werden kann, dass er keinen Strom über seine eigene interne Leckage und den des Schalters hinaus zieht. Ein zusätzlicher Vorteil von SPDT-Schaltern besteht darin, dass sie nahezu perfekt entprellt werden können, unabhängig davon, wie schnell sie betätigt werden oder wie mürrisch die Kontakte sind, vorausgesetzt, ein Kontakt hört auf zu springen, bevor der andere zum ersten Mal als geschlossen gelesen wird.

Es gibt zwei gute Ansätze, solche Schalter zu verdrahten:

schematisch

simulieren Sie diese Schaltung - Schaltplan erstellt mit CircuitLab

Der erste Ansatz erfordert einen Widerstand weniger als der zweite, aber der zweite ist toleranter gegenüber einer Überlappung zwischen den beiden Polen (er zieht mehr Strom als üblich, schließt jedoch die Versorgung nicht ab). Es ist zu beachten, dass, wenn der Schalter über einen längeren Zeitraum hinweg in einen Zustand mit mäßigem Widerstand übergeht, dieser erheblich mehr Strom als gewöhnlich verbrauchen kann, während des normalen Betriebs jedoch keiner der Widerstände einen nennenswerten Strom führt, außer in dem kurzen Moment zwischen dem Wenn der Schalter seinen Zustand ändert, reagiert der Ausgang.


2

Verwenden Sie den internen Pullup des Mikrocontrollers und deaktivieren Sie den Pullup, wenn die Presse erkannt wird. Aktivieren Sie es dann gelegentlich erneut kurz, um den Schaltflächenstatus zu überprüfen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.