3.15. Gleichstrommotor-Steuerung

Ein bürstenbehafteter Gleichstrommotor ist eine Drahtspule auf einer Welle innerhalb eines Magnetfelds. Lässt man Strom durch die Spule fließen, übt das Feld eine Kraft auf sie aus; diese Kraft wird zum Drehmoment auf der Welle. Bürsten im Inneren des Motors schalten die Stromrichtung in der Spule um, während sich die Welle dreht, sodass das Drehmoment die Welle stets in dieselbe Richtung treibt. Legt man eine Gleichspannung an die beiden Motoranschlüsse an, dreht sich die Welle; vertauscht man die Polarität, dreht sie sich in die andere Richtung.

Motoren benötigen typischerweise einige hundert Milliampere bis mehrere Ampere bei Versorgungsspannungen oberhalb der 3,3-V-Logikspannung der Kamera. Ein GPIO-Pin kann etwa 25 mA liefern und kann die Polarität nicht umkehren – er kann nur seine beiden Spannungsschienen ansteuern. Die Treiberstufe zwischen Kamera und Motor muss den Motorstrom tragen, eine separate Motorversorgung mit höherer Spannung führen und es der Kamera ermöglichen, die Polarität auf Befehl umzukehren. Die Vier-Transistor-H-Brücke ist die Standardlösung.

3.15.1. Die H-Brücke

Eine H-Brücke besteht aus vier Schaltern, die in einem H um den Motor herum angeordnet sind:

Ein H-Brücken-Schaltbild. Vmotor oben verbindet über Schalter S1 nach unten zu einem Knoten A links und über Schalter S2 nach unten zu einem Knoten B rechts. Der Motor M liegt waagerecht zwischen A und B. Von A führt ein weiterer Schalter S3 nach unten zur Masse; von B ein weiterer Schalter S4 nach unten zur Masse.

Die H-Brücke: vier Schalter (S1S4) verbinden den Motor M zwischen Vmotor und Masse.

Das Schließen unterschiedlicher Schalterpaare bestimmt, was der Motor an seinen Anschlüssen sieht:

  • S1 + S4 geschlossen, S2 + S3 offen. Der Strom fließt von Vmotor durch S1, in A, über den Motor nach B und durch S4 zur Masse. Der Motor dreht in eine Richtung.

  • S2 + S3 geschlossen, S1 + S4 offen. Der Strom fließt in die andere Richtung durch den Motor. Der Motor dreht in die andere Richtung.

  • Alle vier offen. Beide Motoranschlüsse sind potenzialfrei; der Motor läuft frei aus.

  • S3 + S4 geschlossen (oder S1 + S2 geschlossen). Beide Motoranschlüsse liegen an derselben Spannungsschiene; die kinetische Energie des Motors treibt einen Strom, den das geschlossene Paar als Wärme kurzschließt. Der Motor bremst.

Die unzulässige Kombination ist das Schließen beider Schalter in derselben Spalte – S1 + S3 oder S2 + S4 –, was einen Kurzschluss von Vmotor direkt zur Masse bildet. Dies ist ein Querstrom (shoot-through), und der Code der Kamera darf ihn nicht zulassen.

In der Praxis sind die vier Schalter MOSFETs (eingeführt auf der Seite Pegelumsetzung) innerhalb eines integrierten Treiber-ICs. Der Chip stellt zwei oder drei Eingangs-Pins auf Logikpegel bereit, die intern auf die vier Schalter abgebildet werden, und enthält eine Verriegelungslogik, die einen Querstrom verhindert, sodass der Code der Kamera ihn nicht direkt verwalten muss.

3.15.2. PWM und die Induktivität des Motors

Das Einstellen der Drehzahl des Motors erfordert mehr als nur volles Ein und volles Aus. Der Trick ist derselbe wie bei LEDs in LED-Dimmen mit PWM: man pulst die Ansteuerung mit hoher Frequenz und lässt die Last das Ergebnis mitteln. Bei einer LED war das Auge der Mittelwertbildner; bei einem Motor ist es die Spule selbst.

Eine Motorspule besitzt eine erhebliche Induktivität. Der Strom durch eine Induktivität kann sich nicht augenblicklich ändern; er ändert sich mit einer Rate, die proportional zur Spannung über ihr ist. Das Pulsen der Brücke mit 20 kHz lässt den Spulenstrom während jeder Ein-Phase ansteigen, und während der Aus-Phase muss der Strom weiterfließen – die Spule kehrt die Spannung über sich selbst um, um ihn aufrechtzuerhalten.

Hätte dieser Strom keinen Weg, würde er die Spannung über dem soeben geöffneten Schalter nach oben treiben und könnte den Transistor beschädigen. Freilaufdioden über jedem Schalter – oft einfach die eigenen Body-Dioden der MOSFETs im Treiberchip – geben dem Strom den benötigten Pfad. Er fließt durch eine Diode und wieder zurück durch einen der noch geschlossenen Schalter und schließt damit eine Freilaufschleife, in der der Strom über die kleinen Widerstände der Brücke und des Motors selbst allmählich abklingt. Die Diode begrenzt zudem die Spannung über dem geöffneten Schalter auf einen Diodenspannungsabfall gegenüber der jeweiligen Schiene, zu der die Schleife zurückkehrt, deutlich innerhalb des sicheren Arbeitsbereichs des MOSFET.

Der Mittelwert des Stroms über jede PWM-Periode ist es, der das Drehmoment erzeugt, und dieser Mittelwert folgt dem Tastverhältnis linear – eine Verdopplung des Tastverhältnisses verdoppelt etwa das Drehmoment und verdoppelt bei konstanter Last etwa die Drehzahl. Anders als beim LED-Dimmen, wo die nichtlineare Reaktion des Auges eine Kurve erfordert, entspricht ein linearer Durchlauf von duty_u16 bereits einem linearen Durchlauf des Motoraufwands.

Die PWM-Frequenz muss nur zwei Schwellenwerte überwinden:

  • Oberhalb von ~20 kHz liegt der Träger außerhalb des für Menschen hörbaren Bands. Darunter steigt und fällt die magnetische Kraft auf die Spule mit jedem PWM-Puls, und die Wicklungen und Bleche vibrieren physisch mit der Trägerfrequenz – der Motor wird quasi zu einem kleinen Lautsprecher, der einen Ton in der Tonhöhe der PWM aussendet.

  • Weit oberhalb von ~50 kHz beginnen die MOSFETs und ihre Gate-Treiber durch Schaltverluste an Effizienz zu verlieren. Während jedes Ein-Aus-Übergangs trägt der MOSFET kurzzeitig sowohl eine erhebliche Spannung als auch einen erheblichen Strom und gibt einen kleinen Leistungsstoß als Wärme ab; auch die Gate-Kapazität der MOSFETs muss in jedem Zyklus geladen und entladen werden, was der Treiberchip leistet. Beide Kosten skalieren mit der PWM-Frequenz, sodass bei hohen Frequenzen die Wärme aus dem Schalten mit der Wärme aus dem Leiten des Motorstroms vergleichbar werden kann.

20 kHz ist die bequeme Standardeinstellung für Motoren in Hobby-Größe.

3.15.3. Ansteuern einer H-Brücke

Ein H-Brücken-Treiberchip mit zwei Eingängen bildet IN1 und IN2 etwa wie folgt auf die vier Schalter ab:

  • IN1 = 0, IN2 = 0 – Freilauf (alle vier Schalter offen).

  • IN1 = 1, IN2 = 0 – Antrieb in eine Richtung.

  • IN1 = 0, IN2 = 1 – Antrieb in die andere Richtung.

  • IN1 = 1, IN2 = 1 – Bremsen.

Steuert man die beiden Eingänge als PWM-Ausgänge an, kann die Kamera die Richtung festlegen, indem sie wählt, welcher der beiden Pins das Tastverhältnis trägt, und die Drehzahl über den Tastverhältnis-Wert selbst:

import time
from machine import PWM, Pin

in1 = PWM(Pin("P7"), freq=20_000, duty_u16=0)
in2 = PWM(Pin("P8"), freq=20_000, duty_u16=0)

def drive_a(speed):       # speed: 0..65535
    in1.duty_u16(speed)
    in2.duty_u16(0)

def drive_b(speed):
    in1.duty_u16(0)
    in2.duty_u16(speed)

def coast():
    in1.duty_u16(0)
    in2.duty_u16(0)

def brake():
    in1.duty_u16(65535)
    in2.duty_u16(65535)

drive_a(32768)    # half speed in direction A
time.sleep(2)
drive_b(16384)    # quarter speed in direction B
time.sleep(2)
coast()

Eine Rampe von Aus bis Voll und zurück sorgt für einen sanften Start und Stopp:

for d in range(0, 65535, 256):
    in1.duty_u16(d)
    time.sleep_ms(10)
for d in range(65535, 0, -256):
    in1.duty_u16(d)
    time.sleep_ms(10)

3.15.4. Richtungs- und Drehzahltreiber

Eine zweite Familie von H-Brücken-Chips bietet eine bequemere Schnittstelle: einen digitalen Richtungs-Eingang (oft mit DIR oder PH für „Phase“ beschriftet) plus einen Drehzahl-Eingang (oft PWM oder EN für „Enable“). Der Richtungs-Pin wählt, in welche Richtung die Brücke antreibt; das Tastverhältnis am Drehzahl-Pin setzt den mittleren Strom.

Dies lässt sich von der Software aus leichter ansteuern als das Schema mit zwei PWM-Eingängen. Die beiden Signale entsprechen der Art, wie das Problem üblicherweise formuliert wird – „dreh in diese Richtung, mit dieser Drehzahl“ –, sodass der Code set_direction(forward); set_speed(50) sagen kann, anstatt zwischen in1 und in2 zu verzweigen. Es wird nur ein PWM-Kanal benötigt, wodurch der andere Kanal desselben Timers für eine andere Aufgabe frei wird. Und der Richtungs-Pin kann zwischen Änderungen unverändert bleiben, ohne die Brücke neu auszulösen, sodass das Ändern der Drehzahl bei fester Richtung nur ein einziges Register berührt.

import time
from machine import PWM, Pin

dir_pin = Pin("P8", Pin.OUT)
speed = PWM(Pin("P7"), freq=20_000, duty_u16=0)

def drive(direction, speed_u16):
    dir_pin.value(direction)         # 0 or 1
    speed.duty_u16(speed_u16)        # 0..65535

drive(0, 32768)     # direction A at half speed
time.sleep(2)
drive(1, 16384)     # direction B at quarter speed
time.sleep(2)
speed.duty_u16(0)   # stop

Was „Stopp“ bei dieser Art von Treiber tatsächlich bewirkt – Auslaufen oder Bremsen –, hängt vom Chip ab. Bei einem Treiber mit zwei Eingängen entscheidet der Code der Kamera (beide Eingänge low für Auslaufen, beide high für Bremsen); bei einem Richtungs- und Drehzahltreiber entscheidet der Chip, daher lohnt sich ein Blick ins Datenblatt, bevor man sich auf das eine oder andere Verhalten verlässt.