<style>[reveal]{opacity:1 !important;transform:none !important}</style>

Motordrehzahl per PWM

Drehzahl eines 12-V-Gleichstrommotors mit Arduino, Gate-Treiber und MOSFET stellen: Freilaufdiode, PWM-Frequenz, Stromwelligkeit und Verluste mit echten Werten.

8 Min. LesezeitMotordrehzahl PWMMotor PWM ArduinoGleichstrommotor Drehzahl regelnMOSFET Motorsteuerung

Ein Lüfter soll leiser drehen, eine Pumpe weniger fördern, ein Getriebemotor langsamer fahren. Die naheliegende Idee, einen Widerstand vorzuschalten, verheizt Energie und nimmt dem Motor unter Last das Drehmoment. Besser ist Pulsweitenmodulation (PWM): Ein Transistor schaltet die volle Spannung schnell ein und aus. Der Motor reagiert wegen seiner Trägheit nur auf den Mittelwert, und der Schalter selbst bleibt kühl, weil er entweder ganz offen oder ganz zu ist.

Die Schaltung hier stellt die Drehzahl eines 12-V-Motors mit einem Potentiometer ein. Ein Arduino erzeugt die PWM mit 20 kHz, ein Gate-Treiber schaltet den MOSFET hart durch, eine Schottky-Diode fängt den Strom der Wicklung in den Pausen ab. Soll der Motor auch rückwärts laufen, brauchst du statt des einzelnen Transistors eine H-Brücke.

Schaltplan

PWM-Motorsteuerung: Potentiometer R1 10 kΩ zwischen +5 V und Masse, Schleifer an A0 des Arduino Uno; D9 an den Eingang (Pin 2) des Gate-Treibers TC4420, dessen Ausgang (Pins 6, 7) über R2 10 Ω an das Gate des IRLZ44N; R3 10 kΩ vom Gate nach Masse; Motor 12 V zwischen +12 V und Drain, parallel dazu Schottky-Diode SB540 mit Kathode an +12 V und C3 100 nF; C1 470 μF und C2 1 μF an +12 V
Der Arduino gibt das Tastverhältnis vor, der TC4420 schaltet das Gate schnell um, die Diode übernimmt den Motorstrom in den Pausen.
  • R1, Potentiometer 10 kΩ: Sollwert. Der Arduino liest es an A0.
  • IC1, TC4420: Gate-Treiber. Er setzt das 5-V-Signal auf 12 V um und lädt das Gate mit bis zu 6 A Spitzenstrom um. Die Ausgangspins 6 und 7, die Versorgungspins 1 und 8 und die Massepins 4 und 5 sind jeweils verbunden.
  • R2, 10 Ω: dämpft Schwingungen in der Gate-Leitung.
  • R3, 10 kΩ: hält den MOSFET aus, solange der Treiber nicht versorgt ist.
  • T1, IRLZ44N: MOSFET als Low-Side-Schalter, siehe auch MOSFET als Low-Side-Schalter.
  • D1, SB540: Schottky-Diode als Freilaufdiode, Kathode an +12 V.
  • C3, 100 nF: direkt an den Motorklemmen gegen Bürstenstörungen.
  • C1, 470 μF / 25 V, und C2, 1 μF: Pufferung der 12-V-Versorgung, C2 direkt am Treiber.

So funktioniert die Schaltung

Ein-Phase: T1 leitet, am Motor liegen fast 12 V. Der Strom steigt, gebremst durch die Induktivität der Wicklung.

Aus-Phase: T1 sperrt. Die Wicklung will den Strom weitertreiben (Induktion). Die Spannung am Drain steigt, bis D1 leitet; der Strom kreist dann durch Motor und Diode und nimmt langsam ab. Ohne D1 würde die Drainspannung in Nanosekunden auf viele zehn Volt steigen und den MOSFET durchschlagen. Warum, erklärt Freilaufdiode.

Mittelwert: Bei einem Tastverhältnis D sieht der Motor im Mittel

UM = D · UB

Bei D = 0,5 sind das 6 V. Der Motor dreht etwa so schnell wie an 6 V Gleichspannung, hat aber beim Anlaufen in jedem Puls die volle Spannung zur Verfügung und läuft deshalb auch langsam noch zuverlässig an.

Warum 20 kHz? Die Wicklung glättet den Strom nur, wenn eine PWM-Periode kurz gegen ihre Zeitkonstante L / R ist. Bei einem kleinen Motor mit 1 mH und 2 Ω sind das 0,5 ms. Die Standard-PWM des Arduino Uno hat an Pin 9 aber eine Periode von 2 ms:

Motorstrom bei 50 % Tastverhältnis: Mit 490 Hz steigt er in jedem Puls auf 3,5 A und fällt in der Pause auf null; mit 20 kHz schwankt er nur zwischen 0,82 und 0,98 A
Gleicher Motor, gleiches Tastverhältnis: Bei 490 Hz läuft er mit Stromstößen, bei 20 kHz mit fast glattem Strom.

Bei 490 Hz pulsiert der Strom zwischen null und 3,5 A. Der Motor brummt hörbar, und sein Effektivstrom ist 30 % höher als der Mittelwert. Weil die Wärme in der Wicklung mit dem Quadrat des Effektivwerts wächst, setzt sie rund 70 % mehr Verlustleistung um als bei glattem Strom mit gleichem Mittelwert. Bei 20 kHz ist der Strom praktisch glatt und die Frequenz unhörbar. Wie die Spule den Strom glättet, beschreibt Spule an Gleichspannung.

Dimensionierung

Motor: 12 V, 1 A im Betrieb, Wicklung 2 Ω und 1 mH (miss deinen Motor: R mit dem Multimeter, L mit einem LCR-Messgerät).

1. Stromwelligkeit. Bei durchgehendem Strom ist die Schwankung bei D = 0,5 am größten:

ΔI = UB · D · (1 − D)L · f = 12 V · 0,251 mH · 20 kHz = 0,15 A

Das sind ±7,5 % um 1 A, die Simulation oben zeigt 0,16 A.

2. MOSFET. Der IRLZ44N bekommt vom TC4420 12 V Gate-Spannung (erlaubt sind 16 V) und hat dann höchstens 22 mΩ. Die Leitverluste bei voller Drehzahl:

PL = I2 · RDS(on) = (1 A)2 · 0,022 Ω = 22 mW

Der Treiber lädt die 48 nC Gate-Ladung mit etwa 1 A in rund 50 ns um. Die Schaltverluste:

PS ≈ 0,5 · UB · I · (tr + tf) · f = 0,5 · 12 V · 1 A · 0,1 μs · 20 kHz = 12 mW

Zusammen 34 mW, kein Kühlkörper nötig. Direkt am Arduino-Pin würde das Umladen mit höchstens 20 mA rund 3 μs pro Flanke dauern und die Schaltverluste auf 0,7 W treiben – darum der Treiber.

Rechner

MOSFET-Verluste

Leitungsverluste
1,61 W
Schaltverluste
594 mW
Verluste durch Coss
5,76 mW
Summe im MOSFET
2,21 W
Gate-Ansteuerung (Treiber)
12 mW
TJ ohne Kühlkörper
308 °C – zu heiß
TJ mit Kühlkörper
66 °C
RDS(on) warm
32,2 mΩ bei 66 °C
Verluste im MOSFET: 2,21 WLeitung1,61 W · 73 %Schalten594 mW · 27 %Ausgangskapazität5,76 mW · < 1 %Kupfer: Verlustleistung p = u · i, Zeit nicht maßstäblichDazu im Treiber: Gate-Ladeleistung Qg · UGS · f = 12 mWU, I0uDS = 24 ViD = 10 Aeinschalten84 nsausschalten15 ns

PLeit = I² · RDS(on)(TJ) · D; PSchalt = ½ · U · I · (tein + taus) · f; PCoss = ½ · Coss · U² · f; PGate = Qg · UGS · f. Hartes Schalten einer induktiven Last mit Freilaufdiode, Rückstromspitze der Diode nicht enthalten. RDS(on) steigt linear mit TJ; TJ = TA + P · Rth. Die Datenblatt-Schaltzeiten gelten nur für ihre Messbedingungen (dort 28 V, 25 A, RG = 3,4 Ω) – rechne lieber über die Gate-Ladung, wenn du deinen Treiber kennst. Den Kühlkörper bestimmst du genauer mit dem Kühlkörper-Rechner.

3. Freilaufdiode. Sie führt den Motorstrom während der Aus-Phase, im Mittel I · (1 − D) = 0,5 A. Mit 0,45 V Flussspannung sind das 0,23 W. Beim Anlauf und beim Blockieren fließen bis zu 12 V / 2 Ω = 6 A; die SB540 verträgt 5 A Dauerstrom und 150 A Stoßstrom, die Sperrspannung von 40 V liegt dreifach über 12 V. Eine Schottky-Diode ist wichtig, weil sie bei 20 kHz ohne Sperrverzögerung abschaltet. Eine 1N4007 würde bei jedem Einschalten von T1 einen Kurzschlussstromstoß verursachen.

4. Pufferelko. Aus der Versorgung fließen Pulse mit 1 A Spitze. Der Kondensator muss den Wechselanteil liefern, beim D = 0,5 mit dem Effektivwert I · √(D · (1 − D)) = 0,5 A. Ein Low-ESR-Elko 470 μF / 25 V verträgt das; ein normaler Elko würde warm.

Arduino-Programm

analogWrite an Pin 9 erzeugt 490 Hz. Für 20 kHz stellst du Timer 1 direkt ein:

const int POTI = A0;

void setup() {
  pinMode(9, OUTPUT);                       // OC1A → TC4420
  TCCR1A = _BV(COM1A1) | _BV(WGM11);        // Fast-PWM, TOP = ICR1, nicht invertierend
  TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10);  // kein Vorteiler
  ICR1 = 799;                               // 16 MHz / 800 = 20 kHz
  OCR1A = 0;
}

void loop() {
  int wert = analogRead(POTI);              // 0 … 1023
  int tast = map(wert, 0, 1023, 0, 799);
  if (tast < 120) tast = 0;                 // unter 15 % läuft der Motor nicht an
  OCR1A = tast;
  delay(10);
}

Die Auflösung beträgt 800 Stufen. Pin 10 hängt am selben Timer und lässt sich mit OCR1B als zweiter Kanal nutzen. Timer 1 steht dann nicht mehr für die Servo-Bibliothek zur Verfügung.

Bauteilliste

BezeichnerWert/TypHinweis
T1IRLZ44NTO-220; jeder N-Kanal mit ≥ 30 V und niedrigem RDS(on)
IC1TC4420Gate-Treiber, nicht invertierend, DIP-8
D1SB540Schottky 5 A / 40 V, Kathode an +12 V
R110 kΩ linearPotentiometer
R210 ΩGate-Widerstand
R310 kΩGate-Pull-down
C1470 μF / 25 V, Low-ESRPufferung
C21 μF, keramischdirekt an Pin 1/8 des TC4420
C3100 nF, keramischan den Motorklemmen

Varianten

Ohne Treiber bei kleiner Frequenz. Für einen kleinen Lüfter bis etwa 300 mA genügt ein Logic-Level-MOSFET direkt am Pin (220 Ω Gate-Widerstand, 10 kΩ Pull-down) mit der Standard-PWM von 490 Hz. Das Brummen nimmst du dann in Kauf.

PC-Lüfter mit vier Adern. 4-Pin-Lüfter haben einen eigenen PWM-Eingang für 25 kHz. Dort schaltest du nicht den Motorstrom, sondern gibst nur das Signal über einen Open-Collector-Transistor vor; der Lüfter regelt selbst.

Drehrichtung. Mit einer H-Brücke oder einem Treiber wie dem DRV8833 bekommst du zusätzlich Rückwärtslauf und aktives Bremsen.

Ohne Mikrocontroller. Ein NE555 als PWM-Generator erzeugt das Tastverhältnis per Potentiometer und treibt den MOSFET ebenfalls an.

Drehzahlregelung. PWM stellt die Spannung ein, nicht die Drehzahl. Unter Last wird der Motor langsamer. Für konstante Drehzahl misst du sie mit einem Hall- oder Lichtschranken-Geber und regelst das Tastverhältnis im Programm nach.

Typische Fehler

  • MOSFET stirbt sofort: Freilaufdiode fehlt oder ist verkehrt herum. Verkehrt herum schließt sie bei leitendem T1 die Versorgung kurz.
  • MOSFET wird warm, obwohl der Strom klein ist: Das Gate wird zu langsam umgeladen. Am Oszilloskop siehst du am Drain flache, verschliffene Flanken statt steiler Sprünge.
  • Motor pfeift: PWM-Frequenz im Hörbereich. Auf 20 kHz oder mehr gehen.
  • Arduino stürzt ab, wenn der Motor anläuft: Spannungseinbruch oder Störungen über die Masse. Arduino aus eigener Versorgung speisen oder gut puffern, Motormasse und Logikmasse an einem Punkt verbinden, C3 nicht vergessen (EMV).
  • Motor läuft bei kleinen Werten nicht an: Unter etwa 15 % reicht das Drehmoment nicht gegen die Haftreibung. Mindestwert setzen oder kurz mit 100 % anstoßen.

Selbsttest

Welche mittlere Spannung sieht der Motor bei 12 V und 40 % Tastverhältnis?

0,4 · 12 V = 4,8 V.

Warum ist die Freilaufdiode beim PWM-Betrieb unverzichtbar?

In jeder Aus-Phase will die Wicklung den Strom weitertreiben. Ohne Freilaufweg steigt die Drainspannung so hoch, dass der MOSFET durchbricht.

Wie groß ist die Stromwelligkeit bei 5 kHz statt 20 kHz (D = 0,5)?

Viermal so groß: 12 V · 0,25 / (1 mH · 5 kHz) = 0,6 A.

Warum braucht die Schaltung bei 20 kHz einen Gate-Treiber?

Der Arduino-Pin liefert nur rund 20 mA. Damit dauert das Umladen des Gates mehrere Mikrosekunden pro Flanke, und die Schaltverluste steigen bei 20 kHz auf fast 1 W.

Warum eine Schottky-Diode statt einer 1N4007?

Die 1N4007 braucht Mikrosekunden, um nach dem Leiten wieder zu sperren. In dieser Zeit fließt bei jedem Einschalten von T1 ein Kurzschlussstrom durch Diode und Transistor.