RPi Pico - (S)low Power               

von Martin Müller                                

Elektronik-Labor  Projekte  Mikrocontroller  Raspberry            




Durch Reduktion der Taktfrequenz des RPi Pico lässt sich dessen Stromaufnahme erheblich verringern.

 

In diesem Sketch wird GPIO 15 als Ausgang definiert und in einer Endlosschleife ein- und ausgeschaltet. Programmiert man den RPi Pico in der Arduino-IDE wird standardmäßig eine Taktfrequenz von 133 MHz verwendet. Die Stromaufnahme der Prozessorplatine beträgt dabei gut 22 mA bei einer Betriebsspannung von 5 V. GPIO 15 wird mit einer Frequenz von ca. 588 kHz umgeschaltet. Wie im Artikel RPi Pico - Need for Speed des Elektroniklabors beschrieben, bremst die Arduino-IDE selber die am GPIO-Pin erzeugte Frequenz erheblich aus.



Möchte man den RPi Pico autark mit Batterien oder Akkus betreiben, kann es sinnvoll sein, die Stromaufnahme zu verringern. Bereits durch das Auswählen einer Taktfrequenz von 50 MHz reduziert sich der Strom um fast die Hälfte auf ca. 11,6 mA. Die Frequenz an GPIO 15 beträgt nun etwa 232 kHz.


 
Kapitel 2.15 des Datenblatts des RP2040 zeigt alle verfügbaren Taktquellen an. Der Quarzoszillator des RPi Pico läuft mit einer Frequenz von 12 MHz. Aus dieser werden mittels PLL der Systemtakt von z.B. 133 MHz und der Takt für die USB-Schnittstelle und den ADC von 48 MHz erzeugt. Schaltet man die PLL-Schaltkreise ab und verwendet die 12 MHz des Quarzoszillators als Systemtakt lässt sich die Stromaufnahme nochmals deutlich reduzieren.


 
Dem Kapitel 2.15 des Datenblatts sind die entsprechenden Registereinstellungen zu entnehmen.



#define CLK_SYS_CTRL ((volatile uint32_t*) 0x4000803C)

#define PLL_SYS_PWR ((volatile uint32_t*) 0x40028004)

#define PLL_USB_PWR ((volatile uint32_t*) 0x4002C004)

#define ROSC_CTRL ((volatile uint32_t*) 0x40060000)

#define XOSC_CTRL ((volatile uint32_t*) 0x40024000)

Hier werden die Adressen der notwendigen Register für die Arduino-IDE zugänglich gemacht.


*CLK_SYS_CTRL = 0x00000061;// SYS_CLK = XOSC

Schaltet ausschließlich den Systemtakt direkt auf den Quarzoszillator um. Andere Komponenten des RP 2040 (z.B. ADC, Schnittstellen, Timer, ..) müssen in separaten Registern auf die gewünschte Taktquelle umgeschaltet werden.


*PLL_USB_PWR = 0x0000000F;// PLL_USB = AUS

*PLL_SYS_PWR = 0x0000000F;// PLL_SYS = AUS

Die PLL-Schaltkreise werden ausgeschaltet.



Der RP 2040 verfügt über einen Ringoszillator (Kapitel 2.17) der grundsätzlich eingeschaltet ist.

*ROSC_CTRL = 0x00D1EFA4;// ROSC = AUS

Schaltet den Ringoszillator aus.

Läuft dieser Sketch auf dem RPi Pico sinkt die Stromaufnahme auf ca. 2,7 mA. Die Frequenz an GPIO 15 beträgt 55,55 kHz.


Hier wird der Systemtakt auf den Ringoszillator (ROSC) mit kleinstmöglicher Oszillatorfrequenz umgeschaltet. Die Stromaufnahme beträgt weniger als 2 mA bei ausgeschaltetem Quarzoszillator, an GPIO 15 misst man 25,84 kHz. Natürlich ist der Ringoszillator weniger frequenzstabil als der Quarzoszillator. Die Frequenz des Ringoszillators lässt sich über verschiedene Registereinstellungen im Bereich von 1,8 MHz bis 12 MHz regeln.

*XOSC_CTRL = 0x00D1EAA0;// XOSC = AUS

Schaltet den Quarzoszillator aus (Kapitel 2.16 des Datenblatts).




Elektronik-Labor  Projekte  Mikrocontroller  Raspberry