Raspberry Pi - DC Motor

Diese Anleitung zeigt Ihnen, wie Sie mit dem Raspberry Pi einen DC Motor steuern. Im Detail lernen wir:

Erforderliche Hardware

1×Raspberry Pi 5
1×L298N Motortreiber-Modul
1×5V DC-Motor
1×(Optional) 12V DC Motor
1×5V Netzteil für 5V DC Motor
1×DC-Stromanschluss
1×Verbindungskabel
1×(Empfohlen) Schraubklemmenblock-Shield für Raspberry Pi
1×(Empfohlen) Raspberry Pi Prototyping-Grundplatte & Breadboard-Kit
1×(Empfohlen) HDMI-Touchscreen-Monitor für Raspberry Pi

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über DC Motor

DC Motor Pinout

Ein DC Motor hat zwei Drähte, wobei der positive normalerweise rot und der negative normalerweise schwarz ist.

DC Motor pinout

Funktionsweise

Beim Kauf eines DC Motors ist es wichtig, die Betriebsspannung zu verstehen. Betrachten wir zum Beispiel einen 12V DC Motor.

Wenn Sie den 12V DC Motor mit einer 12V Stromquelle versorgen:

  • Verbinden Sie 12V und GND mit dem positiven bzw. negativen Draht: der DC Motor dreht sich mit maximaler Geschwindigkeit im Uhrzeigersinn
  • Verbinden Sie 12V und GND mit dem negativen bzw. positiven Draht: der DC Motor dreht sich mit maximaler Geschwindigkeit gegen den Uhrzeigersinn

Wie bereits erwähnt, kehrt das Vertauschen der Strompolung zwischen den beiden Drähten des DC Motors dessen Drehrichtung um. Dies ist eine Möglichkeit, die Richtung des DC Motors zu steuern, aber nicht durch manuelle Änderung, sondern durch Programmierung.

Wenn die Spannung der Stromversorgung für einen DC Motor weniger als 12V beträgt, wird er sich immer noch drehen, aber nicht mit maximaler Geschwindigkeit. Das bedeutet, dass wir durch Änderung der Spannung die Geschwindigkeit des DC Motors verändern können. Dieser Ansatz wird jedoch normalerweise nicht verwendet, da es schwierig ist, die Spannung der Stromquelle zu kontrollieren. Daher wird die Spannung der Stromquelle konstant gehalten und die Geschwindigkeit des DC Motors durch ein PWM-Signal reguliert. Je größer das Tastverhältnis des PWM, desto schneller dreht sich der DC Motor.

How to control DC motor

DC Motor mit Raspberry Pi steuern

Die Steuerung eines DC Motors umfasst zwei Faktoren: Geschwindigkeit und Richtung. Der Raspberry Pi kann ein PWM-Signal erzeugen, aber dieses Signal hat niedrige Spannung und Strom, sodass es nicht direkt zur Motorsteuerung verwendet werden kann. Wir benötigen einen Hardware-Driver zwischen Raspberry Pi und dem DC Motor. Der Driver erfüllt zwei Aufgaben:

  • Verstärkung des PWM-Signals vom Raspberry Pi (in Bezug auf Strom und Spannung) für die Geschwindigkeitssteuerung
  • Empfang des Steuersignals vom Raspberry Pi zum Umschalten der Polarität der Stromversorgung für die Richtungssteuerung.
Raspberry Pi control DC motor

※ Notiz:

  • Diese Anleitung kann für jeden DC Motor verwendet werden. Wir verwenden einen 12V DC Motor als Beispiel.
  • Bei der Steuerung eines 5V DC Motors ist ein Driver zwischen Raspberry Pi und DC Motor erforderlich, obwohl der Raspberry Pi Pin 5V ausgibt (was der DC Motor Spannung entspricht), da der Raspberry Pi Pin nicht genug Strom für den DC Motor liefern kann.

Es gibt viele Arten von Chips und Modulen, die als Driver zur Steuerung von DC Motoren verwendet werden können. In dieser Anleitung verwenden wir ein Modul namens L298N.

Über L298N Driver

Der L298N Driver kann zur Steuerung von DC Motoren und Schrittmotoren verwendet werden. Diese Anleitung zeigt Ihnen, wie Sie ihn zur Steuerung des DC Motors verwenden.

L298N Driver Pinout

L298N Driver pinout

Der L298N Driver kann zwei DC Motoren unabhängig und gleichzeitig steuern, bezeichnet als Motor A und Motor B. Dieser Driver hat insgesamt 13 Pins.

Die gemeinsamen Pins für beide Motoren:

  • VCC Pin: Dieser Pin versorgt den Motor mit Strom und kann von 5V bis 35V reichen.
  • GND Pin: Dieser Pin ist mit der Masse (0V) verbunden und dient als gemeinsame Masse.
  • 5V Pin: Dieser Pin versorgt das L298N Modul mit Strom und kann vom 5V Ausgang eines Raspberry Pi stammen.

Motor A Pins (Kanal A):

  • ENA Pins: Diese Pins werden zur Regelung der Geschwindigkeit von Motor A verwendet. Durch Entfernen des Jumpers und Verbinden dieses Pins mit einem PWM-Eingang können wir die Geschwindigkeit von Motor A steuern.
  • IN1 & IN2 Pins: Diese Pins sind für die Steuerung der Drehrichtung von Motor A zuständig. Wenn einer davon auf HIGH und der andere auf LOW gesetzt ist, dreht sich Motor A. Wenn beide Eingänge entweder HIGH oder LOW sind, stoppt Motor A.
  • OUT1 & OUT2 Pins: Diese Pins sind mit Motor A verbunden.

Motor B Pins (Kanal B):

  • Wenn die Eingänge IN3 & IN4 HIGH oder LOW sind, dreht sich Motor B und die OUT3 & OUT4 Pins liefern den Strom zum Motor.
  • ENB Pins: können zur Steuerung der Geschwindigkeit von Motor B verwendet werden. Durch Entfernen des Jumpers und Verbinden dieses Pins mit einem PWM-Eingang können wir die Geschwindigkeit von Motor B steuern.
  • IN3 & IN4 Pins: sind für die Steuerung der Drehrichtung von Motor B zuständig. Wenn einer davon HIGH und der andere LOW ist, dreht sich Motor B. Wenn beide Eingänge entweder HIGH oder LOW sind, stoppt Motor B.
  • OUT3 & OUT4 Pins: sind mit Motor B verbunden. Wenn die Eingänge IN3 & IN4 HIGH oder LOW sind, dreht sich Motor B und die OUT3 & OUT4 Pins liefern den Strom zum Motor.

Der L298N Driver hat zwei Eingangsstromquellen:

  • Eine für den DC Motor (VCC und GND Pins) von 5 bis 35V.
  • Eine für den internen Betrieb des L298N Moduls (5V und GND Pins) mit einem Spannungsbereich von 5 bis 7V.

Entfernen Sie alle Jumper vom L298N Driver zur Vereinfachung. Dies ist notwendig, da die Jumper für erweiterte Anwendungen oder andere Zwecke verwendet werden.

Wir können zwei DC Motoren unabhängig und gleichzeitig mit einem Raspberry Pi und einem L298N Driver steuern. Um jeden Motor zu steuern, benötigen wir nur drei Pins vom Raspberry Pi.

※ Notiz:

Der Rest dieser Anleitung konzentriert sich auf die Steuerung eines DC Motors mit Kanal A. Ähnliche Schritte können zur Steuerung des anderen DC Motors unternommen werden.

Geschwindigkeitssteuerung des DC Motors über L298N Driver

Es ist einfach, die Geschwindigkeit eines DC Motors anzupassen, indem ein PWM-Signal zum ENA Pin des L298N erzeugt wird. Dies kann folgendermaßen erreicht werden:

  • Verbinden Sie einen Raspberry Pi Pin mit dem ENA des L298N
  • Erzeugen Sie ein PWM-Signal zum ENA Pin mit der pwm.ChangeDutyCycle() Funktion. Der L298N Driver verstärkt das PWM-Signal zum DC Motor.
pwm.ChangeDutyCycle(speed) # speed ist ein Wert von 0 bis 100

Die Geschwindigkeit liegt im Bereich von 0 bis 100. Wenn die Geschwindigkeit 0 ist, bewegt sich der Motor nicht. Wenn die Geschwindigkeit 100 ist, dreht sich der Motor mit höchster Geschwindigkeit.

Richtungssteuerung des DC Motors über L298N Driver

Die Drehung eines Motors kann durch Anlegen von logisch HIGH/LOW an die IN1 und IN2 Pins gesteuert werden. Die folgende Tabelle zeigt, wie die Richtung in beiden Kanälen gesteuert wird.

IN1 Pin IN2 Pin Richtung
LOW LOW Motor A stoppt
HIGH HIGH Motor A stoppt
HIGH LOW Motor A dreht sich im Uhrzeigersinn
LOW HIGH Motor A dreht sich gegen den Uhrzeigersinn

Entsprechend:

  • Raspberry Pi zur Steuerung von Motor A in Uhrzeigerrichtung.
GPIO.output(IN1_PIN, GPIO.HIGH) GPIO.output(IN2_PIN, GPIO.LOW)
  • Raspberry Pi zur Steuerung von Motor A in Gegen-Uhrzeigerrichtung.
GPIO.output(IN1_PIN, GPIO.LOW) GPIO.output(IN2_PIN, GPIO.HIGH)

※ Notiz:

Die Drehrichtung des Motors kann umgekehrt werden, indem die OUT1 und OUT2 Pins in umgekehrter Weise mit den zwei Pins des DC Motors verbunden werden. Dazu ist es notwendig, entweder die OUT1 und OUT2 Pins zu vertauschen oder das Steuersignal an den IN1 und IN2 Pins im Code zu ändern.

DC Motor zum Stillstand bringen

Zwei Methoden zum Anhalten eines DC Motors sind:

  • Die Geschwindigkeit auf null reduzieren
pwm.ChangeDutyCycle(0)
  • Beide IN1 und IN2 Pins auf denselben Wert setzen, entweder LOW oder HIGH.
GPIO.output(IN1_PIN, GPIO.LOW) GPIO.output(IN2_PIN, GPIO.LOW)
  • Oder
GPIO.output(IN1_PIN, GPIO.HIGH) GPIO.output(IN2_PIN, GPIO.HIGH)

DC Motor mit L298N Driver steuern.

Schaltdiagramm

Entfernen Sie alle drei Jumper vom L298N Modul vor dem Anschließen.

Raspberry Pi DC Motor L298N Driver wiring diagram

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Um Ihren Verdrahtungsaufbau zu vereinfachen und zu organisieren, empfehlen wir die Verwendung eines Schraubklemmenblock-Shields für Raspberry Pi. Dieses Shield gewährleistet sicherere und besser verwaltbare Verbindungen, wie unten gezeigt:

Raspberry Pi Schraubklemmenblock-Shield

Raspberry Pi Code

Wir schreiben Python-Code, der auf dem Raspberry Pi läuft, um folgendes zu tun:

  • Die Geschwindigkeit eines DC Motors erhöhen
  • Die Richtung ändern
  • Die Geschwindigkeit eines DC Motors verringern
  • Den Motor anhalten

Schnelle Schritte

  • Entfernen Sie alle drei Jumper vom L298N Modul.
  • Stellen Sie sicher, dass Sie Raspbian oder ein anderes Raspberry Pi-kompatibles Betriebssystem auf Ihrem Pi installiert haben.
  • Stellen Sie sicher, dass Ihr Raspberry Pi mit demselben lokalen Netzwerk wie Ihr PC verbunden ist.
  • Stellen Sie sicher, dass Ihr Raspberry Pi mit dem Internet verbunden ist, falls Sie Bibliotheken installieren müssen.
  • Wenn Sie zum ersten Mal einen Raspberry Pi verwenden, siehe Raspberry Pi einrichten
  • Verbinden Sie Ihren PC über SSH mit dem Raspberry Pi mit dem integrierten SSH-Client unter Linux und macOS oder PuTTY unter Windows. Siehe PC mit Raspberry Pi über SSH verbinden.
  • Stellen Sie sicher, dass Sie die RPi.GPIO Bibliothek installiert haben. Falls nicht, installieren Sie sie mit folgendem Befehl:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Erstellen Sie eine Python-Script-Datei dc_motor.py und fügen Sie folgenden Code hinzu:
# Dieser Raspberry Pi Code wurde von newbiely.de entwickelt # Dieser Raspberry Pi Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. # Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: # https://newbiely.de/tutorials/raspberry-pi/raspberry-pi-dc-motor import RPi.GPIO as GPIO import time # Constants ENA_PIN = 25 # GPIO pin connected to the EN1 pin L298N IN1_PIN = 8 # GPIO pin connected to the IN1 pin L298N IN2_PIN = 7 # GPIO pin connected to the IN2 pin L298N # Setup GPIO.setmode(GPIO.BCM) GPIO.setup(ENA_PIN, GPIO.OUT) GPIO.setup(IN1_PIN, GPIO.OUT) GPIO.setup(IN2_PIN, GPIO.OUT) # Create PWM object pwm = GPIO.PWM(ENA_PIN, 100) # 100 Hz frequency # Main loop try: while True: # Motor A spins clockwise GPIO.output(IN1_PIN, GPIO.HIGH) GPIO.output(IN2_PIN, GPIO.LOW) # Increase speed gradually for speed in range(0, 101): pwm.ChangeDutyCycle(speed) time.sleep(0.01) time.sleep(1) # Rotate at maximum speed for 1 second in clockwise direction # Change direction to anti-clockwise GPIO.output(IN1_PIN, GPIO.LOW) GPIO.output(IN2_PIN, GPIO.HIGH) time.sleep(1) # Rotate at maximum speed for 1 second in anti-clockwise direction # Decrease speed gradually for speed in range(100, -1, -1): pwm.ChangeDutyCycle(speed) time.sleep(0.01) time.sleep(1) # Stop motor for 1 second except KeyboardInterrupt: pass finally: # Stop PWM and cleanup GPIO on program exit pwm.stop() GPIO.cleanup()
  • Speichern Sie die Datei und führen Sie das Python-Script aus, indem Sie folgenden Befehl im Terminal eingeben:
python3 dc_motor.py

Das Script läuft in einer Endlosschleife kontinuierlich, bis Sie Ctrl + C im Terminal drücken.

Sie werden beobachten:

  • Der DC Motor wird beschleunigen, dann 1 Sekunde lang mit maximaler Geschwindigkeit drehen.
  • Die Richtung des DC Motors wird geändert.
  • Der DC Motor wird 1 Sekunde lang mit maximaler Geschwindigkeit in die entgegengesetzte Richtung drehen.
  • Der DC Motor wird abbremsen.
  • Der DC Motor wird 1 Sekunde lang stillstehen.
  • Dieser Prozess wird kontinuierlich wiederholt.

※ Notiz:

Diese Anleitung zeigt Ihnen, wie Sie die Geschwindigkeit eines DC Motors im Verhältnis zu seiner maximalen Geschwindigkeit anpassen. Um die absolute Geschwindigkeit (Umdrehungen pro Sekunde) zu steuern, benötigen wir einen PID-Controller und einen Encoder. Die Steuerung der absoluten Geschwindigkeit des DC Motors wird in einer anderen Anleitung behandelt.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!