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?
:
Bearbeitet durch User
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.
Oh, interessant, danke. Das muss ich auch mal ausprobieren.
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.
Jens M. schrieb: > Das muss ich auch mal ausprobieren. Aha, nun sind wir also beim Umschaltkontakt?! Also alles zurück auf Los ...
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?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.