13. September 2025 · Kommentieren · Kategorien: Allgemein, Pico · Tags:

Ich möchte untersuchen wie genau eine Gleichspannung sein kann, die mittels PWM mit einem Pico2 erzeugt werden kann. Dazu habe ich Chatgpt.com befragt:

Natürlich 👍 – ich fasse dir unseren Chat in einen gut lesbaren Artikeltext zusammen, den du direkt in WordPress einfügen kannst (als normalen Beitrag oder Seite).


PWM und GPIO-Treiber beim Raspberry Pi Pico2 (RP2350)

Der neue Raspberry Pi Pico2 (RP2350) bietet einige interessante Features, die auch für Anwendungen mit PWM-Ausgabe und GPIO-Treibern wichtig sind. Hier findest du eine Zusammenfassung der wichtigsten Punkte aus der Praxis.


Einstellbarer Ausgangsstrom der GPIOs

Die GPIO-Pins des RP2040 und RP2350 lassen sich in ihrer Treiberstärke (Drive Strength) konfigurieren. Es gibt vier Stufen:

  • 2 mA
  • 4 mA
  • 8 mA
  • 12 mA

Zusätzlich kann die Slew-Rate (Flankensteilheit) zwischen „slow“ und „fast“ eingestellt werden.

Damit lässt sich sowohl die Belastbarkeit (z. B. LEDs oder andere Bauteile treiben) als auch das EMV-Verhalten optimieren.


Beispiel in MicroPython

Über die padsbank0-Register lässt sich die Drive-Strength direkt setzen:

import machine

# Basisadresse für padsbank0
PADS_BASE = 0x4001c000
PADS_GPIO0 = PADS_BASE + 0x04  # GPIO0, weitere Pins jeweils +4

def set_drive(pin, strength=3, fast=True):
    """
    pin       : GPIO-Nummer
    strength  : 0=2mA, 1=4mA, 2=8mA, 3=12mA
    fast      : True = schnelle Slew-Rate
    """
    addr = PADS_GPIO0 + 4*pin
    reg = machine.mem32[addr]
    reg = (reg & ~0b11) | (strength & 0b11)
    if fast:
        reg |= (1 << 2)
    else:
        reg &= ~(1 << 2)
    machine.mem32[addr] = reg

# Beispiel: GPIO15 mit 12 mA und schneller Slew-Rate
set_drive(15, strength=3, fast=True)

Auch wenn ein Pin auf PWM-Funktion gestellt wird, gilt diese Einstellung weiterhin.


Innenwiderstand der Treiber

Ein fester „Innenwiderstand“ der GPIO-Treiber ist nicht spezifiziert.

  • Die Angabe 2/4/8/12 mA beschreibt nur die Ziel-Treibefähigkeit.
  • Reale Messungen zeigen, dass kurzfristig deutlich höhere Ströme fließen können.
  • Der effektive Widerstand ergibt sich aus der Lastsituation (z. B. bei 12 mA-Einstellung etwa einige zehn Ohm).

Für definierte Verhältnisse empfiehlt sich daher ein externer Serienwiderstand.


Fractional Clock Divider

Beim PWM-Modul wird der Taktteiler (Clock Divider) als 12.4 fixed-point Wert eingestellt:

  • 12 Bit Ganzzahl
  • 4 Bit Bruchteil (in 1/16-Schritten)

Beispiel:

  • „8.4 fractional clock divider“ = 8 + 4/16 = 8.25

Damit lassen sich PWM-Frequenzen sehr fein einstellen.


Maximale PWM-Frequenz bei 16-Bit Auflösung

Die PWM-Frequenz berechnet sich zu: fPWM=fsysclkdiv×(TOP+1)f_{PWM} = \frac{f_{sys}}{\text{clkdiv} \times (TOP+1)}

  • Systemtakt Pico2: 150 MHz
  • TOP = 65535 (16 Bit)
  • clkdiv = 1.0

fPWM=150 000 00065 536≈2.3 kHzf_{PWM} = \frac{150\,000\,000}{65\,536} \approx 2.3 \,\text{kHz}

👉 Bei voller 16-Bit-Auflösung sind also nur ca. 2,3 kHz PWM-Frequenz möglich.


Frequenz vs. Auflösung (150 MHz, clkdiv=1.0)

AuflösungZählerumfangMax. FrequenzPeriode
8 Bit256585.9 kHz1.71 µs
10 Bit1024146.5 kHz6.83 µs
12 Bit409636.6 kHz27.3 µs
14 Bit163849.16 kHz109 µs
16 Bit655362.29 kHz437 µs

Je höher die Auflösung, desto niedriger die maximale PWM-Frequenz – und umgekehrt.


Fazit

  • GPIO-Treiber des RP2350 sind in 4 Stufen (2–12 mA) einstellbar, mit wählbarer Slew-Rate.
  • PWM kann mit feiner Frequenzabstufung über Fractional Divider betrieben werden.
  • Max. 16-Bit PWM: ca. 2,3 kHz bei 150 MHz Systemtakt.
  • Für höhere Frequenzen muss die Auflösung reduziert werden.

Grundsätzliche Überlegungen.

Die Erste Fragestellung entstand, weil ich bei früheren Versuchen mit einem niederohmigen RC-Glied festgestellt habe, das die minimale und maximale Spannung des Rechtecks aus dem Pin sich auf und ab bewegen. Um diesen Einfluß abschätzen zu können wäre es wichtig den Innenwiderstand der Ausgangsstufen des Pico2 zu kennen.

Die maximale Auflösung der PWM und damit der erzeugten Spannung beträgt 16-Bit. Da das Timing sehr exakt sein dürfte, könnte diese Spannung auch sehr exakt sein. Allerdings hat z.B. das oben geschilderte Phänomen sicher einen erheblichen Einfluß auf die Genauigkeit und bedarf deshalb näherer Betrachtung.

Ein weiterer Punkt ist die Konstanz der Betriebsspannung die im Pico2 erzeugt wird.

Für die Filterung des PWM-Signals zu einer Gleichspannung habe ich mich ebenfalls mit Chatgpt.com beraten. Das Ergebnis ist unter https://www.peters-bastelkiste.de/pwm-filter_001/ zu finden.

Du musst eingeloggt sein um eine Antwort hinterlassen zu können.