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):
Shop | Preis |
---|---|
ebay.de* | 1 € – 7 € |
amazon.de* | 5,49 € |
reichelt.de | 5,70 € |
aliexpress.com | 0,97 € |
bastelshop24.de | 3,10 € |
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
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
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
IN1 | HIGH |
IN2 | LOW |
Rückwärts drehen
IN1 | LOW |
IN2 | HIGH |
Motor 2
Vorwärts drehen
IN3 | HIGH |
IN4 | LOW |
Rückwärts drehen
IN3 | LOW |
IN4 | HIGH |
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.
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).
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
- eine H-Brücke vom Typ L298N,
- zwei 5V DC-Motoren,
- eine 7V Spannungsquelle zbsp. ein Batteriefach für 4 Stck. AA Batterien,
- vier Stück AA , Mignon Batterien,
- einen Arduino UNO,
- diverse Breadboardkabel
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.
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
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
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
Tolle Seite ohne viel Schnickschack…
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
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
İch mochte steurung 1kw ac motoren mit arduino.bitte hilfe
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
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?
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
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
Lieber Stefan,
thanks in advance! *vorfreu*
Jack
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
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
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
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
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
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
Hallo Stefan,
die Stromversorgung des Arduino erfolgt aber bei dir separat oder?
Oder kommt das auch aus dem 7V Batteriepack?
Danke für die Klarstellung.
Viele Grüße
Jan
Hi,
ja der Arduino UNO bekommt seinen Strom über dem USB Port vom Computer.
Gruß, Stefan
Hi, sehr gute Beschreibung.
Hätte aber noch eine Frage… bin leider eher in der mechanischen Anwendung drinnen 🙁
Wollte den Treiber für den folgenden Anwendungsfall nehmen:
– über einen magnetischen Reedkontakt soll der Motor (12V mit Planetengetriebe – 20 U/min an der eine Exenderscheibe befestigt ist) eine Umdrehung machen und über einen zweiten Kontakt nach der einen Umdrehung die Bewegung in der definierten Position stoppen.
Der Kontakt für das Starten der Bewegung sollte ja kein Problem sein (in die +12 rein nehmen). Aber wie verdrahte ich den zweiten Kontakt nach der einen Umdrehung der Exenderscheibe?
Geht das überhaupt mit dem Gleichströmer oder müsste das über einen Schrittmotor gelöst werden?
Danke und viele Grüße
Armin
Sehr gute Seite Stefan.
Finde gut was du machst und kann immer nur wieder staunen was man mit arduino alles machen kann.
Nun zu meinem Projekt. Habe einen Roboter per 3d druck entworfen und nema08 an 3achsen. Hab mir zwar fest vorgenommen C/C+ zu lernen aber das fuhrt mich nicht schnell genug ans Ziel. Möchte als erstes einmal diese drei Achsen auch per steps laufen lassen können bzw die mit fernbedienung gemachten Bewegungen zu speichern und dann autonom abfahren zu können. Naja…ich lerne auf das Ziel hin. Zum ersten Schritt brauchte ich nur einmal Hilfe was ich brauche um wenigstens ersteinmal die Motoren mit joystick zu steuern.
MFG
Hi,
für die Schrittmotoren gibt es spezielle Treiber und auch Shields welche du simple auf den Arduino UNO stecken kannst.
Um diese dann mit einem Joystick zu steuern musst du dann das analoge Signal des Joysticks auswerten und dann jeweils den Motor in die Richtung bewegen. Die Beschreibung ist nun sehr abstrakt, aber kein hexenwerk.
Gruß, Stefan