<style>[reveal]{opacity:1 !important;transform:none !important}</style>

Pegelanpassung mit Spannungsteiler (5 V → 3,3 V)

Ein 5-V-Signal sicher an einen 3,3-V-Eingang legen: Spannungsteiler für UART zwischen Arduino Uno und ESP32 berechnen, Toleranzen und Datenrate prüfen.

7 Min. LesezeitPegelwandler Spannungsteiler5 V auf 3,3 VLevel ShifterESP32 5 V Signal

Ein Arduino Uno arbeitet mit 5 V, ein ESP32 oder Raspberry Pi Pico mit 3,3 V. Sollen beide miteinander reden, liegt am Eingang des 3,3-V-Controllers plötzlich ein Pegel, der über seinem Grenzwert liegt. Das kann eine Weile gut gehen, weil interne Schutzdioden den Strom ableiten – bis der Baustein Schaden nimmt oder seltsame Fehler zeigt. Dasselbe Problem stellt sich beim Ultraschallsensor HC-SR04, bei 5-V-GPS-Modulen und bei vielen älteren Sensoren.

Die einfachste Lösung sind zwei Widerstände: ein Spannungsteiler, der 5 V auf rund 3,3 V herunterteilt. Er funktioniert für Signale in eine Richtung, von 5 V nach 3,3 V, und für Datenraten bis in den Megabit-Bereich. Hier verbindest du einen Arduino Uno und ein ESP32-Board über eine serielle Schnittstelle.

Schaltplan

Pegelanpassung zwischen Arduino Uno und ESP32: PB3 (D11, Pin 17) des ATmega328P über R1 1 kΩ an GPIO16 des ESP32, R2 2 kΩ von dort nach Masse; GPIO17 des ESP32 direkt an PB2 (D10, Pin 16); gemeinsame Masse
Hinweg über den Teiler, Rückweg direkt. Die gemeinsame Masse ist Pflicht.
  • R1, 1 kΩ, und R2, 2 kΩ: zwei Festwiderstände als Teiler im Verhältnis 1 : 2. Aus 5 V werden 3,33 V.
  • IC1, ATmega328P: der Mikrocontroller des Uno. Er sendet an D11 (Pin 17) und empfängt an D10 (Pin 16), beides per SoftwareSerial. Die Hardware-UART an D0/D1 bleibt für USB frei.
  • IC2, ESP32-DevKitC: empfängt an GPIO16 und sendet an GPIO17, die Pins seiner zweiten UART.
  • Masse: Ohne gemeinsame Masse haben die Pegel keinen gemeinsamen Bezug, und nichts funktioniert.

So funktioniert die Schaltung

Hinweg 5 V → 3,3 V. Gibt der Uno high aus, liegen am Teiler 5 V. Die Spannung an R2 beträgt

Ua = Ue · R2R1 + R2 = 5 V · 2 kΩ3 kΩ ≈ 3,33 V

Gibt er low aus, liegen beide Widerstände an Masse, und der Eingang sieht 0 V. Der Eingang des ESP32 ist so hochohmig, dass er den Teiler nicht belastet (Spannungsteiler belastet und unbelastet).

Rückweg 3,3 V → 5 V. Hier ist kein Bauteil nötig, solange der 5-V-Eingang 3,3 V sicher als high erkennt. Der ATmega328P verlangt bei 5 V mindestens 0,6 · VCC = 3,0 V. Das ESP32 liefert unbelastet fast 3,3 V – es passt, aber mit nur 0,3 V Reserve. Für kurze Leitungen auf dem Tisch reicht das; bei 5,25 V aus einem kräftigen USB-Netzteil steigt die Schwelle auf 3,15 V und die Reserve schrumpft auf die Hälfte.

Geschwindigkeit. Der Eingang des ESP32 und die Leitung haben zusammen etwa 15 pF. Für diese Kapazität wirkt der Teiler wie eine Quelle mit dem Innenwiderstand R1 ∥ R2 (Ersatzspannungsquelle). Mit ihm bildet sie einen RC-Tiefpass, der die Flanken verschleift.

Dimensionierung

1. Teilerverhältnis. Ziel ist ein High-Pegel sicher über der Eingangsschwelle und sicher unter dem Grenzwert. Das ESP32 erkennt high ab 0,75 · 3,3 V ≈ 2,48 V und verträgt höchstens 3,3 V + 0,3 V = 3,6 V. Die Mitte, 3,3 V, wäre ideal – also R2 / (R1 + R2) ≈ 2/3.

2. Widerstände wählen. 1 kΩ und 2 kΩ, beide aus der E24-Reihe, treffen das Verhältnis exakt.

Rechner

Spannungsteiler

Uaus
3,33 V
Teilerverhältnis
0,667
Strom aus der Quelle
167 µA
Querstrom durch R2
167 µA
Verlust R1 / R2
278 µW / 556 µW

Unbelasteter Teiler: Am Ausgang hängt nichts, was Strom zieht. Gib einen Lastwiderstand ein, um zu sehen, wie weit die Spannung einbricht.

R1 = 10 kΩR2 = 20 kΩohne LastUein5 VUaus3,33 V100 %66,7 %Teiler

3. Toleranzen prüfen. Mit 1-%-Widerständen und einer Versorgung des Uno zwischen 4,75 und 5,25 V:

Umin = 4,75 V · 1,98 kΩ1,01 kΩ + 1,98 kΩ ≈ 3,15 V Umax = 5,25 V · 2,02 kΩ0,99 kΩ + 2,02 kΩ ≈ 3,52 V

Beides liegt zwischen 2,48 V und 3,6 V.

4. Geschwindigkeit prüfen. Der Innenwiderstand des Teilers ist 1 kΩ ∥ 2 kΩ ≈ 667 Ω. Mit 15 pF:

τ = 667 Ω · 15 pF ≈ 10 ns

Bis zur Schwelle von 2,48 V braucht die Flanke τ · ln(3,33 / (3,33 − 2,48)) ≈ 14 ns. Ein Bit bei 115 200 Baud dauert 8,7 μs, also 600-mal länger.

Spannung am ESP32-Pin bei 1 MBit/s für drei Teiler mit gleichem Verhältnis: 1 kΩ/2 kΩ mit steilen Flanken, 10 kΩ/20 kΩ mit runden Flanken, 100 kΩ/200 kΩ erreicht die High-Schwelle von 2,48 V nicht mehr
Gleiches Teilerverhältnis, verschiedene Widerstände: Bei 1 MBit/s schafft der hochohmige Teiler den High-Pegel nicht mehr.

5. Strom und Leistung. Solange der Uno high ausgibt – bei UART ist das der Ruhezustand –, fließen 5 V / 3 kΩ ≈ 1,7 mA. Das ist für den Pin kein Problem. R1 setzt dabei nur 2,8 mW um.

6. Programm. Der Uno sendet über SoftwareSerial an D11, das ESP32 empfängt an GPIO16 und gibt alles über USB aus:

// Arduino Uno
#include <SoftwareSerial.h>
SoftwareSerial esp(10, 11);           // RX = D10, TX = D11

void setup() { esp.begin(9600); }

void loop() {
  esp.println(analogRead(A0));
  delay(500);
}
// ESP32
void setup() {
  Serial.begin(115200);                       // USB zum PC
  Serial2.begin(9600, SERIAL_8N1, 16, 17);    // RX = GPIO16, TX = GPIO17
}

void loop() {
  while (Serial2.available()) Serial.write(Serial2.read());
}

Bauteilliste

BezeichnerWert/TypHinweis
R11 kΩ, 1 %, 0,1 Wzwischen 5-V-Ausgang und 3,3-V-Eingang
R22 kΩ, 1 %, 0,1 Wvom 3,3-V-Eingang nach Masse, dicht am ESP32
IC1ATmega328P (Arduino Uno)D11 = Pin 17, D10 = Pin 16
IC2ESP32-DevKitCGPIO16 = RX2, GPIO17 = TX2

Varianten

HC-SR04 am ESP32. Der Echo-Ausgang des Ultraschallsensors liefert 5 V. Derselbe Teiler aus 1 kΩ und 2 kΩ vor dem GPIO löst das; der Trigger-Eingang des Sensors erkennt die 3,3 V des ESP32 direkt.

Schnelle Signale. Ein kleiner Kondensator parallel zu R1 beschleunigt die Flanken. Er ist richtig bemessen, wenn R1 · C1 = R2 · CEingang gilt – wie bei einem Tastkopf. Für SPI mit mehreren MHz nimmst du besser einen Pegelwandler-Baustein wie den 74LVC245 oder einen 74HC4050, dessen Eingänge mehr als seine Versorgung vertragen.

In beide Richtungen. Für I²C, 1-Wire oder andere Open-Drain-Leitungen gibt es den bidirektionalen Pegelwandler mit MOSFET. Die Grundlagen des Busses stehen unter I²C-Bus richtig beschalten.

Längere Leitungen. Wird die UART-Verbindung länger als ein paar Dezimeter oder liegt sie neben Motoren, hilft eine echte Schnittstelle; siehe UART, USB-Seriell und RS-232.

Analogsignale. Auch ein Sensor mit 0 bis 5 V Ausgangsspannung lässt sich so an den 3,3-V-ADC anpassen. Dann zählt die Genauigkeit des Teilers direkt, und der Innenwiderstand beeinflusst die Messung; mehr dazu unter Spannung messen mit dem ADC.

Typische Fehler

  • Teiler am falschen Ende: R1 und R2 gehören an den Empfänger, nicht an den Sender. Sonst fängt die Leitung zwischen Teiler und Eingang Störungen ein, die nicht mehr gedämpft werden.
  • Widerstände vertauscht: 2 kΩ oben und 1 kΩ unten ergeben 1,67 V – zu wenig für high. Ein Blick mit dem Multimeter auf den Pin im Ruhezustand klärt das.
  • Masse fehlt: Zwei Boards an zwei USB-Netzteilen haben ohne Masseverbindung keinen gemeinsamen Bezug. Die Übertragung liefert dann Zeichensalat.
  • Zu hochohmig: 100 kΩ und 200 kΩ sparen Strom, schaffen aber keine schnellen Signale und fangen leicht Störungen ein.
  • Bidirektionale Leitung: Ein Teiler an SDA eines I²C-Busses belastet die Pull-ups und verschiebt die Low-Pegel. Hier hilft nur ein MOSFET-Pegelwandler.

Selbsttest

Welche Spannung liefert ein Teiler aus 2,2 kΩ und 3,3 kΩ an 5 V?

5 V · 3,3 / 5,5 = 3,0 V.

Reicht das für einen ESP32-Eingang?

Ja, 3,0 V liegt über der High-Schwelle von 2,48 V und unter 3,6 V – mit weniger Reserve nach unten als 1 kΩ/2 kΩ.

Wie groß ist die Zeitkonstante eines Teilers aus 4,7 kΩ und 10 kΩ an 20 pF?

R1 ∥ R2 ≈ 3,2 kΩ, also τ ≈ 64 ns.

Warum brauchst du für die Richtung 3,3 V → 5 V oft keinen Wandler?

Viele 5-V-Eingänge erkennen schon 3,0 V als high; das ESP32 liefert knapp 3,3 V.

Warum funktioniert ein Teiler am I²C-Bus nicht?

Die Leitungen sind bidirektional und werden nur nach low gezogen. Der Teiler bildet mit den Pull-ups einen ständigen Querweg und verfälscht die Pegel, sodass mindestens eine Richtung unsicher wird.