Tutorial · Einsteiger · 18 Min. Lesezeit

Gleichstrommotoren steuern mit PWM und H-Brücke

Lerne, einen bürstenbehafteten Gleichstrommotor mit PWM und H-Brücke zu steuern – mit Richtung, Bremsen, Stromgrenzen, Verdrahtung und sicherer Treiberauswahl.

Ein Mikrocontroller-Pin kann beschreiben, wie sich ein Motor bewegen soll, aber den Motorstrom nicht sicher liefern. Ein bürstenbehafteter Gleichstrommotor (DC) kann beim Anlauf oder im Stillstand ein Mehrfaches seines Normalstroms ziehen. Ein H-Brücken-Motortreiber sitzt zwischen Controller und Motor, schaltet diesen Strom aus separater Versorgung und lässt den Controller Drehzahl und Richtung wählen.

Diese Anleitung baut die Motorstufe für Linienfolger, Labyrinthroboter und kleine Hindernisvermeidungs-Plattformen. Die exakten Pinnamen variieren je Treiber, aber die elektrischen Entscheidungen bleiben gleich.

Verstehen, was die H-Brücke ändert

Ein Gleichstrommotor kehrt um, wenn sich der Strom durch ihn umkehrt. Eine H-Brücke nutzt vier elektronische Schalter um den Motor. Ein Diagonalpaar treibt Strom vorwärts; das andere rückwärts. Treiberplatinen legen dieses Schalten über Logikpins wie IN1 und IN2 offen:

IN1 IN2 Motorzustand
Low Low Ausrollen oder Bremsen, je nach Treiber
High Low Vorwärts
Low High Rückwärts
High High Bremsen oder Ausrollen, je nach Treiber

Nimm nie an, was beide-Low und beide-High bedeuten. Lies die Wahrheitstabelle des jeweiligen Treibers. Manche Chips haben zusätzlich einen ENABLE-, STANDBY- oder SLEEP-Pin, der aktiv sein muss, bevor die Ausgänge arbeiten.

Pulsweitenmodulation (PWM) steuert die mittlere Spannung, indem sie den Antrieb schnell ein- und ausschaltet. 25 % Tastverhältnis ist ein Viertel jeder Periode an; es garantiert kein Viertel der Wellendrehzahl, weil das Ergebnis auch von Last, Versorgungsspannung, Reibung und Gegen-EMK des Motors abhängt.

Drei Rechteckkurven übereinander gestapelt, alle schaltend zwischen null und zwölf Volt bei gleicher Frequenz, aber mit verschiedenen Einschaltzeiten. Die obere Welle ist fünfundsiebzig Prozent jeder Periode an mit gestrichelter Linie für neun Volt Mittelwert, die mittlere ist vierzig Prozent an mit im Mittel vier Komma acht Volt, und die untere ist fünfzehn Prozent an mit im Mittel eins Komma acht Volt.
Die Versorgungsspannung ändert sich nie. Nur der Bruchteil der Zeit, in der sie verbunden ist, und die Motorinduktivität macht aus diesem Bruchteil einen Mittelwert. SVG herunterladen

Den Treiber nach Strom wählen, nicht nach Motorgröße

Finde Nennspannung, Leerlaufstrom und Stillstandsstrom des Motors. Der Stillstandsstrom ist die wichtige Treiberdimensionierung, weil der Motor ihn verlangt, wenn die Welle sich nicht drehen kann. Fehlt das Datenblatt, miss den Wicklungswiderstand bei abgeklemmtem Motor und schätze Stillstandsstrom = Versorgungsspannung / Wicklungswiderstand. Messleitungswiderstand macht das nur zu einer Schätzung.

Wähle einen Treiber, dessen Motorspannungsbereich die Versorgung enthält und dessen Spitzenstrom den Anlauf überlebt. Prüfe dann Dauerstrom und thermische Bedingungen. Eine Platine mit großer Spitzenzahl beworben schafft sie vielleicht nur kurz oder mit gehöriger Kühlung.

Berücksichtige auch den Spannungsabfall. Ältere Bipolartransistor-Treiber können erhebliche Spannung in der Brücke verlieren; moderne MOSFET-Treiber verschwenden meist weniger Leistung. Für einen Akkuroboter beeinflusst dieser Unterschied Drehmoment und Laufzeit.

Einen Motor sicher verdrahten

Nutze diese Reihenfolge vor dem Einschalten:

  1. Verbinde die Motorversorgung mit dem Motorleistungseingang und Masse des Treibers.
  2. Verbinde den Motor mit den zwei Treiberausgängen, nicht mit einem Mikrocontroller-Pin.
  3. Verbinde Controllermasse mit Treibermasse, damit die Logiksignale eine Referenz teilen.
  4. Verbinde IN1, IN2 und jeden Enable-Pin mit passenden Digitalpins.
  5. Halte Motorverdrahtung kurz und führe sie weg von analogen Sensorleitungen.
  6. Bestätige die Logikspannungs-Anforderungen des Treibers, bevor du einen 3,3-V-ESP32 oder Raspberry Pi anschließt.

Nutze eine Sicherung oder strombegrenzte Laborversorgung bei erster Inbetriebnahme. Füge lokale Versorgungsabblockung hinzu, wie das Treiberdatenblatt empfiehlt. Versorge niemals einen belasteten Motor über den 5-V-Regler oder USB-Anschluss des Arduino – das ist der Brown-out, der wie ein Softwareabsturz aussieht.

Eine kleine Motorfunktion schreiben

Die sauberste Schnittstelle akzeptiert ein vorzeichenbehaftetes Kommando: positiv ist vorwärts, negativ rückwärts, null gestoppt. Auf einem Arduino-artigen Board sieht eine minimale Umsetzung so aus:

const int IN1 = 7;
const int IN2 = 8;
const int PWM_PIN = 5;

void setMotor(int command) {
  command = constrain(command, -255, 255);
  digitalWrite(IN1, command >= 0 ? HIGH : LOW);
  digitalWrite(IN2, command >= 0 ? LOW : HIGH);
  analogWrite(PWM_PIN, abs(command));
}

Dieses Beispiel nimmt einen Treiber mit separatem PWM-/Enable-Eingang an. Ein Zweieingangstreiber erwartet vielleicht PWM an einem Eingang, während der andere den Richtungszustand hält. Folge seiner Wahrheitstabelle statt Pinlogik blind zu kopieren.

Beim Umkehren kommandiere kurz null, bevor du die Richtung wechselst. Eine sofortige Vollgas-Umkehr erzeugt eine große Stromtransiente und mechanischen Schlag. Eine einfache Rampe verbessert auch die Traktion:

for (int command = 0; command <= 180; command += 5) {
  setMotor(command);
  delay(15);
}

Mache diese Rampe in einer echten Regelschleife zeitbasiert statt mit blockierenden delay()-Aufrufen.

Richtung, Drehzahl, Ausrollen und Bremsen testen

Hebe die Räder für den ersten Test vom Tisch. Beginne mit kleinem Tastverhältnis, bestätige die kommandierte Richtung, erhöhe dann schrittweise. Notiere das kleinste Kommando, das den Motor zuverlässig anlaufen lässt. Haftreibung erzeugt ein Totband, Kommandos unter dieser Schwelle brummen also vielleicht ohne zu laufen.

Vergleiche als Nächstes Stoppmodi. Ausrollen trennt oder öffnet die Brücke und lässt Schwung den Motor verlangsamen. Dynamisches Bremsen schließt die Motorklemmen über die Brücke kurz, sodass der drehende Motor Energie abbaut und schneller stoppt. Bremsen erzeugt mehr elektrische und mechanische Belastung, nutze es also bewusst.

Setze schließlich den Roboter auf den Boden und wiederhole. Ein unbelastet drehender Motor kann unter echter Last den Controller in Brown-out treiben. Beobachte die Versorgungsspannung beim Anlauf und verifiziere, dass der Treiber nicht überhitzt.

Die gängigen Ausfälle diagnostizieren

  • Der Controller startet neu, wenn der Motor anläuft: Die Versorgung bricht ein oder Motorstörungen erreichen die Logikschiene. Nutze ausreichenden Batteriestrom, lokale Abblockung, saubere Masse und wo passend separate Regelung für Logik.
  • Der Motor läuft nur eine Richtung: Prüfe beide Logikeingänge am Treiber und bestätige, dass Standby oder Enable aktiv ist.
  • Drehzahl ändert sich kaum mit PWM: Prüfe, ob der gewählte Pin wirklich PWM kann und ob der Treiber PWM an diesem Eingang akzeptiert.
  • Der Treiber wird heiß: Vergleiche Last- und Stillstandsstrom mit dem Dauernenwert, prüfe Spannungsabfall und inspiziere auf mechanisch blockierten Antrieb.
  • Sensoren werden verrauscht: Trenne Motor- und Sensorverdrahtung, füge die vom Motor-/Treiberhersteller empfohlene Entstörung hinzu und filtere Messwerte erst nach Fixieren des elektrischen Pfads.

Sobald ein Motor vorhersagbar läuft, dupliziere den Kanal für einen Differenzialroboter. Der Linienfolger-Simulator zeigt, wie zwei vorzeichenbehaftete Radkommandos zu Lenkung werden, während der PID-Regler-Simulator zeigt, wie Rückkopplung Drehzahl regeln kann statt rohem Tastverhältnis zu vertrauen.

Die Hardware-Kalibrierknöpfe behalten

Zwei nominell identische Motoren liefern selten identische Drehzahl. Behalte einen Skalierfaktor pro Rad und das Mindest-Anlaufkommando in Software. Miss statt die Fehlanpassung mit festem unerklärtem Offset zu verstecken. Später können Quadratur-Encoder die Schleife schließen und Drehzahl bei ändernder Akkuspannung und Last korrigieren.

Den Graphen erkunden

Teil dieser Bauprojekte

Projekte und Lernpfade, die dieses Tutorial enthalten.

Weiterführende Literatur

Quellen