Mein Ziel ist es den Ladezustand einer Lipo Battery zu überwachen, um bei Bedarf zwischen Battery und Netzteil umschalten zu können. Das heißt ich will die Spannung der Batterie mit einem Raspberry Pi Pico auslesen.

Hardware

Voltage Sensor
LiPo Battery
Raspberry Pico PI

Verwendete Pins

Raspberry Pico PI | Bildquelle: raspberrypi.org

Es wird Pin 36 als Stromversorgung 3,3V Out verwendet, 38 GND sowie ein analoger Input-Pin 34 GP28 ADC2. Wichtig ist es hierbei einen der ADC (Analog Digital Converter)-Pins zu verwenden.

ADC-Wandler haben in der Regel 10 oder 12 Bit und 1024 bis 4096 Quantisierungsstufen. Ein 16-Bit-ADC hat 65536 Quantisierungsstufen. Ein Raspberry Pi Pico hat 12 Bits ADC mit einer Quantisierungsstufe von 4096.

Der Spannungssensor ist im Grunde ein Spannungsteiler, der aus zwei Widerständen mit den Widerständen 30KΩ und 7,5KΩ besteht, d.h. ein Spannungsteiler im Verhältnis 5 zu 1.

Um den Voltage Sensor auszulesen, muss man folgenden Code anwenden.

from machine import Pin, ADC
import time

# Pin definitions
adc_pin = Pin(28, mode=Pin.IN)
adc = ADC(adc_pin)

R1 = 30000.0;
R2 = 7500.0;

while True:
    # Wichtig, um den 16Bit Reader auf 12 Bit ADC - Pico runter zu schrauben 
    adc_value = adc.read_u16()  >> 4

    volt = ((adc_value * 3.3) / 4096)/ (R2/(R1+R2));
    print (f"{round(volt,2)}V ({round(((volt-3.4)/0.8)*100,2)}%)")
    time.sleep_ms(1_000)

Die Lipo Battery hat eine Spannung zwischen: (leer) 3.4 - 4.2 (voll).

Das Ergebnis kann sich sehen lassen:

MicroPython v1.18 on 2022-01-17; Raspberry Pi Pico with RP2040Type "help()" for more information.
%Run -c $EDITOR_CONTENT

3.75V (43.8%)
3.8V (49.84%)
3.79V (48.33%)
3.79V (48.33%)
3.79V (48.33%)
3.8V (50.34%)
3.79V (48.33%)
3.79V (48.33%)

Happy Coding,
Joerg