MicroPython · PWM · DC-motor

Hoe een microcontroller
een motor laat draaien

Een microcontroller kan alleen aan of uit. Met PWM schakel je zo snel dat de motor het gemiddelde voelt. Schuif aan de knoppen en zie wat er gebeurt met spanning, stroom en toerental.

1. Het PWM-signaal

PWM (pulsbreedtemodulatie) is een blokgolf met een vaste frequentie. Je verandert alleen hoe lang hij per periode hoog is. Dat deel van de periode heet de duty cycle.

PWM-signaal Gemiddelde spanning RMS-spanning
Periode T
-
T = 1 / f
Tijd aan
-
t_aan = D · T
Tijd uit
-
t_uit = (1−D) · T
V gemiddeld
-
D · V
V RMS
-
√D · V

2. Gemiddelde of RMS: welke telt?

Dit is waar de meeste verwarring zit. Beide waarden zijn juist, maar ze beantwoorden een andere vraag.

Gemiddelde spanning

De oppervlakte onder de blokgolf, uitgesmeerd over de hele periode.

Vgem = D · Vpiek

Dit bepaalt het toerental van je motor. De wikkeling (spoel) en de massa van de rotor vlakken de pulsen uit. De motor gedraagt zich ongeveer alsof er een gelijkspanning van D·V op staat.

Een gewone multimeter op de DC-stand meet ook het gemiddelde.

RMS-spanning

De gelijkspanning die in een weerstand evenveel warmte zou opwekken.

Vrms = √( (1/T) ∫ v² dt ) = √D · Vpiek

Dit bepaalt vermogen en opwarming in weerstanden, verwarmingselementen en de koperverliezen in je motorwikkeling en driver.

Waarom √D? Tijdens ‘aan’ is v² = V², tijdens ‘uit’ 0. Het gemiddelde van v² is dus D·V², en daar trek je de wortel uit.

Experiment: PWM op een weerstand

Waarom bestaat RMS eigenlijk? Vergelijk het vermogen van PWM met een gelijkspanning die even hoog is als het PWM-gemiddelde.

Volle spanning (D=100%)
-
PWM met duty D
-
DC van D·V (gemiddelde)
-

-

3. Motorsimulatie

Een gesimuleerde kleine DC-motor (R = 2 Ω, L = 1 mH, met tegen-EMK en wrijving) achter een driver met vrijloopdiode. Gebruik de knoppen bovenin, en probeer vooral een lage frequentie (onder 100 Hz) en een lage duty cycle.

Weergave 50× vertraagd

Optimaliseren voor een belasting

Vul het tegenwerkende koppel van je last in (in Nm) en het toerental dat je wilt halen. De rekenmachine bepaalt de duty cycle, de laagste duty waarbij de motor nog aanloopt en een geschikte PWM-frequentie. Daarna kun je het resultaat toepassen op de simulatie.

Nm
rpm

Oscilloscoop: 2 perioden

Klemspanning motor Motorstroom

Toerental: laatste 3 seconden

Toerental Onbelast bij D·V
Toerental
-
rpm
Stroom gem.
-
bepaalt koppel
Stroom RMS
-
bepaalt opwarming
Koperverlies
-
I²rms · R
Stroomrimpel
-
I max − I min

Frequentie vs rimpel. De elektrische tijdconstante is τ = L/R = 0,5 ms. Is de periode T veel korter dan τ, dan vlakt de spoel de stroom af. Vergelijk 50 Hz met 20 kHz.

Dode zone. Onder een bepaalde duty cycle overwint de motor zijn eigen wrijving niet en blijft hij stilstaan. In je code wil je daarom vaak een minimale duty.

Fluiten. Tussen ongeveer 20 Hz en 16 kHz hoor je de PWM-frequentie als een piep in de motor. Daarom kiest men vaak 15 tot 25 kHz, als de driver dat aankan.

4. MicroPython-code

De code hieronder past zich aan op de duty cycle en frequentie die je bovenin hebt ingesteld. Op de micro:bit loopt write_analog van 0 tot 1023, op de Pico en ESP32 loopt duty_u16 van 0 tot 65535. In beide gevallen is 0 altijd uit en het maximum altijd aan.

-
-

    

Nooit een motor direct op een GPIO-pin. Een pin levert enkele milliampere bij 3,3 V. Een motor trekt honderden mA tot ampères en geeft bij uitschakelen een spanningspiek terug. Gebruik altijd een driver (H-brug of MOSFET met vrijloopdiode) en verbind de GND van voeding en microcontroller.

5. Test jezelf

Vier vragen die laten zien of je het verschil echt snapt.