Rpi Pico GPIO-Strommessungen               

von Ralph Maas                                

Elektronik-Labor  Projekte  Mikrocontroller  Raspberry            




In verschiedenen Programmen nutze ich die Anweisung   gpio_set_drive_strength(LED_Anode, GPIO_DRIVE_STRENGTH_2MA) um den Strom zu begrenzen und mir Vorwiderstände zu ersparen. In Pico21.html hat das super für eine 7-Segment-Anzeige funktioniert. In einem anderen Projekt lasse ich zwei rote Status-LED gleichzeitig blinken und habe bemerkt, dass dann eine parallele Analog-Messung schwankt, weil die Versorgungsspannung durch das Blinken einbricht. Daher wollte ich doch genauer verstehen, wie das funktioniert.
 
In der Dokumentation  https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf auf Seite 613 steht, dass 4 mA der default ist. Und auf Seite 619 ist erklärt, dass die 2 / 4 / 8 / 12 mA die Ströme sind, zu denen dann gewährleistet ist, dass die Spannung bei „high“ über 2,65V und bei „low“ unter 0,3V bleibt: Der Strom ist also nicht auf z.B. 2 mA begrenzt, sondern das aktive Schaltelement im Ausgang wirkt als Widerstand. Bei 2 mA ist nur ein Schalter beteiligt, bei 4 mA sind zwei Schalter parallel geschaltet und bei 12 mA sind 4 Schalter parallel geschaltet. Ausserdem dürfen in Summe maximal 50 mA gezogen werden.

Messungen

Für drei unterschiedlich farbige LED ergeben sich folgende Messwerte:
Variante 1: Gegen GND:




LED-Spannung

Strom GPIO-LED-GND

 Spannungsabfall 3V3 - GPIO


Entspricht Widerstand

Einheit

V

mA

V


Ohm

rot

1,9

23

1,4


61

grün

2,15

20

1,15


58

gelb

2,4

16,5

0,9


55



Variante 2: GPIO zu GPIO:




LED-Spannung

Strom GPIO-LED–GPIO

Spannungsabfall 3V3 - GPIO

Spannungsabfall GPIO - GND

Entspricht Widerstand

Entspricht Widerstand

Einheit

V

mA

V

V

Ohm

Ohm

rot

1,85

17

0,9

0,55

53

32

grün

2,15

13,5

0,7

0,45

52

33

gelb

2,3

12

0,6

0,4

50

33



Schlussfolgerung
Für die 7-Segment-LED, die im Millisekunden-Takt abgewechselt wurden, hat der Betrieb ohne Vorwiederstände gepasst.
Wenn mehr als eine blinkenden Status-LED im Sekundentakt verwendet wird, werde ich zukünftig doch einen Vorwiderstand verwenden.

Code:
//
// Test der Stromstärken, wenn LED ohne Vorwiderstand am Pico betrieben werden
//
#define LED_Anode 16 //
#define LED_Kathode 18 //

void setup() {
  gpio_set_drive_strength(LED_Anode,   GPIO_DRIVE_STRENGTH_2MA);
  gpio_set_drive_strength(LED_Kathode, GPIO_DRIVE_STRENGTH_2MA); /

  pinMode(LED_Anode,   OUTPUT);
  pinMode(LED_Kathode, OUTPUT);

  digitalWrite(LED_Anode,   HIGH);
  digitalWrite(LED_Kathode, LOW);
}

void loop() {
}
---------------


Nachtrag: Portstrom mit MicroPython (B.K.)

Die Messungen haben mich inspiriert, das auch einmal mit MicroPython zu untersuchen. Es gibt da zwar im Prinzip eine Einstellung mit Pin.DRIVE_0, Pin.DRIVE_1, Pin.DRIVE_2 usw., aber sie ist für den Pico anscheinend (noch) nicht implementiert. An einer gelben LED gegen Gnd und ohne Vorwiderstand habe ich eine Spannung von 2,1 V und eine Strom von ca. 20 mA gemessen. Demnach scheint MicroPython den Default-Wert DRIVE_STRENGTH_4MA zu verwenden. Das ist zwar ganz gut, um mögliche Schäden zu verhindern, aber meist viel zu hell. Deshalb sollte man grundsätzlich Vorwiderstände verwenden.



Elektronik-Labor  Projekte  Mikrocontroller  Raspberry