Forum: Mikrocontroller und Digitale Elektronik Stromverbrauch PIC32 senken


von Raph (Gast)


Lesenswert?

Hallo Zusammen


ich habe mein eigenes PIC32 Board mit ADP 1111 Step Up Wandler 
aufgebaut..3,3V auf 5 V ( % deshalb weil ich noch 5 V für andere 
Sensoren auf der Platiene brauche) die 5 Volt werden dann mit einem LDO 
033C0 wieder auf 3,3 V geregelt.( sicher nicht die beste Lösung)

Der PIC mißt 3 AD Werte und sendet sie via UART @ 9600 weiter...
dabei nimmt er pro Kanal 25 Messewerte für eine Mittelwertbildung
Das ganze Programm läuft als Schleife


Mein Problem der PIC scheint fast 200 mA zu verbrauchen.
kann das Stimmen ?

Wenn der PIC nicht an ist ... also "Blank"  zieht die Schaltung nur
ca. 10 mA.

Wie kann ich den Stromverbruach des PICs senken ?#

Gruß

Raph

von Frank M. (frank_m35)


Lesenswert?

Den genauen Typ hast du nicht angegeben, aber 200mA scheinen zu viel zu 
sein.
Wirf einen Blick in das Datenblatt, dann siehst du die typische 
Stromaufnahme unter bestimmten Bedingungen.
Zudem, miss einmal hinter dem LDO um zu sehen was der PIC wirklich 
verbraucht.

Zur Reduktion des Stromverbrauchs solltest du ebenfalls das Datenblatt 
lesen, dort stehen die Methoden drin.

Generell gilt:
Desto niedriger die Taktfrequenz, desto geringer der Stromverbrauch. Für 
deinen Einsatz kannst du den Takt sehr sehr stark reduzieren, der PIC32 
muss ja fast gar nichts machen.

Ebenso scheint der PIC nach deiner Beschreibung nach, ständig und somit 
viel zu oft zu messen, was vermutlich quatsch ist. Überdenke wieviele 
gemittelte Werte du letztendlich pro Sekunde am USART ausgeben willst. 
Vielleicht jede Sekunde? Versuche mit Timer (bspw. Periode 100ms) und 
Interrupts zu arbeiten. Der Timer löst einen Interrupt alle 100ms aus, 
welcher bspw. die AD Wandlung startet (vermutlich hat der PIC einen 
Buffer, in den du automatisch alle drei Messungen auf einmal legen 
kannst.) und einen Counter jedes mal hochzählt. Mehr machst du im 
Interrupt nicht. Also nur AD-Wandlung starten, Counter incrementieren, 
Interrupt verlassen, nicht warten bis die Wandlung fertig ist.
In deiner Schleife wartest du nun bis die Wandlung abgeschlossen ist 
(Flag überprüfen). Den Wert speicherst du, verrechnest du, ... Hat der 
Counter 10 erreicht gibst du den Mittelwert auch gleich noch über USART 
aus.
In der Zeit nach abgeschlossener Messung und vor neuer Messung liegen 
sicherlich 99ms in der der uC nichts tun muss. In dieser Zeit kannst du 
ihn schlafen legen. Aufgeweckt wird er durch den Timer, der den 
Interrupt auslöst, der einen neue Messung startet, ...

Das mit dem Schlafen legen ist optional, das mit dem Timer und Interrupt 
würde ich aber auf jeden Fall so wie erwähnt oder anders (vielleicht 
noch geschickter) realisieren, damit du den USART nicht unnötig 
voll-müllst und brauchbare Messwerte in festen Intervallen erhälst.

von Achim S. (Gast)


Lesenswert?

Raph schrieb:
> Wenn der PIC nicht an ist ... also "Blank"  zieht die Schaltung nur
> ca. 10 mA.

klingt für mich, als sei was krank. Kann man dem µC denn schon anfühlen, 
dass er warm wird (0,6W)?

Aber mit deiner Versorgung (3,3V -> 5V -> 3,3V) weiß man natürlich nicht 
wirklich, wie viel Strom der Pic wirklich zieht und welcher Faktor an 
Wandlerverlusten abgezogen werden muss. Kannst du den Controller nicht 
mal auf die "primären" 3,3V klemmen um zu sehen, wie viel er wirklich 
zieht?

Wenn es dann immer noch >60mA sind würde ich zuerst suchen, ob nicht 
versehentlich ein IO eine niederohmige Last oder einen Kurzschluss 
treibt. Ohne externe IO-Ströme sollte der interne Verbrauch laut 
Datenblatt bei typ. 0,5mA / MHz Taktfrequenz liegen.

Falls es wirklich der interne Verbrauch sein sollte, den du reduzieren 
musst:
1) niedrige Taktfrequenz wählen (so hoch, dass die Rechenleistung noch 
für deine Aufgabenstellung reicht. Allzu viel rechnen muss der Bursche 
in deiner Anwendung ja nicht).
2) keine Zeit in Warteschleifen verbringen (auf ADC warten bzw. auf UART 
warten) sondern so oft wie möglich in den Sleep-Mode gehen und sich von 
den Interrupts (ADC, UART, Timer) wecken lassen.

von Raph (Gast)


Lesenswert?

Vielen Dank für die guten Antworten !

ja der PIC32MX460F512L wird ein bisle warm wird er schon, circa 30-45 
°C, sollte eigentlich nicht sein.

Da ich in selber eingelötet habe schon möglich das ein Kurzsschluß wo 
sein kann...bei den 100 Pins

Ich betreibe ihn grad mit  8 MHZ Quarz und intern mit 80 MHZ

sicher reichen da auch schon 10 MHZ völlig aus ?

Könnte ich auch den internen Oscilator nehmen um Strom zu sparen ?

"0,5mA / MHz Taktfrequenz liegen" interner Takt oder externer Quarz ?
0.5 mA * 80 = 40 mA

Werde dann die nächsten Tage das Programm von einer Schleife auf 
Interrupt Timer basiert umschreiben...

In der tat ist das nicht optimal mit meiner Spannungsversorgung bei der 
nächsten Version der Platine werde ich das noch mal ändern...

Gruß

Raphael

von Frank M. (frank_m35)


Lesenswert?

Laut Datenblatt sollte er so um die 55mA verbrauchen. Vermutlich hast du 
ein Pin kurzgeschlossen. Benachbarte Pins kannst du ja auch kurz mit 
einem Multimeter durchmessen, dann siehst du ja am schnellsten ob ein 
kurzer wo ist. Oder unter einer guten Lupe bzw. Mikroskop die Pins genau 
betrachten.

Oder es ist etwas generelles falsch an deiner Schaltung.

Für das was du machst reichen 8MHz völlig aus.
Ein externer Quarz ist genauer, der interne wird auch für UART, vor 
allem bei der geringen Geschwindigkeit, noch mehr als ausreichen. Zudem 
braucht er nicht so lange zum Anschwingen, wodurch, falls du Sleep 
nutzen willst, das Aufwecken schneller geht.

Wenn du von 3.3V auf 5V hochregelst um von da wieder auf 3.3V runter zu 
kommen, warum verwendest du nicht gleich die schon vorhandene 3.3V?

von Raph (Gast)


Lesenswert?

Danke !

Die 3 Volt kommen von 2 AA Batterien (sorry hab ich vorher ausgelassen)
die am ADP1111 angeschlossen sind

Mikroskop hab ich da.

Im Falle eines Kurzschluß müßte dann wohl ein Pin der beim 
initialisieren auf High geht... mit Masse kurzgeschlossen sein ? ... 
weil der Stromverbrauch nur beim "rechnenden PIC" auftritt ?

Gruß

Raph

von Frank M. (frank_m35)


Lesenswert?

Du initialisierst ja vermutlich nicht alle Pins, also würde ich nicht 
davon ausgehen, dass nur die im Programm verwendeten Pins das Problem 
machen.
Zudem kann es ja auch an einem nicht I/O Pin liegen. Also einfach mit 
dem Mikroskop die Zwischenräume anschauen, Flussmittel auftragen und mit 
dem Lötkolben nochmal über die Pins, damit sich eventuelle Brücken lösen 
und mit Entlötlitze überschüssiges Lötzinn entfernen. Ebenso kannst du 
ja mit dem Multimeter alle benachbarte Pins durchpiepsen. Auch wenn's 
100 Pins sind, ist es in 5 Minuten getan.

Was ist das für ein LDO? Vielleicht packt der gerade nur 200mA und es 
ist dein Glück dass der PIC noch nicht abgeraucht ist ^^

Ich habe gerade einmal dein Step-Up Wandler angeschaut, sieht nicht 
geeignet für deinen Einsatzzweck aus.
1. Es ist ein Buck/Boost-Converter, du brauchst nur einen Boost.
2. Er packt gerade einmal 100mA, dein uC braucht aber unter Vollast 
schon 50mA, da bleibt nicht mehr viel übrig.
3. Die Schaltfrequenz ist sehr niedrig (vielleicht bewusst?), jedoch 
brauchst du deswegen große Bauteile. Es gibt Wandler die Arbeiten mit 
1MHz.
4. Er arbeitet nur bis 2V runter. Deine Akkus können aber auf 1.8V 
entladen werden.
Der scheint auch nur 100mA liefern zu können. Also lastest du diesen 
momentan voll aus, zum Glück liefert er nicht mehr, sonst wäre der PIC 
vermutlich schon hinüber, wenn er es nicht schon ist.

Ansonsten ist es nicht allzu unüblich Step-Up -> LDO. Sonst brüchtest du 
ja zwei Step-Up Wandler, und Step-Up Wandler sind meist kniffliger als 
ein simpler LDO.

von Achim S. (Gast)


Lesenswert?

Raph schrieb:
> Im Falle eines Kurzschluß müßte dann wohl ein Pin der beim
> initialisieren auf High geht... mit Masse kurzgeschlossen sein ? ...

So wie du zu Beginn die Arbeit des µC beschrieben hast, benötigst du ja 
eigentlich nur einen einzigen Ausgang zur UART. Setze alle anderen IOs 
mal explizit auf Tristate (auch wenn dann irgendwelche Statusanzeigen 
wegfallen). Wenn sich am Strom nichts wesentliches ändert, brauchst du 
auch nicht nach einem Kurzschluss zu suchen. Falls doch, kannst du durch 
Tristaten einzelner Ports herausfinden, wo der Kurzschluss liegt.

Als weiteren Schritt würde ich auch die von Frank vorgeschlagenen 8MHz 
ausprobieren. Wenn sich der Strom (abzüglich der "Grundlast" von 10mA) 
ca. um den Faktor 10 reduziert, hast du es tatsächlich nur mit den 
internen Strömen des µC zu tun. Wahrscheinlich sind die 200mA ja an der 
Batterie gemessen, und dort musst du ungefähr doppelt so viel Strom 
reinstecken, wie auf der 5V-Seite rauskommt.

von Raph (Gast)


Lesenswert?

Hallo Zusammen

Vielen Dank für die konstruktive Hilfe

Ich hab jetzt mal den Strom der vom Programmiergerät and mein Board 
gelifert wird gemessen ...ca 70 mA was ungefähr den 80 MHZ aus dem 
Datenblatt entspricht...
hab jetzt den PIC32 auf 8 MHZ laufen und erzieht circa 40 mA ...
zuammen mit meinem ZIGBEE Modul kommt die Schaltung auf ca 170 -160 mA
der ADP 1111 packt das noch so ganz gut wird leicht warm, aber okay

von Raph (Gast)


Lesenswert?

Hier nochmal die genaue Konstelation
170 mA fliesen von der Battery rein...

und wenn man vom Programierprot misst sind es 47 mA was der PIC und das 
Zigbee Modul verbrauchen

Wo gehen woll die anderen 120 mA hin ?...

von Achim S. (Gast)


Lesenswert?

Raph schrieb:
> 170 mA fliesen von der Battery rein...
>
> und wenn man vom Programierprot misst sind es 47mA was der PIC und das
> Zigbee Modul verbrauchen

Der Programmierport speist auf der 5V-Schiene ein?

Na ja, einen Faktor ~2 erwarte ich alleine als unerfreulichen 
Nebenaspekt der Energieerhaltung beim Aufwärtswandler:
    2,5V * 170mA (Batterie) = 5V * 85mA.
Egal wie man zur Physik als Fachrichtung steht, im realen Leben ist sie 
oft eine Spaßbremse.

Dass auf der 5V-Schiene (bzw. der daraus linear runtergeregelten 
3,3V-Schiene) keine 85mA ankommen sondern nur 47mA deutet darauf hin, 
dass die Effizienz deines Aufwärtswändlers nicht nahe bei 100% liegt. 
47mA/85mA=55%  Nicht besonders gut, aber auch nicht ganz abwegig.

von Raph (Gast)


Lesenswert?

Hallo Achim

Na, der Programmieradapter von Mikroe ist nach dem LDO auf 3,3 V 
angeschlossen...


2,5V * 170mA (Batterie) = 5V * 85mA. und danach LDO auf 3,3V

-> Danke für den Hinweis.mit den Wirkunggrad.. okay das ist vom 
Wirkungsgrad nicht sehr clever
im Prinzip werden dabei 100 mA verschenkt...


am 3,3 V Strang sind auch noch 2x OPs  MCP6004 die aber nicht aktive 
sind...

Vielleicht ist bei experimentieren ein Tantal Kondensator kaputt 
gegangen und liefert jetzt ein Stromverlust...?

von Achim S. (Gast)


Lesenswert?

Hallo Raph,

Raph schrieb:
> das ist vom
> Wirkungsgrad nicht sehr clever
> im Prinzip werden dabei 100 mA verschenkt...

bin nicht ganz sicher, ob wir das selbe meinen.

Wenn du vom Wirkungsgrad redest, dann betrachte die Leistung, nicht den 
Strom. Hätte dein ADP1111 einen Wirkungsgrad von 100%, dann würde er aus 
die Eingangsleistung 2,5V*170mA=425mW aufnehmen und die selbe 
Ausgangsleistung 5V*85mA=425mW abgeben. Es ginge keine Leistung 
verloren, aber weil die Spannung doppelt so groß ist, bleibt nur der 
halbe Strom. In Wirklichkeit ist der Wirkungsgrad des Aufwärtswandlers 
natürlich kleiner als 100% und es kommen also weniger als 85mA auf der 
5V-Schiene an.

Wie hoch der Wirkungsgrad des Aufwärtswandlers tatsächlich ist, kann man 
nicht so ohne weiteres sagen. Du setzt die Spannung um ca. 2,5V hoch, 
und am Schalter des ADP1111 bzw an der Diode bleiben rund 0,5V hängen. 
Daher schätze ich mal grob, dass der Wirkungsgrad des ADP1111 nicht viel 
besser als 2,5/(2,5+0,5)=83% werden kann. Er kann aber wesentlich 
schlechter werden, wenn du schlecht geeignete Bauelemente (Spule, Diode, 
Kondensatoren) gewählt hast oder die Schaltung schlecht aufgebaut ist. 
Auch 55% Wirkungsgrad wären dann keine Überraschung.

Zu Beginn hattest du mal erwähnt, dass an den 5V noch Sensoren hängen. 
Ein Teil des Stroms kann also dorthin abfließen und kommt gar nicht erst 
zum LDO.

Der LDO regelt von 5V auf 3,3V runter hat damit bestenfalls einen 
Wirkungsgrad von 3,3/5=66%. Hier teilt sich die Leistung zwangläufig auf 
in 33%, die den LDO heizen, und 66%, die dein µC verheizen darf. In 
Wirklichkeit werden natürlich auch die 66% nicht ganz erreicht, weil der 
LDO auch einen Querstrom direkt nach GND hat.

Raph schrieb:
> Vielleicht ist bei experimentieren ein Tantal Kondensator kaputt
> gegangen und liefert jetzt ein Stromverlust...?

Na ja, ich kann nicht ausschließen, dass etwas kaputt ist. Ich kenne 
deine Schaltung ja auch nicht im Detail sondern nur aus den 
verschiedenen Teilbeschreibungen, die du gegeben hast. Aber ich habe 
inzwischen den Eindruck, dass sich die hohen Ströme aus der Batterie 
auch ohne ein defektes Bauteil erklären lassen.

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.