Forum: Mikrocontroller und Digitale Elektronik PIC Stromverbrauch minimieren


von Busoni (Gast)


Lesenswert?

Hallo


ich versuche gerade, einen PIC an einem kleinen Solarmodul mit dem hier 
schon öfter beschriebenen Puffer aus Kondensator und Schottky-Diode zu 
betreiben. Nahe einer Lampe liefert das Modul genug Energie für den 
Dauerbetrieb, weiter entfernt sinkt der Strom unter 200 µA, der PIC 
stoppt (verzögert durch den Kondensator), die Solarspannung bleibt aber 
noch bei 2,5 V. Nun habe ich den PIC so programmiert, dass er per 
Watchdog nur ca. 4 x pro Sekunde aufwacht, einen Piezo knacken lässt und 
sofort wieder in den SLEEP-Modus geht. Während dem SLEEP sollte doch 
eigentlich der Kondensator laden können und dann ausreichend Energie für 
ein paar Millisekunden Betrieb bereithalten. Das ist aber nicht der 
Fall, der PIC geht bei der gleichen Lichtmenge aus wie im Dauerbetrieb 
(auch mit Piezodauerton). Das habe ich sowohl mit einem Goldcap als auch 
mit einem kleinen Tantal getestet, der für ca. eine Sekunde Betrieb 
Energie speichern kann.

Nun habe ich den Stromverbrauch mal gemessen und festgestellt, dass auch 
im SLEEP der gesamte verfügbare Strom (bis einige mA gestestet) durch 
den PIC fliesst (keine weiteren Teile, wirklich nur ein PIC12F675 und 
das Solarmodul). Muss ich die Pins noch irgendwo anschließen (+, -, 
Widerstände) oder im Programm was konfigurieren damit wirklich nur 1 µA 
verbraucht wird?

Vielen Dank

von holger (Gast)


Lesenswert?

Ohne Schaltplan/Programm wirst du wohl kaum Antworten bekommen.

Ein paar Tips: Schalte das AD-Modul aus bevor du schlafen gehst.
Schalte unbenutzte Pins auf Ausgang.

von Trinity Electronics (Gast)


Lesenswert?

@Busoni

Wo wird der sleep-Befehl aufgerufen? Der Controller geht nicht in den 
Sleep-Modus, wenn der sleep-Befehl am Ende einer 
Interrupt-Service-Routine (z.B. Timer-Interrupt) aufgerufen wird --> er 
muss in der main-Schleife aufgerufen werden.

Gruss

von holger (Gast)


Lesenswert?

>Interrupt-Service-Routine (z.B. Timer-Interrupt)

Interrupts verbieten bevor du schlafen gehst ist auch
eine gute Idee wenn der WDT zum wecken benutzt wird.
Und das Komparatormodul ausschalten könnte auch helfen.

von Oliver V. (busoni)


Lesenswert?

> Ohne Schaltplan/Programm wirst du wohl kaum Antworten bekommen.

tut mir leid, ich bekomm' da nichts hochgeladen, sondern nur immer 
wieder die meldung "Bitte den Dateianhang vor dem Absenden noch einmal 
auswählen!" und externe bilder gehn auch nicht einzubetten.

die mess-schaltung ist eh sehr simpel: + und - an den entsprechenden 
pins am PIC, das war's. den strom hab ich zwischen masse und PIC sowie 
zwischen pluspol und PIC gemessen.

der PIC wird so initialisiert:
1
BCF      STATUS,RP0
2
CLRF     GPIO
3
MOVLW    07h
4
MOVWF    CMCON ;
5
BSF      STATUS,RP0
6
CLRF     ANSEL ; alle digital
7
CLRF     TRISIO ; alle output

und dann geht's am anfang von main auch schon in den SLEEP.


ich hab das gefühl, dass irgendwas grundsätzlich verkehrt ist. wie 
können da mehrere mA durchfließen wo es nur ein uA sein sollte?

von holger (Gast)


Angehängte Dateien:

Lesenswert?

Geht doch ;)

Immer nur eine Datei dranhängen und nicht die Vorschau anklicken.
Keine BMP Dateien benutzen !

von Oliver V. (busoni)


Angehängte Dateien:

Lesenswert?

aha!

von Oliver V. (busoni)


Lesenswert?

OK, bei der Solarschaltung lag es vielleicht doch an der zu geringen 
Spannung unter Last (hatte vorher nur die Leerlaufspannung gemessen). 
Bei nur 1 V hilft natürlich auch kein Kondensator.
Trotzdem versteh' ich nicht, warum der Strom durch den PIC fast wie 
kurzgeschlossen hindurchweht. Selbst wenn man alle Stromfresser 
aktiviert hat, sollten es doch nie mehr als ein paar 100 uA sein bei 4 
MhZ mit internem Oszillator. Oder messe ich falsch? Ich verbinde die 
Masse am Messgerät mit der des Solarmoduls und den Pluspol vom Messgerät 
mit der Masse am PIC.

von Esko (Gast)


Lesenswert?

Mess doch mal welchen Innenwiderstand dein Multimeter bei der mA Messung 
hat.
Sicher einige Dutzend bis Hundert Ohm.
Kann gut sein das der Controller einschaltet, der Stromverbrauch 
ansteigt, die Versorgungsspannung zusammenbricht und der Controller 
resetet, sodass es wieder von vorne losgeht.

von Oliver V. (busoni)


Lesenswert?

Kann sein, dass das beim SLEEP so ist, ich kann das nicht messen - oder 
kann ich den Widerstand des Gerätes messen ohne ein zweites? Der 
Controller läuft ja durchaus, bei der Variante mit Piezo piepst er 
kontinuierlich, wenn etwa 200 uA fließen. Nur wenn ich dann noch mehr 
Licht scheinen lasse, fließt auch entsprechend mehr Strom, bis zu 
einigen mA.
Wenn ich dann den SLEEP Befehl einbaue, klickt der Piezo erwartungsgemäß 
mit der WDT-Frequenz (der Pin an dem der Piezo hängt wird ein- und 
gleich wieder ausgeschaltet, dann wird geschlafen), woraus ich schließe, 
dass das schlafen funktioniert. Nur der gemessene Strom ist der selbe.
Wenn ich jetzt das ganze genau in der Beleuchtung liegen lasse, wo der 
Controller gerade nicht mehr genug Strom für den Vollbetrieb hat, müsste 
doch eigentlich der Kondensator während dem SLEEP laden und die paar 
Millisekunden des aufwachens jeweils überbrücken können. Tut er aber 
nicht, weil anscheinend der Strom auch im Sleep über den PIC fließt.

von 1234 (Gast)


Lesenswert?

Ich kenn diesen PIC nicht und PIC im Allgemeinen wenig. Aber bei den AVR 
ist das Thema Stromspar ein laengeres Kapitel im Datenblatt wert. 
Mutmassungen bringen wenig. Was spricht dagegen, dieses Kapitel beim PIC 
genau durchzulesen ?

von Oliver V. (busoni)


Lesenswert?

Direkt über Stromsparen steht da kein eigenes Kapitel, nur ne Tabelle 
wieviel im Sleep verbraucht wird und was die einzelnen Funktionen noch 
extra kosten (WDT, A/D, usw). Alles vernachlässigbar wenig. Es steht 
nirgends, dass man diese oder jene Option an- oder ausschalten soll weil 
der PIC sonst allen Strom verbraucht der zur Verfügung steht und mehrere 
mA zieht.

Ich dachte, ich müsste vielleicht die nicht benötigten Pins mit Masse 
oder Spannung verbinden oder irgendeine Option in der Konfiguration 
setzen um das Ding abzudichten.

Naja, vielleicht ist es ja wirklich nur die Messung bzw die schwache 
Solarzelle. Aber dass die Solarzellenspannung bei angeschlossenem PIC im 
Sleep so stark einbricht (von 4 auf 1) ist doch auch komisch. Wenn nur 
ein paar uA verbraucht werden, sollte sie eigentlich nahe an der 
Leerlaufspannung der Zelle bleiben. Siehe auch die Kurvengrafik 
"Solarzelle unter Last" hier: 
http://www.sprut.de/electronic/solar/solar.htm

von 1234 (Gast)


Lesenswert?

Ich kann leider nicht genau helfen. Aber beim AVR spart man sehr viel, 
wenn man den Oszillator abstellt. Und dafuer einen 32kHz quarz an einem 
Pinpaar laufen laesst. Noch mehr spart man wenn man keinen solchen hat 
und auch keinen Clock mehr hat. Zum periodischen Aufwecken kann man 
einen RTC nehmen, der braucht noch 300nA. Zu beachten ist jeweils die 
Aufweckzeit, bis der Oszillator des AVR wieder stabil laeuft. Ich wuerd 
mal annehmen, dass das der PIC alles auch kann...

von Oliver V. (busoni)


Lesenswert?

Es ist ja eh 99% der Zeit nur der WDT an und auch sonst sind alle 
Sparmaßnahmen getroffen. Es sollten höchstens 10 uA verbraucht werden, 
aber man kann trotzdem das über 100-fache durchschicken. Als ob alle 
Pins auf Ausgang gestellt wären und direkt an Massen hängen würden. Sie 
sind aber garnicht verbunden.
Wie auch immer, es ist jedenfalls großartig, dass sich hier rund um die 
Uhr hilfsbereite Menschen tummeln. Das lindert zumindest meien 
Verzweiflung etwas. Vielen Dank allerseits.

von Severino R. (severino)


Lesenswert?

Oliver V. wrote:

> Naja, vielleicht ist es ja wirklich nur die Messung bzw die schwache
> Solarzelle.

Warum machst Du die Versuche resp. Messungen nicht zuerst mal an einer 
sauberen Stromquelle wie Labornetzteil oder so?

Wenn der PIC dann im Sleep in den uA Bereich geht, weisst Du, dass die 
Register und die Peripherie korrekt eingestellt sind.
Wenn der aber auch dann im Sleep im mA Bereich verbraucht, musst Du 
weder bei der Solarzelle noch beim Goldcap suchen.

von holger (Gast)


Lesenswert?

Was ist denn an dem PIC sonst noch so angeschlossen ?
Mach doch mal den Piezo ab und miss dann nochmal.

>Ich verbinde die
>Masse am Messgerät mit der des Solarmoduls und den Pluspol vom Messgerät
>mit der Masse am PIC.

Wenn du da mal nicht den Ladestrom vom Kondensator misst.

von Oliver V. (busoni)


Lesenswert?

> Warum machst Du die Versuche resp. Messungen nicht zuerst mal an einer
> sauberen Stromquelle wie Labornetzteil oder so?

ja das werd ich machen, hab zwar kein labornetzteil, aber der PIC 
programmer kann auch 2 bis 5 V zum betrieb der beispiel-schaltung 
liefern. dann poste ich hier die schaltung und den quelltext.


> Wenn du da mal nicht den Ladestrom vom Kondensator misst.

den hab ich schon rausgenommen.

von Oliver V. (busoni)


Lesenswert?

So, nachdem ich die Schaltung mit dem PICkit als Stromquelle gemessen 
habe ist alles wie es sein soll, minimale Ströme im Sleep. Mit 
Solarzelle & Kondensator funktioniert es jetzt plötzlich auch, ich weiss 
nicht ganau was zuvor das Problem war. Ich hatte erst eine Demo-Platine 
verwendet, vielleicht war die so aufgebaut, dass da immer Ströme 
flossen. Bei der später selbst aufgebauten war dann der MCLR Pin nicht 
verbunden, obwohl der Master Clear Reset aktiviert war - da kann man 
dann natürlich alles mögliche messen.

Jedenfalls läuft jetzt alles so wie geplant, der PIC bildet mit einer 
Taschenrechner-Solarzelle, einem Kondensator und einem Piezo ein 
Taktell, das auch im Dämmerlicht noch regelmäßig klickt (die 
WDT-Frequenz ist allerdings zu instabil und zu grob einstellbar für eine 
ernsthafte musikalische Verwendung, war ja auch nur als Test gedacht).

Das einzige Problem ist jetzt noch, dass der PIC, einmal ganz 
ausgegangen, eine recht hohe Leistung braucht, um wieder anzuspringen. 
Bei der Messung mit Spannung vom Programmer zeigte sich, dass ca 180 uA 
fließen, wenn der PIC aus ist (MCLR low). Um über diese Leistung zu 
kommen und den Kondensator zu laden, muss man das ganze schon ein paar 
Sekunden direkt vor die Lampe halten.

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
Noch kein Account? Hier anmelden.