H-Brücke L298N am Arduino UNO

In diesem Beitrag zeige ich dir wie du die H-Brücke vom Typ L298N am Arduino UNO betreibst und zwei DC Motoren unabhängig voneinander in beide Laufrichtungen beitreiben kannst.

Natürlich kannst du dieses Bauteil auch am Raspberry Pi betreiben, jedoch soll es in diesem Beitrag zunächst darum gehen wie du dieses am Arduino UNO machst.

Wozu dient eine H-Brücke?

Mit einer H-Brücke kann man einen Motor vorwärts & rückwärts drehen lassen. Durch die Anordnung von MOSFETs kann ein DC Motor umgepolt werden und somit dreht der Motor vorwärts oder rückwärts.

Bezug der H-Brücke

Auf den gängigen Plattformen wie ebay.de, amazon.de, aliexpress.com usw. findest du diese H-Brücke zu recht günstigen Preisen, hier nun eine kleine Auflistung von einigen Shops (stand 04.11.2021):

ShopPreis
ebay.de1 € – 7 €
amazon.de5,49 €
reichelt.de5,70 €
aliexpress.com0,97 €
bastelshop24.de3,10 €
Shops für den Bezug einer H-Brücke vom Typ L298N

Technische Daten des L298N Moduls

Hier nun die technischen Daten des Moduls:

  • Chip – L298N
  • Logische Spannung – 5V
  • Spannung für DC – Motoren 5V – 35V
  • Stromaufnahme des Modules 0mA bis 36mA
  • max. Stromaufnahme der DC Motoren 2A
  • max. Leistung – 25W
  • Abmaße (LxBxH) – 43 mm x43 mm x 26 mm
  • Gewicht – 26g

Aufbau der H-Brücke vom Typ L298N

Auf der H-Brücke vom Typ L298N sind verbaut:

  • zwei 2polige Schraubklemmen für DC-Motoren,
  • eine 3polige Schraubklemme für die Spannungsversorgung,
  • eine Pinleiste zum Steuern der Motoren,
  • an den Ecken sind jeweils Löcher im Durchmesser von 4 mm zur Montage vorhaben
Aufbau der H-Brücke vom Typ L298N
Aufbau der H-Brücke vom Typ L298N

Spannungsversorgung des Moduls

Das Modul selber kann mit einer Spannung von 5V bis maximal 35V versorgt werden. Wenn der Jumper gesetzt ist, wird auf der rechten Schraubklemme +5V ausgegeben und wir könnten theoretisch zusätzlich einen Mikrocontroller versorgen.

Stiftleisten zur Steuerung der Motoren

Die 8polige Stiftleiste ist wie folgt belegt:

ENA – Pin für den DC Motor 1, kann entweder mit einem Jumper gebrückt werden oder aber angeklemmt an einem PWM Pin des Mikrocontrollers kann eine genaue Geschwindigkeit gesetzt werden.

IN1 – zur Steuerung des DC Motors 1

IN2 – zur Steuerung des DC Motors 1

IN3 – zur Steuerung des DC Motors 2

IN4 – zur Steuerung des DC Motors 2

ENB – Pin für den DC Motor 2, kann entweder mit einem Jumper gebrückt werden oder aber angeklemmt an einem PWM Pin des Mikrocontrollers kann eine genaue Geschwindigkeit gesetzt werden.

steuern der Drehrichtung der Motoren

Motor 1

Vorwärts drehen

IN1HIGH
IN2LOW

Rückwärts drehen

IN1LOW
IN2HIGH

Motor 2

Vorwärts drehen

IN3HIGH
IN4LOW

Rückwärts drehen

IN3LOW
IN4HIGH

Spannungsversorgung der DC-Motoren

An der H-Brücke können DC-Motoren mit einer Spannungsversorgung von 5V bis max. 35V angeschlossen und betrieben werden. Man muss aber beachten das, dass Modul selber knapp 2V verbraucht und somit muss die Versorgungsspannung immer etwas über die eigentliche Spannung liegen.

D.h. möchte man einen 5V DC Motor mit seiner maximalen Drehzahl betreiben, somit muss eine Spannung von knapp 7V angelegt werden.

2V Spannungsabfall an der H-Brücke L298N
2V Spannungsabfall an der H-Brücke L298N

In meinem Fall nutze ich ein 4fach Batteriefach für Mignon Batterien für eine Spannung von 4x 1,5V = 6V (~ 6,47V gemessen mit dem Multimeter).

Batteriehalter 4xAA
Batteriehalter 4xAA

Aufbau einer Schaltung am Arduino UNO mit 2 DC-Motoren

Eine solche H-Brücke findest du Bsp. in einem 2 WD / 4 WD Set welches jeweils 2 oder 4 Räder hat.

Das oben gezeigt Set beinhaltet alles, was du benötigst, um ein kleines „Auto“ mit einem Arduino UNO aufzubauen. Und hier möchte ich dir nun gerne zeigen wie du die H-Brücke programmieren kannst, um die DC Motoren zu betreiben.

Benötigte Ressourcen für den Aufbau der Schaltung

Für den Aufbau benötigst du

Oder du nimmst ein wie bereits gezeigtes 2WD Set welches alle benötigten Bauteile enthält. Dieses Set bekommst du Bsp. über aliexpress.com sehr günstig.

Angebot - 4WD Arduino SmartCar
Angebot – 4WD Arduino SmartCar

Schaltung am Arduino UNO

Für den Aufbau verwende ich den Arduino UNO du kannst aber ebenso auch einen Arduino Nano, Leonardo oder auch den Mega 2560 R3 verwenden.

Programmieren in der Arduino IDE

Kommen wir zur Programmierung der H-Brücke in der Arduino IDE für den Arduino UNO.

// DC Motor 1
int ena = 10;
int in1 = 9;
int in2 = 8;

// DC Motor 2
int enb = 5;
int in3 = 7;
int in4 = 6;

void setup() {
  pinMode(ena, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);

  pinMode(enb, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
}

void loop() {
  //Motor 1 vorwärts drehen - volle Geschwindigkeit
  analogWrite(ena, 255);
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);

  //eine Pause von 2,5 Sekunden
  delay(2500);

  //Motor 1 rückwärts drehen - volle Geschwindigkeit
  analogWrite(ena, 255);
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);

  //eine Pause von 2,5 Sekunden
  delay(2500);

  //Motor 1 STOPP
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);

  //Motor 2 vorwärts drehen - volle Geschwindigkeit
  analogWrite(enb, 255);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);

  //eine Pause von 2,5 Sekunden
  delay(2500);

  //Motor 2 rückwärts drehen - volle Geschwindigkeit
  analogWrite(enb, 255);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);

  //eine Pause von 2,5 Sekunden
  delay(2500);

  //Motor 2 vorwärts drehen - halbe Geschwindigkeit
  analogWrite(enb, 128);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);

  //eine Pause von 2,5 Sekunden
  delay(2500);
}

Hier nun das Video zum Sketch / Programm am Arduino UNO.

Geschwindigkeit des Motors per PWM Signal regeln

Die Geschwindigkeit der angeschlossenen Motoren können mit PWM Signalen von 0 bis 255 gesteuert werden.

Jedoch dreht sich bei mir erst der Motor ab einem Wert von 45.

// DC Motor 1
int ena = 10;
int in1 = 9;
int in2 = 8;

void setup() {
  Serial.begin(9600);
  pinMode(ena, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
}

void loop() {
  //Motor zunächst vorwärts drehen lassen
  analogWrite(ena, 255);
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);

  //von ganz langsam bis max. Geschwindigkeit drehen
  for (int i = 0; i < 255; i++) {
    Serial.println(i);
    analogWrite(ena, i);
    delay(125);
  }

  //von max. Geschwindigkeit bis ganz langsam drehen
  for (int i = 255; i > 0; i--) {
    Serial.println(i);
    analogWrite(ena, i);
    delay(125);
  }
}

sdfgsdfgsdgf

18 Kommentare

  1. Erklärung bestens. Möchte Motor mit mehreren definierten Schritten vorwärts und ggf. rückwärts steuern, wie ist hierzu die Programmierung.

    Besten Dank und
    mfG
    Jens MEsstorff

    1. Hallo Jens,

      vielen Dank für deinen Kommentar.
      Schreibe mir doch einmal per E-Mail, was du genau vorhast, ggf. kann ich dich da unterstützen.

      Gruß

      Stefan Draeger

  2. Hallo Stefan,
    super erklärt!
    Kann man damit auch 2 kleine Vibrations-Motoren, die in der linken und rechten Hand gehalten werden sollen und dort abwechselnd vibrieren (Wechsel-Impuls-Geschwindigkeit über Poti regelbar!?) steuern?
    Und falls ja, wie?

    Mit einem netten Gruß von Jack

  3. Hallo Stefan,
    als Vibrationsmotoren würde ich gerne DC3Volt mit ca. 4000 RPM nehmen, wie es sie via Ebay gibt
    (falls das als Zusatzinfo wichtig ist).

    Nette Grüße von Jack

      1. Hi,

        einen 1KVA Motor wirst du am Arduino nicht steuern können. Hier benötigst du zusätzliche Technik wie Schütze oder Relais.

        Gruß,

        Stefan Draeger

  4. OK, keine Antworten – vielleicht war die Frage doch zu komplex / offen …

    Zum obigen Beispiel konkret:
    „… es können DC-Motoren von 5 Volt bis … angeschlossen werden. …“
    Da das Board offensichtlich selbst ca. 2 Volt benötigt, also nur 3 Volt ankommen, – bedeutet das, dass ich auch 3 Volt DC-Motoren damit steuern könnte? (Bei 5 Volt Stromversorgung)?
    Ich brauche nämlich eine Steuerung für zwei 3 Volt-Motoren.
    Oder ist das völlig abwegig?

    1. Hi,

      danke für deinen Kommentar, deine Frage habe ich wahrgenommen und wollte mich heute mal an einen kleinen Aufbau machen.
      Bitte schaue doch mal in ein paar Tagen vorbei dann denke ich habe ich eine Lösung für dich.

      Gruß,

      Stefan

    2. Hi Jack,

      du kannst 3V Motoren damit steuern, jedoch empfehle ich dir eine Konstante Stromquelle (also keine Batterie) du solltest aber trotzdem noch messen wieviel Volt verlust sind damit du den Rest mit einem Widerstand reduzieren kannst.

      Gruß, Stefan

  5. Hallo Stefan,

    ich möchte 1 DC12V Motor und einen Stepper (Nema17) Motor steuern. Beide Motoren sollen je zwei Microendschalter haben. Zusätzlich soll ein Hall Sensor am DC12V Motor die Drehezahl messen können (Es soll ein Spulenwicker werden der messen kann wie viel meter aufgewickelt worden ist).
    Hast Du dafür zuverlig eine Lösung.

    Vielen Dank.

    Mfg
    D. Horvat

    1. Hi,

      also die Drehzahl könnte man ermitteln, aber eine korrekte Spulenwicklung wird schwierig, denn die Spule wird ja mit zunehmender Zeit dicker und somit ändert sich der Durchmesser.
      Du müsstest dieses „irgendwie“ herausrechnen.

      Ich würde dir statt einem Hall Sensor eine Lochplatte auf der Welle des Motors mit einer Gabellichtschranke empfehlen, diese lässt sich zuverlässiger auswerten.

      Gruß,

      Stefan

      1. Hallo Stefan,

        ich gehe stark davon aus dass Du nicht so viel Zeit hast aber könntest Du mir das irgendwie auf ein Stückchen Papier alles bringen? Ich würde dir sehr dankbar sein da ich deine Arbeit die Du hier mach sehr schätze.

        Grüße
        Davor

        1. Hi,

          schreibe mir doch einmal per E-Mail was du genau vorhast und was die Endschalter der Motoren bezwecken sollen.
          Motor-Stopp, Motor-Richtung ändern, etc.

          Gruß,

          Stefan

  6. Hallo Stefan,
    ich habe versucht, anhand deines Spannungsabfall-Schaubildes an meinem Mini-Motorschield, nach Anlegen der Eingangsspannung via Netzteil an den 2 Motoranschlüssen per Multimeter zu messen, was ankommt.
    Im Display gab es nur 0.000 zu sehen.
    Kann es sein, dass – ohne dass die Steuerimpulse des Arduino bereits anliegen – die Messung an den Motorklemmen nichts ergibt?

    LG Jack

    1. Hi

      du musst natürlich einen digitalen Wert anlegen. Der Motor kann sich vorwärts und Rückwärts bewegen und soll auch stehenbleiben können.

      Gruß,

      Stefan Draeger

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert