Python exemplarisch - RPi Tutorial
deutsch     english

GLEICHSTROMMOTOREN

 

Alle Programme können von hier heruntergeladen werden.


 

Ansteuerung von DC-Motoren mit einer H-Brückenschaltung

 

 

 

Ein Gleichstrommotor (DC-Motor) ist eine wichtige und lehrreiche technische Anwendung eines fundamentalen physikalischen Gesetzes. Dieses sagt aus, dass eine bewegte Ladung, hier der Elektronenstrom in einem Draht, eine Kraft (Lorentzkraft) erfährt, wenn ein Magnetfeld angelegt wird. Mit anderen Worten, wenn ein Strom durch einen Draht fliesst, der sich in einem Magnetfeld befindet, so erfährt der Draht eine Kraft. Durch die spezielle Motorkonstruktion mit einem drehbaren Anker wird diese Kraft in ein Drehmoment umgewandelt, das die Motorwelle antreibt. Wenn der Strom in der umgekehrten Richtung fliesst, so dreht sich der Motor entsprechend in der entgegengesetzten Richtung.

Um die Richtung des Stromes umzudrehen, wird bei Kleinmotoren oft eine Schaltung verwendet, die dem Buchstaben "H" gleicht. Diese wird auch als H-Brücke bezeichnet. Das Funktionsschema sieht wie folgt aus:

 

motor1

Durch Schliessen der richtigen Schalter kann die Versorgungsspannung des Motors Null sein oder positive bzw. negative Polarität haben.

Schalter Motor
S1, S4 geschlossen (S2, S3 offen) Rotation vorwärts
S2, S3 geschlossen (S1, S4 offen) Rotation rückwärts
S2, S4 geschlossen (S1, S3 offen) Stopp
S1, S3 geschlossen (S2, S4 offen) Stopp
S1, S2, S3, S4 open Stopp

Nicht alle Schalterkombinationen sind zulässig. Das Schliessen von S1 und S2 oder S3 und S4 verursacht einen Kurzschluss.

In der Elektronik wird eine H-Brücke meist mit einem Treiber aufgebaut, der den Ausgang Q entweder auf GND oder VCC zieht oder offen lässt (3 Zustände). Die Schaltung hat zwei Eingänge A und En (Enable) und einen Ausgang Q gemäss folgender Wahrheitstafel und wird als "Halbe H-Brücke" (half H-bridge) bezeichnet

Halbe H-Brücke:

motor3

Wahrheitstafel:

 A  En  Q
 L  H  L
 H  H  H
 L  L  offen
 H  L  offen

L: low, GND, Logic 0
H: high, VCC, Logic 1

Zwei halbe H-Brücken können die Funktion einer H-Brücke zur Ansteuerung eines Motors übernehmen:

motor2

 

Da der Motor mit der Spannung zwischen Q1 und Q2 versorgt wird, stoppt er immer, wenn Q1 und Q2 gleiche Pegel haben. Daher werden die Eingänge En1 und En2 gar nicht gebraucht und können immer auf HIGH (enable) gesetzt sein. Der Motor wird allein durch die zwei Eingänge A1 und A2 gesteuert:

 

Wahrheitstafel:

 A1 A2 Motor
 H  L  vorwärts
 L  H  rückwärts
 L  L  stopp
 H  H  stopp

 

 

Experiment 1: Vorwärts/Rückwärts-Steuerung mit zwei Motoren

 
Ziel:
Verwenden Sie das weit verbreitete Bauelement L293D und schliessen Sie zwei DC-Motoren an. Führen Sie irgendeine Bewegungssequenz aus. (Falls Sie keine Motoren haben, können Sie diese mit zwei LEDs simulieren.)

hand1

Achtung: Schliessen Sie nie einen DC-Motor direkt an einen GPIO-Port an. Beim Abschalten des Motors können durch Induktion verursachte Spannungsspitzen entstehen, die den GPIO-Port zerstören.

Schaltschema:

motor7

Programm:[►]

# Motor1.py
# Motor forward & backward

import RPi.GPIO as GPIO
import time

P_MOTA1 = 18
P_MOTA2 = 22

def forward():
    GPIO.output(P_MOTA1, GPIO.HIGH)
    GPIO.output(P_MOTA2, GPIO.LOW)

def backward():        
    GPIO.output(P_MOTA1, GPIO.LOW)
    GPIO.output(P_MOTA2, GPIO.HIGH)
    
def stop():
    GPIO.output(P_MOTA1, GPIO.LOW)
    GPIO.output(P_MOTA2, GPIO.LOW)

def setup():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(P_MOTA1, GPIO.OUT)
    GPIO.setup(P_MOTA2, GPIO.OUT)
    
print "starting"
setup()
while True:
    print "forward"
    forward()
    time.sleep(2)
    print "backward"
    backward()
    time.sleep(2)
    print "stop"
    stop()
    time.sleep(2)
Highlight program code (Ctrl+C copy, Ctrl+V paste)

Bemerkungen:
Der L293D (mit D am Ende) verfügt zum Schutz vor induktiven Spannungsspitzen über interne Dioden. So können daher DC-Motoren, Relais und Magnete ohne externe Schutzdioden verwenden.

Wenn Sie kleine 5-6 V Motoren (z.B. Micro Metal Gear Motoren von Pololu, PIROMONI und anderen) haben, können Sie diese direkt über die 5V-Versorgung des Raspberry (Pin #2) betreiben.

 

 

Experiment 2: Geschwindigkeitsregelung mit PWM

 

Ziel:
Schliessen Sie einen oder zwei DC-Motoren über einen Motortreiber LM293D an und erhöhen Sie die Vorwärtsgeschwindigkeit in Schritten von 10% Dutycycle bis zum Maximum. Machen Sie dann das Gleiche für die Rückwärtsbewegung

Der Motor wird wie eine LED aufgefasst, die man mit PWM dimmt. Lesen Sie im Kapitel LED-Dimmen, wie man mit PWM umgeht.

Schaltschema:
Das Gleiche wie oben

Programm:[►]

# Motor2.py
# Motor speed & direction 

import RPi.GPIO as GPIO
import time

P_MOTA1 = 18
P_MOTA2 = 22
fPWM = 50  # Hz (not higher with software PWM)

def forward(speed):
    pwm1.ChangeDutyCycle(speed)
    pwm2.ChangeDutyCycle(0)

def backward(speed):        
    pwm1.ChangeDutyCycle(0)
    pwm2.ChangeDutyCycle(speed)
    
def stop():
    pwm1.ChangeDutyCycle(0)
    pwm2.ChangeDutyCycle(0)

def setup():
    global pwm1, pwm2
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(P_MOTA1, GPIO.OUT)
    pwm1 = GPIO.PWM(P_MOTA1, fPWM)
    pwm1.start(0)
    GPIO.setup(P_MOTA2, GPIO.OUT)
    pwm2 = GPIO.PWM(P_MOTA2, fPWM)
    pwm2.start(0)
    
print "starting"
setup()
for speed in range(10, 101, 10):
    print "forward with speed", speed
    forward(speed)
    time.sleep(2)
for speed in range(10, 101, 10):
    print "backward with speed", speed
    backward(speed)
    time.sleep(2)
print "stopping"
stop()
GPIO.cleanup()    
print "done"
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

Bemerkung:
Der Dutycycle duty = 0 % entspricht der konstanten Spannung 0V und duty = 100 % der konstanten Spannung VCC.


 

Experiment 3: Motorsteuerung mit einem optischen Rotationsencoder

 

 

(to be done)