Hallo Forumsgemeinde,
Ich bin leider noch etwas neu auf dem Gebiet "low power". Nun habe ich
folgendes Problem:
Problem 1:
Bei einer Schaltung (Erkenung eines Protablen Moduls) soll der Prozessor
jeweils beim Flankenwechsel eines Schalters (Miniatur-Rollenendtaster)
aufwachen, und eine Aktion ausführen. Leider ergibt sich aus der
Anwendung, das beide Tasterstellungen jeweils relativ lange anstehen,
das heist die Schaltung kann bei gedrücktem Taster sowie auch bei
ungedrücktem Taster in den "Schlafmodus" gehen. Im Schlafmodus wird ca.
1.5uA benötigt (STOP2+RTC).
Ein PullDown/Up erzeugt folgende Ströme für folgende Widerstandswerte:
- 1k = 3mA
- 10k = 300uA
- 100k = 30uA
- 1M = 3uA
selbst wenn ein 1M Ohm Widerstand benutzt wird, fliessen über diesen
jeweils das doppelte vom MCU Verbrauch ab. Das ist sehr unschön. Die
"internen" Pull-Widerstände mit ca. 50k sind da auch keine Option.
Bei einer normalen Applikation wo eine Schaltung einfach aufwgewecht
werden soll, ist das ja auch kein Problem. In meiner Applikation leider
schon, da beide Schaltzustände über lange Zeit existieren können.
Gibt es für dieses Probelem eine einfache Lösung, welche den
Stromverbrauch senkt? Ziel wäre es, die komplette Schaltung von aktuell
5uA, in die nähe der 1.5uA zu bringen, da der meiste Strom aktuell über
den Widerstand abfliesst?
Problem 2:
Bei einer ähnlichen Schaltung, soll per internem ADC des STM32 die
Batteriespannung einer LiMno2 Batterie geprüft werden, anders als bei
LiIon Batterien, sinkt deren Spannung änlich einer 1.5V Batterie.
Befindet sich die Schaltung (ein Kabelloser Sensor) im Tiefschlaf,
verbaucht die Schaltung lediglich rund 330nA (Shutdown+RTC). Periodisch
wacht die Schaltung auf, misst den Messert des Sensors und versendet
diesen. Für die Betriebssicherheit wird die Batteriespannung über einen
Spannungsteiler gemessen. Dieser ist aktuell mit 5.6M/5.6M
dimensioniert. Diese wurden damals so gewählt, da höhere Werte im Format
0603 schwer zu beschaffen sind. Der Spannungsteiler ergibt also rund
11.2M. Bei einer vollen Batterie von 3V, fliessen über den Teile ganze
300uA ab. Dies verursacht Mathematisch gesehen, eine halbsolange
Batterielaufzeit im "Schlafmodus".
Gibt es hier eine Lösung den Stromverbrauch noch weiter zu senken?
Zu 1)
Wenn du einen Wechsler und genug Portpins hast, könntest du immer
umschalten und nur den jeweils offenen Kontakt abfragen.
Braucht halt 4 Pins (2x In, 2x Pull), Stromaufnahme sollte so auf Null
gehen.
Zu 2)
11,2M und 3V sind unter 300nA.
Mal ganz ab das ich kaum glauben kann das der ADC damit klar kommt (und
nicht eh schon Leckströme in der Größenordnung vorhanden sind):
Du könntest den Pluspol via FET abklemmen und nur messen wenn du wach
bist.
Aber ganz ehrlich:
Selbst mit 5µA ist bei bei den meisten Batterien im Stromverbrauch
unterhalb der Selbstentladung.
5µA sind pro Jahr 44mAh. Halten die Batterien überhaupt so lange?
Jens M. schrieb:> Zu 1)> Wenn du einen Wechsler und genug Portpins hast, könntest du immer> umschalten und nur den jeweils offenen Kontakt abfragen.> Braucht halt 4 Pins (2x In, 2x Pull), Stromaufnahme sollte so auf Null> gehen.
??? Wenn das ein Wechsler ist braucht man eigentlich gar keine Pullups
mehr und auch keine zusätzlichen Pins.
guest schrieb:> ??? Wenn das ein Wechsler ist braucht man eigentlich gar keine Pullups> mehr und auch keine zusätzlichen Pins.
Wenn es kein Wechsler ist, hängt's von den Anforderungen an die
zeitliche Auflösung ab: Periodischer Wakeup so etwa alle 10ms sollte bei
einem mechanischer Taster wohl ausreichen, da der selbst i. d. R. etwas
prellt.
Bei Wakeup den Portpin auf Digital-Ein mit Pull-Up oder -Down (je
nachdem, ob Taster nach Masse oder VDD), Zustand ermitteln und dann
Portpin auf von Pull-Up nach Pull-Down (oder umgekehrt) wechseln, dann
fliesst kein Strom mehr, schlafen legen. Je nach
Schlafmodus/Konfiguration bzw. genauem Typ des uC ist der Pin im
Schlafmodus hochohmig, oder der Pull-Up/Down bleibt aktiv (aber dennoch
kein Stromfluss).
Was die Batterieüberwachung anbelangt: Die Antwort mit 'nem MOSFET
(alternativ Analogschalter), oder bei den neueren STM32 (z. B. G0)
gleich den eingebauten Spannungsteiler mit internem Schalter dazu für
VBat-Messung. S. RM0444, 14.10 Battery voltage monitoring.
Jens M. schrieb:> Zu 1)> Wenn du einen Wechsler und genug Portpins hast, könntest du immer> umschalten und nur den jeweils offenen Kontakt abfragen.> Braucht halt 4 Pins (2x In, 2x Pull), Stromaufnahme sollte so auf Null> gehen.
Das Problem hier ist auch noch, das der Schalter abgesetzt auf einer
kleinen Platine ist, welches mit einem kleinen Kabel verbunden wird,
leider habe ich dort zu wenige Adern, somit kann ich nur mit einem Pin
Arbeiten, oder die Schalterplatine müsste ersetzt werden.
Gibt es denn keine Lösung dies zu lösen, das garkein Pull-Up nötig ist?
Ich meinte ich hätte an einigen IC's (z.b. Spannungsregler) schon Pins
gesehen die entweder "floatend" oder High sein können, oder beinhalten
diese einfach einen sehr hohen PullDown drinne?
> Aber ganz ehrlich:> Selbst mit 5µA ist bei bei den meisten Batterien im Stromverbrauch> unterhalb der Selbstentladung.> 5µA sind pro Jahr 44mAh. Halten die Batterien überhaupt so lange?
Mein beführchtetes Problem ist eher die Summe von "Problemchen". xuA
Selbstenladung, xuA Schlafstrom, xuA Leckstrom, das treibt in Summe
schon einges her. Und persönlich habe ich irgendwie den Anspruch etwas
technisch möglichst gut zu machen, also falls der Strom gesenkt werden
kann, wieso sollte man das nicht tun?
Udo schrieb:> Gibt es denn keine Lösung dies zu lösen, das garkein Pull-Up nötig ist?
Doch, ein Wechsler nehmen. Die Mitte an Deinen Portpin, ein Ende an VDD,
das andere an GND.
Den Spannungsteiler kannst du mit einem Transistor abschalten und wenn
der PullUp an einem Taster hängt, dann fließt der Strom ja nur wenn der
Taster gedrückt ist, wäre also eigentlich gar kein Problem.
Udo schrieb:> Das Problem hier ist auch noch, das der Schalter abgesetzt auf einer> kleinen Platine ist, welches mit einem kleinen Kabel verbunden wird,> leider habe ich dort zu wenige Adern
Dein bisheriger Schalter hat doch 2 Adern. Gehen die beide zu Deinem
Mikrocontroller oder nicht?
Udo schrieb:> eines Schalters (Miniatur-Rollenendtaster)
Hast du mal ins Datenblatt deines Schalters gesehen welche minimale
Werte für Spannung und Strom da angegeben sind? Ich denke damit erübrigt
sich die Problematik von selbst.
Die STM32 die ich kenne haben alle eine interne Referenz die der ADC
messen kann. Daraus kann man dann die aktuelle Betriebsspannung
berechnen, ganz ohne zusätzlichen Spannungsteiler.
Udo schrieb:> Gibt es für dieses Probelem eine einfache Lösung
Umschaltender Taster zwischen 0V und VCC.
Udo schrieb:> Gibt es hier eine Lösung den Stromverbrauch noch weiter zu senken
Nutze die Spannung als Betriebsspannung des uC und messe nur beim
Aufwachen mit dem internen ADC die Betriebsspannung.
guest schrieb:> Wenn das ein Wechsler ist braucht man eigentlich gar keine Pullups> mehr und auch keine zusätzlichen Pins.
Du meinst "den wechselnden an den Port, die beiden Ruhepole an plus und
minus"?
Das wäre suboptimal, da der Kontakt zwischendrin ja weder noch
kontaktiert.
ODer wie ginge es sonst?
Ich kenne nur die Lösung, das man an jeden Ruhepol je einen Input und
einen Pull-Output anlegt, der Wechsler ist fest GND.
Der µC muss dann immer den gerade aktiven Kontakt auf Pulldown schalten,
damit der Kontakt GND mit GND brückt (Strom also Null), der offene
Kontakt dagegen wird Pullup geschaltet und kann den zugehörigen Input
auf H ziehen.
Wenn der Kontakt wechselt, wird der Pin low, der Prozessor schaltet dann
dementsprechend wieder um.
Der Pullstrom fließt also nur so lange wie der Proz braucht aufzuwachen
und umzuschalten.
Udo schrieb:> Pins> gesehen die entweder "floatend" oder High sein können, oder beinhalten> diese einfach einen sehr hohen PullDown drinne?
Der ist nichtmal besonders hoch. Größenordnungen sind 50-100k.
A. B. schrieb:> Periodischer Wakeup so etwa alle 10ms sollte bei> einem mechanischer Taster wohl ausreichen,
Du meinst "aufwachen, Pull einschalten, evtl. reagieren, Pull
abschalten, schlafen"?
Und das braucht bei 10ms Wakeup-Takt weniger Strom als ein paar µA
dauerhaft zu pullen?
Ich bin jetzt nicht so der STM-Kenner, aber das erscheint mir schwer
möglich.
Udo schrieb:> also falls der Strom gesenkt werden> kann, wieso sollte man das nicht tun?
Grundsätzlich stimme ich dir zu, nur muss man sehen was für Aufwand
welche Kosten und/oder Nutzen verursacht.
Besser geht immer, aber wenn für doppelte Kosten aus 52 Wochen 54 Wochen
werden, lohnt das nicht.
Du bist durch den Kontakt z.B. eingeschränkt, da wirds dann teuer bis
unmöglich was zu reißen.
temp schrieb:> Die STM32 die ich kenne haben alle eine interne Referenz die der ADC> messen kann. Daraus kann man dann die aktuelle Betriebsspannung> berechnen, ganz ohne zusätzlichen Spannungsteiler.
Das ist gut.
Quasi rückwärts messen: VDD als Referenz, Uref messen. Etwas rechnen und
VDD kann ohne Spannungsteiler und Extrastrom bestimmt werden.
MaWin schrieb:> Umschaltender Taster zwischen 0V und VCC.
Find ich "bah", weil der Portpin wenn auch nur kurz im Umschaltmoment
offen ist.
Wurd emir zumindest so beigebracht.
Wäre das eine Industrietaugliche Lösung?
Jens M. schrieb:> Find ich "bah", weil der Portpin wenn auch nur kurz im Umschaltmoment> offen ist.> Wurd emir zumindest so beigebracht.> Wäre das eine Industrietaugliche Lösung
Industrie macht:
1
+-----10k----+
2
+5V --o\ | |
3
\o--+--|>o--|>o--+--|uC
4
GND --o 74HC14
Entprellt, ist nie offen, liegen in Ruhe immer 0V über den 10k.
MaWin schrieb:> Industrie macht:
Nennt sich "Bus Hold".
Und anstelle des 10 kΩ kann man auch den internen Pull-Up bzw. -Down des
Mikrocontrollers nehmen, und die beiden 74HC14 durch Software ersetzen.
(Das hat A.B. oben schon vorgeschlagen, aber mit periodischem Wakeup.)
Jens M. schrieb:> Du meinst "aufwachen, Pull einschalten, evtl. reagieren, Pull> abschalten, schlafen"?> Und das braucht bei 10ms Wakeup-Takt weniger Strom als ein paar µA> dauerhaft zu pullen?> Ich bin jetzt nicht so der STM-Kenner, aber das erscheint mir schwer> möglich.
Das hängt entscheidend von der Dauer des Wachzustandes ab. Wenn das
Verhältnis Wach/Schlaf klein genug ist, bleibt die mittlere
Stromaufnahme halt entsprechend klein. Und mit entsprechendem
Widerstand/Pufferkondensator tun die kurzen Pulse der Batterie auch
nicht mehr weh als die mittlere Stromaufnahme.
Auch sind 10ms recht kurz. Je nach Anwendung wären auch 20 - 100 ms
denkbar, aber das weiß halt nur der Anwender ... Entsprechend güstiger
wär' die Bilanz.
zu Problem 1:
Wenn das mit dem Wechsler nicht geht und nur zu wenige Leitungen zur
Verfügung stehen, täte ich den Taster mit Controllerinternem Pullup
pollen, wobei ich den Pullup jeweils nur für den Poll-Vorgang kurz
einschalten würde.
Sprich: µC schläft die meiste Zeit, wird alle ? ms geweckt, schaltet
Pullup ein, mißt nach, geht wieder schlafen.
Nachteile:
- natürlich erhöht dies ebenfalls den mittleren Stromverbrauch gegenüber
einer Lösung, die nur bei Flankenwechsel (interruptgesteuert) aufwacht.
- Zeitauflösung?
M.A. S. schrieb:> täte ich den Taster mit Controllerinternem Pullup> pollen
Ja
Udo schrieb:> Gibt es denn keine Lösung dies zu lösen, das garkein Pull-Up nötig ist?
Es gibt nur zwei Möglichkeiten: Entweder fließt Strom, oder es fließt
keiner. Du kommst nicht umhin, dass in einem der beiden Schaltzustände
Strom fließen muss.
Für alle anderen Lösungen brauchst du mehr Leitungen oder einen
Wechselschalter.
A. B. schrieb:> Aha, nun sind wir also beim Umschaltkontakt?!
Keine Ahnung, wo "wir" "sind".
Ich finde die Lösung interessant und möchte das mal testen, denn ich
habe "immer" die Variante mit den 4 Ports gemacht. Diese löst das
Problem anders.
Ob sie für den TS geeignet ist, kann ich nicht beurteilen.
Clemens L. schrieb:> Und anstelle des 10 kΩ kann man auch den internen Pull-Up bzw. -Down des> Mikrocontrollers nehmen, und die beiden 74HC14 durch Software ersetzen.> (Das hat A.B. oben schon vorgeschlagen, aber mit periodischem Wakeup.)
Wie geht das ohne den per. Wakeup? Dazu brauchts einen Proz, der Pullup
und Pulldown kann, oder?