class PWM – pulsbreedtemodulatie¶
De PWM-klasse geeft een pulsbreedte-gemoduleerd signaal uit op een Pin. Het is de moderne, port-overschrijdende API voor PWM; op STM32 OpenMV-cams omhult het de onderliggende pyb.Timer-kanaalmachinerie, zodat elke PWM-instantie één timerkanaal bezet.
Voorbeeldgebruik:
from machine import PWM, Pin
# 50 Hz PWM on a header pin with a 12.5 % duty.
pwm = PWM(Pin("P7"), freq=50, duty_u16=8192)
pwm.duty_u16(32768) # change duty to 50 %
pwm.init(freq=5000, duty_ns=5000) # re-init at 5 kHz, 5 us pulse
pwm.duty_ns(3000) # 3 us pulse
pwm.deinit()
Constructors¶
- class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)¶
Construeer een
PWM-object datdestaanstuurt (eenPinop OpenMV-cams). De keyword-argumenten zijn equivalent aan het aanroepen vaninit()direct na de constructie:freq– PWM-frequentie in Hz.duty_u16– duty cycle als de verhoudingduty_u16 / 65535.duty_ns– pulsbreedte in nanoseconden.invert– indienTrue, keer de uitvoerpolariteit om.
Er mag hooguit één van
duty_u16/duty_nstegelijk worden doorgegeven. Het instellen vanfreqkan anderePWM-instanties beïnvloeden die dezelfde onderliggende timer delen (geldt op STM32 – elk kanaal van een gegeven TIM draait op dezelfde frequentie).Methoden¶
- init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None¶
Herconfigureer de PWM-uitvoer. Alleen de meegeleverde argumenten worden bijgewerkt; de andere behouden hun vorige waarden. Zie de constructor voor de betekenis van elk argument.
- freq() int¶
- freq(value: int, /) None
Lees of stel de PWM-frequentie in.
Zonder argument wordt de huidige frequentie in Hz teruggegeven.
Met een enkel
value-argument wordt de frequentie op die waarde in Hz ingesteld. Kan eenValueErroropwerpen als de frequentie buiten het bereik valt dat de onderliggende timer kan bereiken.
- duty_u16() int¶
- duty_u16(value: int, /) None
Lees of stel de duty cycle in als een unsigned 16-bits waarde in het bereik
0–65535.Zonder argument wordt de huidige duty teruggegeven.
Met een enkel
value-argument wordt de duty cycle opvalue / 65535van de periode ingesteld.0is altijd laag,65535is altijd hoog.
- duty_ns() int¶
- duty_ns(value: int, /) None
Lees of stel de pulsbreedte rechtstreeks in nanoseconden in.
Zonder argument wordt de huidige pulsbreedte teruggegeven.
Met een enkel
value-argument wordt de hoog-tijd van elke cyclus ingesteld opvaluenanoseconden. Nuttig voor servo-achtige uitvoer waarbij de pulsbreedte de betekenisvolle grootheid is in plaats van de duty-verhouding.
Beperkingen¶
PWM-frequentie en duty-resolutie zijn op elke hardwaretimer onderling afhankelijk: bij hoge frequenties passen er minder tellerstappen in een periode en zijn er dus minder lage bits van
duty_u16betekenisvol.De haalbare PWM-frequentie hangt af van de klokbron en prescaler van de timer. STM32 TIM2 / TIM5 zijn op de meeste onderdelen 32-bits (en TIM3 / TIM4 eveneens op de STM32N6), wat bredere frequentie- en duty-bereiken geeft; de overige timers zijn 16-bits. Zie de relevante MCU-referentiehandleiding voor de exacte bereiken.
Op STM32 delen meerdere
PWM-kanalen op dezelfde TIM een frequentie. Het instellen vanfreq()op één instantie verandert de uitvoer van elk ander kanaal dat aan die TIM is gekoppeld.