Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

L298N-Motortreiber – Arduino-Schnittstelle, Funktionsweise, Codes, Schaltpläne

In diesem Arduino-Tutorial lernen wir, wie man Gleichstrommotoren mit Arduino steuert. Wir werfen einen Blick auf einige grundlegende Techniken zur Steuerung von Gleichstrommotoren und machen zwei Beispiele, anhand derer wir lernen, wie man Gleichstrommotoren mit dem L298N-Motortreiber und dem Arduino-Board steuert.

Sie können sich das folgende Video ansehen oder das schriftliche Tutorial unten lesen.

 

Wir können die Geschwindigkeit des Gleichstrommotors steuern, indem wir einfach die Eingangsspannung zum Motor steuern, und die gebräuchlichste Methode dafür ist die Verwendung eines PWM-Signals.

PWM-DC-Motorsteuerung

PWM oder Pulsweitenmodulation ist eine Technik, die es uns ermöglicht, den Durchschnittswert der Spannung, die an das elektronische Gerät geht, durch schnelles Ein- und Ausschalten der Stromversorgung anzupassen. Die durchschnittliche Spannung hängt von der Einschaltdauer oder der Zeitdauer ab, während der das Signal eingeschaltet ist, im Vergleich zur Zeitdauer, während der das Signal ausgeschaltet ist, in einem einzelnen Zeitraum.

Je nach Größe des Motors können wir also einfach einen Arduino-PWM-Ausgang an die Basis eines Transistors oder das Gate eines MOSFET anschließen und die Drehzahl des Motors durch Steuerung des PWM-Ausgangs steuern. Das Low-Power-Arduino-PWM-Signal schaltet das Gate am MOSFET ein und aus, durch das der Hochleistungsmotor angetrieben wird.

H-Brücken-DC-Motorsteuerung

Andererseits müssen wir zur Steuerung der Drehrichtung nur die Richtung des Stromflusses durch den Motor umkehren, und die gebräuchlichste Methode dafür ist die Verwendung einer H-Brücke. Eine H-Brückenschaltung enthält vier Schaltelemente, Transistoren oder MOSFETs, wobei der Motor in der Mitte eine H-ähnliche Konfiguration bildet. Durch gleichzeitiges Aktivieren von zwei bestimmten Schaltern können wir die Richtung des Stromflusses ändern und somit die Drehrichtung des Motors ändern.

Wenn wir also diese beiden Methoden, die PWM und die H-Brücke, kombinieren, können wir den Gleichstrommotor vollständig steuern. Es gibt viele Treiber für DC-Motoren mit diesen Funktionen, und der L298N ist einer davon.

L298N-Treiber

Der L298N ist ein dualer H-Brücken-Motortreiber, der die Geschwindigkeits- und Richtungssteuerung von zwei Gleichstrommotoren gleichzeitig ermöglicht. Das Modul kann Gleichstrommotoren mit Spannungen zwischen 5 und 35 V und einem Spitzenstrom von bis zu 2 A antreiben.

Schauen wir uns die Pinbelegung des L298N-Moduls genauer an und erklären, wie es funktioniert. Das Modul hat zwei Schraubklemmenblöcke für die Motoren A und B und einen weiteren Schraubklemmenblock für den Erdungsstift, den VCC für den Motor und einen 5-V-Stift, der entweder ein Eingang oder ein Ausgang sein kann.

Dies hängt von der Spannung ab, die an den Motoren VCC verwendet wird. Das Modul verfügt über einen integrierten 5-V-Regler, der mit einem Jumper entweder aktiviert oder deaktiviert wird. Wenn die Motorversorgungsspannung bis zu 12 V beträgt, können wir den 5-V-Regler aktivieren und der 5-V-Pin kann als Ausgang verwendet werden, beispielsweise um unser Arduino-Board mit Strom zu versorgen. Wenn die Motorspannung jedoch größer als 12 V ist, müssen wir den Jumper trennen, da diese Spannungen den integrierten 5-V-Regler beschädigen. In diesem Fall wird der 5-V-Pin als Eingang verwendet, da wir ihn an eine 5-V-Stromversorgung anschließen müssen, damit der IC ordnungsgemäß funktioniert.

Wir können hier feststellen, dass dieser IC einen Spannungsabfall von etwa 2 V verursacht. Wenn wir also beispielsweise eine 12-V-Stromversorgung verwenden, beträgt die Spannung an den Motorklemmen etwa 10 V, was bedeutet, dass wir nicht in der Lage sein werden, die maximale Geschwindigkeit aus unserem 12-V-Gleichstrommotor herauszuholen.

Als nächstes kommen die logischen Steuereingänge. Die Pins Enable A und Enable B werden zum Aktivieren und Steuern der Drehzahl des Motors verwendet. Wenn an diesem Pin ein Jumper vorhanden ist, wird der Motor aktiviert und arbeitet mit maximaler Geschwindigkeit, und wenn wir den Jumper entfernen, können wir einen PWM-Eingang an diesen Pin anschließen und auf diese Weise die Geschwindigkeit des Motors steuern. Wenn wir diesen Pin mit Masse verbinden, wird der Motor deaktiviert.

Als nächstes werden die Pins Eingang 1 und Eingang 2 zur Steuerung der Drehrichtung des Motors A und die Eingänge 3 und 4 für den Motor B verwendet. Mit diesen Pins steuern wir tatsächlich die Schalter der H-Brücke im L298N-IC. Wenn Eingang 1 LOW und Eingang 2 HIGH ist, bewegt sich der Motor vorwärts, und umgekehrt, wenn Eingang 1 HIGH und Eingang 2 LOW ist, bewegt sich der Motor rückwärts. Falls beide Eingänge gleich sind, entweder LOW oder HIGH, stoppt der Motor. Gleiches gilt für die Eingänge 3 und 4 und den Motor B.

Arduino- und L298N-Motortreiber

Lassen Sie uns nun einige praktische Anwendungen machen. Im ersten Beispiel steuern wir die Drehzahl des Motors mit einem Potentiometer und ändern die Drehrichtung mit einem Taster. Hier ist der Schaltplan.

Wir brauchen also einen L298N-Motortreiber, einen Gleichstrommotor, ein Potentiometer, einen Taster und ein Arduino-Board.

Die für dieses Arduino-Tutorial benötigten Komponenten erhalten Sie über die folgenden Links:

  • L298N-Fahrer ……………………………….. 
  • 12-V-Gleichstrommotor mit hohem Drehmoment ………….. 
  • Gleichstrommotor mit Kunststoffreifenrad …….
  • Arduino-Board ………………………………
  • Steckbrett und Schaltdrähte ………… 

Arduino-Code

Hier ist der Arduino-Code:

/* Arduino DC Motor Control - PWM | H-Bridge | L298N - Example 01 by Dejan Nedelkovski, www.HowToMechatronics.com */ #define enA 9 #define in1 6 #define in2 7 #define button 4 int rotDirection = 0; int pressed = false; void setup() { pinMode(enA, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(button, INPUT); // Set initial rotation direction digitalWrite(in1, LOW); digitalWrite(in2, HIGH); } void loop() { int potValue = analogRead(A0); // Read potentiometer value int pwmOutput = map(potValue, 0, 1023, 0 , 255); // Map the potentiometer value from 0 to 255 analogWrite(enA, pwmOutput); // Send PWM signal to L298N Enable pin // Read button - Debounce if (digitalRead(button) == true) { pressed = !pressed; } while (digitalRead(button) == true); delay(20); // If button is pressed - change rotation direction if (pressed == true & rotDirection == 0) { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); rotDirection = 1; delay(20); } // If button is pressed - change rotation direction if (pressed == false & rotDirection == 1) { digitalWrite(in1, LOW); digitalWrite(in2, HIGH); rotDirection = 0; delay(20); } } Codesprache:Arduino (arduino)

Beschreibung: Also müssen wir zuerst die Pins und einige Variablen definieren, die für das Programm benötigt werden. Im Setup-Bereich müssen wir die Pin-Modi und die anfängliche Drehrichtung des Motors einstellen. Im Schleifenabschnitt beginnen wir mit dem Lesen des Potentiometerwerts und ordnen dann den Wert, den wir daraus erhalten, der von 0 bis 1023 geht, einem Wert von 0 bis 255 für das PWM-Signal zu, oder das ist 0 bis 100 % Arbeitszyklus des PWM-Signal. Dann senden wir mit der Funktion analogWrite() das PWM-Signal an den Enable-Pin der L298N-Platine, die den Motor tatsächlich antreibt.

Als nächstes prüfen wir, ob wir die Taste gedrückt haben, und wenn das stimmt, ändern wir die Drehrichtung des Motors, indem wir die Zustände von Eingang 1 und Eingang 2 invertieren. Der Druckknopf funktioniert als Umschaltknopf und jedes Mal, wenn wir ihn drücken, ändert er die Drehrichtung des Motors.

Arduino-Roboterautosteuerung mit L298N-Motortreiber

Sobald wir das gelernt haben, können wir jetzt unser eigenes Arduino-Roboterauto bauen. Hier ist der Schaltplan:

Alles, was wir brauchen, sind 2 Gleichstrommotoren, der L298N-Motortreiber, ein Arduino-Board und ein Joystick für die Steuerung. Für die Stromversorgung habe ich mich für drei 3,7-V-Li-Ionen-Batterien entschieden, die insgesamt 11 V liefern. Das Chassis habe ich aus 3 mm dickem Sperrholz gefertigt, die Motoren mit Metallklammern daran befestigt, Räder an den Motoren befestigt und vorne ein Schwenkrad angebracht.

Schauen wir uns nun den Arduino-Code an und sehen, wie er funktioniert. (Unten finden Sie den vollständigen Code)

int xAxis = analogRead(A0); // Read Joysticks X-axis
int yAxis = analogRead(A1); // Read Joysticks Y-axis Codesprache:Arduino (arduino) 

Nachdem wir die Pins definiert haben, beginnen wir im Schleifenabschnitt mit dem Lesen der X- und Y-Achsenwerte des Joysticks. Der Joystick besteht eigentlich aus zwei Potentiometern, die mit den analogen Eingängen des Arduino verbunden sind und Werte von 0 bis 1023 haben. Wenn der Joystick in seiner Mittelposition bleibt, beträgt der Wert beider Potentiometer oder Achsen etwa 512.

Wir werden eine kleine Toleranz hinzufügen und die Werte von 470 bis 550 als Mitte betrachten. Wenn wir also die Y-Achse des Joysticks nach hinten bewegen und der Wert unter 470 fällt, setzen wir die Drehrichtung der beiden Motoren mithilfe der vier Eingangspins auf rückwärts. Dann werden wir die fallenden Werte von 470 bis 0 in steigende PWM-Werte von 0 bis 255 umwandeln, was eigentlich die Drehzahl des Motors ist.

// Y-axis used for forward and backward control
  if (yAxis < 470) {
    // Set Motor A backward
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    // Set Motor B backward
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    // Convert the declining Y-axis readings for going backward from 470 to 0 into 0 to 255 value for the PWM signal for increasing the motor speed
    motorSpeedA = map(yAxis, 470, 0, 0, 255);
    motorSpeedB = map(yAxis, 470, 0, 0, 255);
  } Codesprache:Arduino (arduino) 

Ähnlich, wenn wir die Y-Achse des Joysticks nach vorne bewegen und der Wert über 550 geht, werden wir die Motoren so einstellen, dass sie sich vorwärts bewegen und die Messwerte von 550 bis 1023 in PWM-Werte von 0 bis 255 umwandeln Motorgeschwindigkeit wird Null sein.

Als nächstes sehen wir uns an, wie wir die X-Achse für die linke und rechte Steuerung des Autos verwenden.

// X-axis used for left and right control
  if (xAxis < 470) {
    // Convert the declining X-axis readings from 470 to 0 into increasing 0 to 255 value
    int xMapped = map(xAxis, 470, 0, 0, 255);
    // Move to left - decrease left motor speed, increase right motor speed
    motorSpeedA = motorSpeedA - xMapped;
    motorSpeedB = motorSpeedB + xMapped;
    // Confine the range from 0 to 255
    if (motorSpeedA < 0) {
      motorSpeedA = 0;
    }
    if (motorSpeedB > 255) {
      motorSpeedB = 255;
    }
  } Codesprache:Arduino (arduino) 

Also müssen wir zuerst die Messwerte der X-Achse in Geschwindigkeitswerte von 0 bis 255 umwandeln. Für die Bewegung nach links verwenden wir diesen Wert, um die linke Motorgeschwindigkeit zu verringern und die rechte Motorgeschwindigkeit zu erhöhen. Hier verwenden wir wegen der arithmetischen Funktionen zwei zusätzliche „if“-Anweisungen, um den Bereich der Motordrehzahl von 0 bis 255 einzuschränken.

Die gleiche Methode wird verwendet, um das Auto nach rechts zu bewegen.

Siehe auch: So erstellen Sie einen PWM-DC-Motordrehzahlregler mit dem 555-Timer-IC

Abhängig von der angelegten Spannung und dem Motor selbst kann der Motor bei niedrigeren Drehzahlen nicht in Bewegung kommen und erzeugt ein brummendes Geräusch. In meinem Fall konnten sich die Motoren nicht bewegen, wenn der Wert des PWM-Signals unter 70 lag. Daher habe ich mich mit diesen beiden if-Anweisungen tatsächlich auf den Geschwindigkeitsbereich von 70 bis 255 beschränkt. Am Ende senden wir nur die endgültigen Motorgeschwindigkeiten oder PWM-Signal an die Enable-Pins des L298N-Treibers.

// Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM value was below value of 70)
  if (motorSpeedA < 70) {
    motorSpeedA = 0;
  }
  if (motorSpeedB < 70) {
    motorSpeedB = 0;
  }
  analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
  analogWrite(enB, motorSpeedB); // Send PWM signal to motor B Codesprache:Arduino (arduino) 

Hier ist der vollständige Code des Arduino-Roboterauto-Beispiels:

/*  Arduino DC Motor Control - PWM | H-Bridge | L298N
         Example 02 - Arduino Robot Car Control
    by Dejan Nedelkovski, www.HowToMechatronics.com
*/

#define enA 9
#define in1 4
#define in2 5
#define enB 10
#define in3 6
#define in4 7

int motorSpeedA = 0;
int motorSpeedB = 0;

void setup() {
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
}

void loop() {
  int xAxis = analogRead(A0); // Read Joysticks X-axis
  int yAxis = analogRead(A1); // Read Joysticks Y-axis

  // Y-axis used for forward and backward control
  if (yAxis < 470) {
    // Set Motor A backward
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    // Set Motor B backward
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    // Convert the declining Y-axis readings for going backward from 470 to 0 into 0 to 255 value for the PWM signal for increasing the motor speed
    motorSpeedA = map(yAxis, 470, 0, 0, 255);
    motorSpeedB = map(yAxis, 470, 0, 0, 255);
  }
  else if (yAxis > 550) {
    // Set Motor A forward
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    // Set Motor B forward
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    // Convert the increasing Y-axis readings for going forward from 550 to 1023 into 0 to 255 value for the PWM signal for increasing the motor speed
    motorSpeedA = map(yAxis, 550, 1023, 0, 255);
    motorSpeedB = map(yAxis, 550, 1023, 0, 255);
  }
  // If joystick stays in middle the motors are not moving
  else {
    motorSpeedA = 0;
    motorSpeedB = 0;
  }

  // X-axis used for left and right control
  if (xAxis < 470) {
    // Convert the declining X-axis readings from 470 to 0 into increasing 0 to 255 value
    int xMapped = map(xAxis, 470, 0, 0, 255);
    // Move to left - decrease left motor speed, increase right motor speed
    motorSpeedA = motorSpeedA - xMapped;
    motorSpeedB = motorSpeedB + xMapped;
    // Confine the range from 0 to 255
    if (motorSpeedA < 0) {
      motorSpeedA = 0;
    }
    if (motorSpeedB > 255) {
      motorSpeedB = 255;
    }
  }
  if (xAxis > 550) {
    // Convert the increasing X-axis readings from 550 to 1023 into 0 to 255 value
    int xMapped = map(xAxis, 550, 1023, 0, 255);
    // Move right - decrease right motor speed, increase left motor speed
    motorSpeedA = motorSpeedA + xMapped;
    motorSpeedB = motorSpeedB - xMapped;
    // Confine the range from 0 to 255
    if (motorSpeedA > 255) {
      motorSpeedA = 255;
    }
    if (motorSpeedB < 0) {
      motorSpeedB = 0;
    }
  }
  // Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM value was below value of 70)
  if (motorSpeedA < 70) {
    motorSpeedA = 0;
  }
  if (motorSpeedB < 70) {
    motorSpeedB = 0;
  }
  analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
  analogWrite(enB, motorSpeedB); // Send PWM signal to motor B
} Codesprache:Arduino (arduino) 

Das wäre also alles für dieses Tutorial, und in meinem nächsten Video werden wir dieses Arduino-Roboterauto aufrüsten, indem wir Bluetooth- und Funkgeräte hinzufügen, um Smartphones und drahtlose Steuerung zu ermöglichen.

Fühlen Sie sich frei, Fragen in den Kommentaren unten zu stellen, und vergessen Sie nicht, meine Sammlung von Arduino-Projekten zu überprüfen.


Herstellungsprozess

  1. Wie man IR-Fernbedienungen hackt
  2. Linienfolger-Roboter
  3. Wie man Arduino Mega mit dem NEO-6M GPS-Modul verbindet
  4. Arduino-Schulungsplattform
  5. Wie einfach ist es, einen Thermistor zu verwenden?!
  6. DIY Arduino Roboterarm – gesteuert durch Handgesten
  7. Bibliothek zur Steuerung von Gleichstrommotoren
  8. Wie man einen Mini-CNC-2D-Plotter mit einem Schrott-DVD-Laufwerk herstellt, L293D
  9. Hier ist eine Idee:Wie eine Gehirn-Computer-Schnittstelle funktioniert
  10. Die Vorteile von Direktantriebsmotoren – was es ist und wie es funktioniert.