Bauteile · 5 Min. Lesezeit

Gleichstrommotor mit L298N steuern: Drehzahl und Drehrichtung mit Arduino

Wie funktioniert der Motortreiber L298N? H-Brücke, Pins ENA, IN1 und IN2, 5V-Jumper und Stromversorgung, Drehzahl per PWM, Richtungswechsel, Code für ein Roboterauto mit zwei Motoren, ESP32 und Pico.

Gleichstrommotoren sind die verbreitetsten Motoren: Sie drehen Lüfter, Roboterräder, Wasserpumpen und Spielzeugautos. Einen Motor kannst du aber nicht direkt an einen Arduino-Pin anschließen: Er zieht viel mehr Strom, als der Pin liefern kann, und für die andere Drehrichtung muss seine Polarität umgedreht werden. Der Motortreiber L298N löst beide Probleme auf einmal: Er lässt zwei Gleichstrommotoren unabhängig vor- und rückwärts laufen und regelt ihre Drehzahl per PWM. Er steckt in fast jedem Roboterauto-Projekt.

L298N Doppel-Motortreiber-Modul
L298N-Motortreiber: Unter dem schwarzen Kühlkörper sitzt der L298N-Chip mit zwei H-Brücken; seitlich die Motorklemmen, vorne die Versorgungs- und Steuerpins.

Wie funktioniert ein Gleichstrommotor und warum braucht er einen Treiber?

Legst du an die beiden Anschlüsse eines Gleichstrommotors eine Spannung an, dreht er sich; drehst du die Polarität um, dreht er andersherum; senkst du die Spannung, wird er langsamer. Schon ein kleiner Spielzeugmotor zieht im Betrieb Hunderte Milliampere und beim Anlaufen oder Blockieren über 1 Ampere. Da der Motor eine Spule ist, erzeugt er beim Abschalten außerdem Spannungsspitzen in Gegenrichtung. Ein Arduino-Pin liefert höchstens 20–40 mA und ist gegen diese Spitzen nicht geschützt; den Motor direkt anzuschließen zerstört den Pin und kann sogar das Board beschädigen.

Was ist eine H-Brücke?

Um einen Motor in beide Richtungen zu drehen, nutzt man eine H-Brücke: vier elektronische Schalter, die wie der Buchstabe "H" um den Motor angeordnet sind. Schließen zwei diagonal gegenüberliegende Schalter, fließt der Strom in eine Richtung durch den Motor; schließt das andere Paar, in die andere. Im L298N stecken zwei solcher H-Brücken, daher steuert er zwei Motoren unabhängig. Jeder Motor nutzt zwei Richtungspins (IN1 und IN2) und einen Drehzahlpin (ENA):

IN1IN2ENAWas der Motor macht
HIGHLOWHIGH oder PWMDreht vorwärts
LOWHIGHHIGH oder PWMDreht rückwärts
HIGHHIGHHIGHBremst und stoppt schnell
BeliebigBeliebigLOWLäuft frei aus und wird von selbst langsamer

Technische Daten des L298N

MerkmalWert
Motorversorgung5–35 V (mit gestecktem 5V-Jumper max. 12 V)
Strom pro Kanal2 A dauerhaft, 3 A kurzzeitig
Logikspannung5 V (Eingänge erkennen auch 3,3-V-Signale)
SpannungsverlustEtwa 1,5–3 V (so viel weniger kommt am Motor an)
Ansteuerbare Motoren2 Gleichstrommotoren oder 1 bipolarer Schrittmotor
SchutzFreilaufdioden auf der Platine
Getriebemotor mit Rad
Der gelbe Getriebemotor mit Rad aus Roboterautos: Das Getriebe senkt die Drehzahl und erhöht das Drehmoment; er läuft mit 3–6 V.

Pins und Stromversorgung des L298N

Pin oder KlemmeFunktion
OUT1, OUT2Die beiden Anschlüsse von Motor A
OUT3, OUT4Die beiden Anschlüsse von Motor B
12V (VS)Motorversorgung: Pluspol von Akku oder Netzteil
GNDGemeinsame Masse: Minuspol des Akkus und GND des Arduino kommen hierhin
5VMit gestecktem 5V-Jumper 5-V-Ausgang, ohne Jumper Eingang für die Logikversorgung
ENA, ENBDrehzahleingänge (PWM); mit gesteckten Jumpern läuft der Motor immer mit voller Drehzahl
IN1, IN2, IN3, IN4Richtungseingänge
Minuspol des Akkus, GND des L298N und GND des Arduino müssen unbedingt verbunden sein; ohne gemeinsame Masse sind die Steuersignale bedeutungslos. Liegt die Motorversorgung über 12 V, zieh den 5V-Jumper und speise separate 5 V in den 5V-Pin ein. Versorge Motoren niemals aus dem 5V-Pin des Arduino.

Einen Motor vorwärts, rückwärts und unterschiedlich schnell drehen

Zieh zuerst den Jumper von ENA ab und verbinde ENA mit Arduino-Pin D9, IN1 mit D8 und IN2 mit D7. Den Motor schließt du an OUT1 und OUT2 an, einen Akkupack aus 2 × 18650 (7,4 V) oder 4–6 AA-Batterien an die Klemmen 12V und GND; GND führst du auch zum GND des Arduino. Die Funktion motor() unten nimmt einen Wert von -255 bis 255: positiv heißt vorwärts, negativ rückwärts, null bremsen. Das Prinzip der Drehzahlregelung erklärt Was ist PWM?

Arduino (C++)
1const int ENA = 9;    // hız (PWM) / speed (PWM)
2const int IN1 = 8;
3const int IN2 = 7;
4
5void motor(int speed) {              // -255 … 255
6  if (speed == 0) {                  // fren / brake
7    digitalWrite(IN1, HIGH);
8    digitalWrite(IN2, HIGH);
9    analogWrite(ENA, 255);
10    return;
11  }
12  digitalWrite(IN1, speed > 0);      // ileri ya da geri / forward or backward
13  digitalWrite(IN2, speed < 0);
14  analogWrite(ENA, abs(speed));
15}
16
17void setup() {
18  pinMode(ENA, OUTPUT);
19  pinMode(IN1, OUTPUT);
20  pinMode(IN2, OUTPUT);
21}
22
23void loop() {
24  motor(200);   delay(2000);   // ileri / forward
25  motor(0);     delay(500);    // dur / stop
26  motor(-120);  delay(2000);   // yavaşça geri / slowly backward
27  motor(0);     delay(500);
28}
Die meisten Motoren brummen bei kleinen PWM-Werten nur, statt zu drehen; zum Anlaufen brauchen sie meist einen Wert von etwa 80–120. Den Motor vor einem Richtungswechsel kurz anzuhalten und die Drehzahl schrittweise statt schlagartig zu erhöhen, verringert Stromspitzen und schont die Zahnräder.

Roboterautos haben keine Lenkung; sie drehen, indem die beiden Räder mit unterschiedlicher Drehzahl und Richtung laufen. Drehen beide Motoren vorwärts, fährt das Auto geradeaus; läuft der linke rückwärts und der rechte vorwärts, dreht es sich auf der Stelle nach links. Die Funktion drive() unten nimmt die Drehzahl beider Motoren getrennt von -255 bis 255 entgegen:

Arduino (C++)
1// Sol motor / left motor: ENA=9, IN1=8, IN2=7 — Sağ motor / right motor: ENB=10, IN3=5, IN4=4
2const int ENA = 9, IN1 = 8, IN2 = 7;
3const int ENB = 10, IN3 = 5, IN4 = 4;
4
5void drive(int left, int right) {            // her biri -255 … 255 / each -255 … 255
6  digitalWrite(IN1, left >= 0);  digitalWrite(IN2, left < 0);
7  digitalWrite(IN3, right >= 0); digitalWrite(IN4, right < 0);
8  analogWrite(ENA, abs(left));
9  analogWrite(ENB, abs(right));
10}
11
12void setup() {
13  int pins[] = {ENA, IN1, IN2, ENB, IN3, IN4};
14  for (int p : pins) pinMode(p, OUTPUT);
15}
16
17void loop() {
18  drive(200, 200);   delay(1500);   // ileri / forward
19  drive(-200, 200);  delay(600);    // sola dön / turn left
20  drive(200, -200);  delay(600);    // sağa dön / turn right
21  drive(-180, -180); delay(1000);   // geri / backward
22  drive(0, 0);       delay(1000);   // dur / stop
23}

Mit einem Abstandssensor vorne am Auto entsteht ein Roboter, der bei einem Hindernis anhält und dreht; zum Sensor siehe HC-SR04 Entfernungssensor. Nutzt du am Uno die Servo-Bibliothek, Vorsicht: Sie schaltet PWM an den Pins 9 und 10 ab; leg ENA und ENB dann auf die Pins 5 und 6.

L298N mit ESP32 und Raspberry Pi Pico

Die Eingänge des L298N werten alles über etwa 2,3 V als HIGH, daher funktionieren sie direkt mit den 3,3-V-Signalen von ESP32 und Pico; die Logikversorgung des Moduls bleibt aber bei 5 V. Am ESP32 nutzt du denselben Arduino-Code mit PWM-fähigen Pins für ENA und ENB (zum Beispiel GPIO 25 und 26); die Pins 34–39 können nichts ausgeben. Am Pico sieht die Steuerung eines Motors mit MicroPython so aus:

MicroPython
1from machine import Pin, PWM
2import time
3
4ena = PWM(Pin(15), freq=1000)
5in1 = Pin(14, Pin.OUT)
6in2 = Pin(13, Pin.OUT)
7
8def motor(speed):                   # -100 … 100
9    in1.value(speed > 0)
10    in2.value(speed < 0)
11    ena.duty_u16(int(abs(speed) * 655.35))
12
13while True:
14    motor(80);  time.sleep(2)       # ileri / forward
15    motor(0);   time.sleep(0.5)     # dur / stop
16    motor(-50); time.sleep(2)       # geri / backward

L298N, TB6612FNG oder MOSFET?

TreiberVorteileNachteileGeeignet für
L298NGünstig, robust, 2 A pro KanalEtwa 2 V Verlust, wird warm, großHobbyroboter, 6–12-V-Motoren
TB6612FNGKlein, effizient (MOSFET), 3,3-V-tauglich1,2 A dauerhaft, max. 13,5 VKleine Akkuroboter
L9110SSehr klein und günstigEtwa 800 mA pro KanalMinimotoren
Einzelner MOSFET (etwa IRLZ44N)Sehr effizient, hoher StromNur eine RichtungLüfter, Pumpen, LED-Streifen

Musst du einen Motor nur ein- und ausschalten, reicht ein Relais – die Drehzahl kann es aber nicht regeln; den Vergleich findest du in Was ist ein Relaismodul? Für die Wahl eines passenden Transistors oder MOSFETs hilft das Werkzeug Transistoren.

Projektideen mit dem L298N

  • Hindernis ausweichender Roboter: ein Auto, das mit einem HC-SR04 Hindernisse erkennt und die Richtung wechselt.
  • Auto mit Bluetooth-Steuerung: ein Roboter, den du über einen HC-05 mit einer App am Handy lenkst.
  • Auto mit Joystick-Steuerung: die zwei Achsen eines Joysticks in die Drehzahlen zweier Motoren umrechnen; Details in Joystick-Modul verwenden.
  • Linienfolger: ein Auto, das mit Infrarotsensoren einer schwarzen Linie am Boden folgt.
  • Automatischer Vorhang: ein motorisiertes System, das den Vorhang morgens bei Licht öffnet und abends schließt.
  • Förderband: ein kleines Förderband, dessen Geschwindigkeit du mit einem Potentiometer einstellst.

Typische Fehler und ihre Lösungen

  • Die LED des Moduls leuchtet, aber der Motor dreht nicht: Die Massen sind nicht verbunden, der ENA-Jumper wurde entfernt, aber der Pin nicht angeschlossen, oder der PWM-Wert ist zu klein.
  • Der Arduino startet neu, sobald der Motor läuft: Motor und Arduino hängen an derselben schwachen Quelle; getrennt versorgen und einen 100-nF-Kondensator an die Motoranschlüsse löten.
  • Der Motor ist sehr langsam und schwach: Der L298N schluckt etwa 2 V; erhöhe die Akkuspannung (zum Beispiel 2 × 18650) oder nimm einen effizienteren Treiber.
  • Der Motor dreht nur in eine Richtung: Einer der IN-Pins ist nicht angeschlossen, oder der Code schreibt für beide Richtungen dieselben Werte.
  • Der L298N wird sehr heiß: Der Motor zieht zu viel Strom; achte darauf, dass der Kühlkörper frei liegt, und wähle bei Bedarf einen stärkeren Treiber.
  • 9-V-Blockbatterie verwenden: Sie liefert keinen hohen Strom und ist schnell leer; nutze einen wiederaufladbaren 18650- oder AA-Pack.

Sobald du die Motorsteuerung mit dem L298N beherrschst, steht dir die Welt der Roboterprojekte offen. In der BlueGrays-App findest du Projekte mit L298N – ein Bluetooth-gesteuertes Auto und einen Roboter, der Hindernissen ausweicht – Schritt für Schritt mit Schaltplänen und Code.

Häufige Fragen

Wie viele Motoren kann der L298N ansteuern?

Da der L298N zwei H-Brücken enthält, steuert er zwei Gleichstrommotoren unabhängig vor- und rückwärts und mit unterschiedlicher Drehzahl. Nutzt man beide Kanäle zusammen, kann er auch einen bipolaren Schrittmotor treiben.

Wofür ist der 5V-Jumper am L298N?

Mit gestecktem Jumper erzeugt der Regler auf der Platine aus der Motorversorgung 5 V für den Chip; diese 5 V kannst du auch zur Versorgung des Arduino nutzen. Liegt die Motorversorgung über 12 V, kann der Regler überhitzen; zieh dann den Jumper und speise separate 5 V in den 5V-Pin ein.

Welche Batterie gehört an den L298N?

Für kleine 6–9-V-Motoren eignen sich 2 × 18650-Lithiumzellen (7,4 V) oder 6 AA-Batterien (9 V). Weil der L298N etwa 2 V verliert, wählst du eine Quelle etwas über der Nennspannung des Motors. 9-V-Blockbatterien liefern nicht genug Strom für Motoren.

Warum zieht man den ENA-Jumper ab?

Mit gestecktem Jumper auf ENA läuft der Motor immer mit voller Drehzahl. Willst du die Drehzahl regeln, ziehst du den Jumper und verbindest ENA mit einem PWM-Pin des Arduino; dann stellst du die Drehzahl mit analogWrite zwischen 0 und 255 ein.

Warum dreht mein Motor bei niedriger Drehzahl nicht?

Ein Motor braucht eine Mindestspannung, um die Reibung zu überwinden und anzulaufen, und der Spannungsverlust des L298N erschwert das zusätzlich. Meist brummt der Motor nur, wenn der PWM-Wert unter 80–120 fällt. Lege im Code eine Mindestdrehzahl fest oder nutze eine höhere Versorgungsspannung.

Funktioniert der L298N mit ESP32 und Raspberry Pi Pico?

Ja. Die Eingänge des L298N erkennen 3,3-V-Signale als HIGH, daher lässt er sich direkt an ESP32 und Pico anschließen. Die Logikseite des Moduls wird trotzdem mit 5 V versorgt, und alle Massen müssen verbunden sein.

Alle Projekte ansehen
Bluetooth-gesteuertes Auto mit L298N
#80Fortgeschritten
Premium

Bluetooth-gesteuertes Auto mit L298N

2WD (zweimotoriges, vierrädriges) Roboterauto-Projekt, das vom Telefon aus mit Arduino und HC-05 Bluetooth-Modul gesteuert werden kann. Insgesamt vier Räder werden gleichzeitig angetrieben, indem zwei

5.0(38)
64
Roboter zur Hindernisvermeidung
#81Fortgeschritten
Premium

Roboter zur Hindernisvermeidung

Wie wäre es, ein intelligentes Fahrzeug zu bauen, das seinen Weg selbst findet? Der Obstacle Avoiding Robot scannt dank des Ultraschallsensors vor ihm ständig seine Umgebung. Wenn er auf ein Hindernis

5.0(38)
49
Servo-Steuerung mit Joystick
#60Mittel
Premium

Servo-Steuerung mit Joystick

Schwenk-Neige-Projekt, das zwei Servomotoren in X- und Y-Achse unabhängig voneinander mit einem Joystick-Modul steuert. Lehrt die Logik der Joystick-Servo-Integration und der Positionsverfolgung.

4.7(42)
58
ESP32-Servomotor (Steuerung über Potentiometer)
#118Mittel
Premium

ESP32-Servomotor (Steuerung über Potentiometer)

In diesem Projekt steuern wir einen SG90-Servomotor mit einem Potentiometer. Wir stellen den Servowinkel ein, indem wir den vom Potentiometer gelesenen Analogwert auf den Bereich von 0 bis 180 Grad abbilden. Dank der ESP32Servo-Bibliothek kann jeder GPIO-Pin des ESP32 ein PWM-Signal erzeugen. Dies ist eine grundlegende Steuerungsmethode für Roboterarme, Kamera-Gimbals und automatische Türmechanismen.

4.3(29)
42
Led-Steuerung mit Joystick
#59Mittel
Premium

Led-Steuerung mit Joystick

Steuerungsprojekt, das LEDs in 4 verschiedenen Richtungen aufleuchten lässt, je nach den Werten der X- und Y-Achse des Joystick-Moduls. Lehrt das Lesen des analogen Joysticks und die Logik der Richtun

4.7(50)
66
ESP32 HC-SR04 Ultraschall-Entfernungsmesser
#116Mittel
Premium

ESP32 HC-SR04 Ultraschall-Entfernungsmesser

Der Ultraschallsensor HC-SR04 berechnet die Entfernung, indem er die Zeit misst, die die von ihm ausgesendete Schallwelle benötigt, um auf ein Objekt zu treffen und zurückzukehren (Time of Flight). In diesem Projekt senden wir mit dem ESP32 einen 10-Mikrosekunden-Impuls an den TRIG-Pin und lesen die vom ECHO-Pin kommende Echozeit mit `pulseIn()`. Die berechnete Entfernung geben wir in cm im Serial Monitor aus. Da der HC-SR04 mit 5 V betrieben wird, ist ein **Spannungsteiler** am ECHO-Pin zwingen

4.9(27)
43
ESP32-Parksensor (HC-SR04 + 5-LED-Leiste + Summer + OLED)
#142Fortgeschritten
Premium

ESP32-Parksensor (HC-SR04 + 5-LED-Leiste + Summer + OLED)

Die ESP32-Version des Parkhilfesensors für Autos! Mit dem Ultraschallsensor HC-SR04 messen wir den Abstand zum Objekt vor dem Fahrzeug. Je weiter sich das Objekt nähert, desto mehr leuchten die 5 LEDs der Leiste auf (grün → gelb → rot) und die Intervalle der Summer-Signaltöne werden kürzer. Wenn das Objekt sehr nahe kommt (unter 10 cm), ertönt ein Daueralarm und alle LEDs leuchten. Auf dem SSD1306-OLED-Display werden der aktuelle Wert in cm in großer Schrift, ein Statustext (NICHT / VORSICHT / N

0.0(0)
14
HC-SR04 Abstandsmessung (serielle Anzeige)
#27Anfänger

HC-SR04 Abstandsmessung (serielle Anzeige)

HC-SR04 Ultraschallsensor zur Abstandsmessung und Anzeige des Ergebnisses in cm auf dem seriellen Monitor. Er lehrt das Prinzip der Abstandsberechnung mit Schallwellen.

4.6(44)
65

Lerne, warum ein Gleichstrommotor nicht direkt an den Arduino gehört, wie eine H-Brücke funktioniert, wie du den L298N anschließt und versorgst, Drehzahl und Richtung per PWM steuerst und ein Roboterauto mit zwei Motoren baust.

Gleichstrommotor mit L298N steuern: Drehzahl und Drehrichtung mit Arduino | BlueGrays