Drucken
Hauptkategorie: Coding

Wie steuert man einen DC-Motor mit der H-Brücke L298N. Dieser Frage werde ich hier vollumfänglich nach kommen. Ich muss hier zugeben, dass ich die H-Brücke einfach so in Betrieb genommen habe. Ich schaute in die Datenblätter und sah, dass diese bis zu 40 Volt verträgt. Also habe ich einfach so die Brücke mit 24 Volt betrieben. Die Variante ist aber nicht wirklich dafür ausgelegt, was schnell für ein Wärmeproblem sorgt.

Was wir dafür brauchen ist ein DC-Motor, dafür reicht irgendein DC-Motor. Der DC-Motor hat 2 Anschlüsse. Ihr könnt die kleine Variante nehmen. 

günstiger DC Motor

Oder die etwas größere Variante. Obwohl die H-Brücke bei 24 Volt doch schon schnell an ihre Leistungsgrenzen kommt. Immerhin muss hier allein der DC-DC Wandler für den 5Volt Ausgang 19 Volt in Wärme verbrennen.

Die H-Brücke im Detail

Die Brücke ist für 2 Motoren ausgelegt und soll so wie sie ist ca. 25 Watt an Leistung verbrennen. Wer mehr möchte, kommt um eine eigene Lösung für eine Kühlung nicht herum. Bei meiner Schaltung verwendete ich statt 12 Volt, ein Netzteil mit 24 Volt und auch einen 24 Volt Motor. Schon nach kurzer Zeit wurde der DC-DC Wandler aber für die 5 Volt unglaublich heiß. Das ist auch nicht verwunderlich.

Die Rückseite ist wenig spektakulär. Zu sehen ist hier die Beschriftung für den 12 Volt Anschluss und den 5V Ausgang (Eingang, je nach Jumper), sowie die Pins Out1 - Out4 für die Motoren.

Die Vorderseite habe ich einmal komplett beschriftet.

 

Zu erwähnen sind hier die 3 Brücken (Jumper), welche zur Steuerung dienen (Jumper 5V, ENA, ENB). Zum einen hat man hier folgende Möglichkeiten. Der 5V Jumper dient zur Regelung der 5 Volt Spannung. Und zwar: gesteckter Jumper = 5V über den internen 5V DCDC L78M05. So kann man auch den Arduino an der 5V Klemme anschließen, für ihn ist also keine eigene Spannungsversorgung notwendig. Die 5Volt kann man dann direkt auf den 5V Pin des Arduino geben. Zieht man den Jumper ab, muss man selbst 5V an die Klemme des L298N bringen, denn die innere Logik des L298N muss mit 5V versorgt werden. Zusätzlich muss natürlich auch der Arduino mit 5V versorgt werden. Also lässt man im ersten Schritt den 5V Jumper gesteckt.

Anders sieht es mit den Jumpern ENA, ENB aus. Diese dienen zur Aktivierung der Motoren 1 und 2. Lässt man die Jumper gesteckt liegen an Motor 1 und 2 jeweils die Eingangsspannung an, welche man an der 12V Klemme angeschlossen hat. Bei meiner Wahl also die 24 Volt. Zieht man die Jumper ab, steuert man die Motoren über ein PWM Signal des Arduino. PWM steht dabei für Pulseweitenmodulation. Das bedeutet nichts anderes als ein schnelles An- und Abschalten der Spannung an den Anschlüssen für Motor 1 und 2. Vereinfacht gesagt: je länger die Pause zwischen An und Aus ist, umso langsamer wird sich der Motor drehen.

IN1 bis IN4 dienen dem Links- und Rechtslauf des Motors. Welche Richtung jetzt was ist, sollte man selbst herausfinden. Dabei kann man folgende Tabelle als Hilfe verwenden. Wobei ich HIGH und LOW durch 5 Volt respektive 0 Volt ersetzt habe.

 
Eingang 1
Eingang 2
Motor
IN1 - 5V IN2 - 0V Motor1 - dreht
IN1 - 0V IN2 - 5V Motor1 - dreht reverse
IN1 - 0V IN2 - 0V Motor1 - stopp
IN1 - 5V IN2 - 5V Motor1 - stopp
     
IN3 - 5V IN4 - 0V Motor2 - dreht
IN3 - 0V IN4 - 5V Motor2 - dreht reverse
IN3 - 0V IN4 - 0V Motor2 - stopp
IN3 - 5V In4 - 5V Motor2 - stopp

Natürlich kann man auch einen Motor an beiden Anschlüssen verwenden. Dabei wird IN1 mit IN4 verbunden und durch HIGH oder LOW versorgt und IN2 mit IN3. Die Ausgänge werden dann ebenfalls parallel geschaltet, indem man Out1 mit Out4 verbindet und Out2 mit Out3 (siehe Rückseite des L298N). Zudem wird ENA und ENB auch verbunden und gleichzeitig durch das PWM Signal versorgt. Ich habe das einmal symbolisch im nächsten Bild festgehalten.

Ein Fritzing Bild folgt im nächsten Abschnitt.

Arduino mit L298N verbinden

Für den Anschluss des Arduino gibt es natürlich keine fertige Patentlösung. Jeder kann die Ein- und Ausgänge selbst bestimmen. Ich verwende hier einen Arduino Mega. Wer einen UNO oder Nano verwendet, muss sich natürlich eigene Anschlüsse suchen, weil meine verwendeten womöglich nicht zur Verfügung stehen. Als Steller für den Links- und Rechtslauf verwenden wir einen Taster. Der Taster ist direkt an 5V angeschlossen. Die andere Seite wird über einen 1000Ω Widerstand auf 0 Volt gelegt. Diesen Widerstand nennt man Pulldown Widerstand. Er sorgt dafür, dass zum einen beim Drücken des Tasters der Arduino erfährt, dass der Taster betätigt wurde. Zum anderen wird über den Widerstand die Spannung recht schnell wieder abgeführt. Wählt man den Widerstand zu klein, kann das zum Kurzschluss führen.

Für die Regelung der Drehzahl verwenden wir ein 10KΩ Potentiometer. Einer der beiden äußeren Anschlüsse wird auf 5 Volt gelegt, der andere äußere Anschluss auf 0 Volt. Der mittlere Anschluss ist der Schleifer, diesen legen wir auf A1 des Arduino.

Sonst ist Pin13 des Arduino mit ENA der H-Brücke verbunden. Pin 30

Als erstes das Bild der Steckplatine mit einem Motor.

Und die Variante wo die Ausgänge parallel geschaltet sind und man den Motor mit doppelter Power betreiben kann.

Bei beiden Varianten wird der Arduino über die H-Brücke mit Spannung versorgt.

Der Arduino Scetch

Der Scetch ist relativ einfach und benötigt keine externe Bibliothek. Als erstes definieren wir die Pins 13 (PWM Output), 30 (Taster Input), 32 und 33 (IN1 und IN2 Output). Dann legen wir eine Richtung fest in der sich der Motor dreht, geben auf IN1 und IN2 einen Defaultwert und rufen dann im Loop ständig den Wert des Potentiometers und des Tasters ab. Darüber steuern wir dann die Drehrichtung und Drehzahl.

/*
   DC Motorsteuerung mit der H-Brücke L298N
   written by Ronny Witzgall
*/

//Ports definieren
#define enableA 13  //PWM-Signal
#define taster 30   //Tastereingang
#define in1 32      //IN1 der H-Brücke
#define in2 33      //IN2 der H-Brücke

//Default Vorwärts drehen
int richtungVorw = 1;
//Der Taster wurde gedrückt
int pressed = false;

void setup() {
  //PinModes setzen
  pinMode(enableA, OUTPUT);
  pinMode(taster, INPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);

  //am Anfang Motor vorwärts
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
}

void loop() {

  //Wert Poti auslesen
  int potentiometer = analogRead(A1);
  //Auf PWM Wert herunterbrechen
  int pwmOutput = map(potentiometer, 0, 1023, 0, 255);

  //Wert an EnableA der H-Brücke schicken
  analogWrite(enableA, pwmOutput);

  //Taster wurde gedrückt
  if (digitalRead(taster) == true)
  {
    //Taster wurde gedrückt umschalten
    pressed = !pressed;
  }

  //So lange hier durchlaufen bis der Taster losgelassen wurde
  while (digitalRead(taster) == true)
  {
    delay(20);
  }

  //Taster wurde gedrückt und Richtung ist vorwärts
  if (pressed == true & richtungVorw == 1)
  {
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    richtungVorw = 0;
    delay(20);
  }

  //Taster wurde gedrückt und Richtung ist rückwärts
  if (pressed == false & richtungVorw == 0)
  {
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    richtungVorw = 1;
    delay(20);
  }
}

 

Das war es dann schon. Auf Youtube habe ich das gesamte noch einmal auf Video aufgenommen. Das Video habe ich so aufgenommen wie ich die Brücke in die Hände bekommen habe, ohne es vorher zu testen.

so weit...