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:
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?
quelle
Antworten:
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.
quelle
Ein SPDT ( S ingle P ole D ouble T hRow) , um Ihre hocheffiziente Taste sein würde.
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.
quelle
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.
quelle
Eine Methode, die ich verwendet habe, nutzt die kapazitive Natur von CMOS-Eingängen.
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.
quelle
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.
simulieren Sie diese Schaltung - Schaltplan erstellt mit CircuitLab
quelle
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:
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.
quelle
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.
quelle