machine.PWM

PWM: Pulse width modulation module, PWM supported by hardware, you can specify any pin (0 to 47 pins)

Each PWM depends on a timer, that is, when the timer is bound with the PWM function, it cannot be used as a normal timer. Because there are 3 timers, each timer has 4 channels, that is, a maximum of 12 PWM waveforms can be generated simultaneously

Constructor

pwm = machine.PWM(tim, freq, duty, pin, enable=True)

Create a new PWM object with specified parameters

Parameters

  • tim: Each PWM relies on a timer to generate waveforms, so a timer object needs to be passed here. The timer ID and channel number must be specified when the timer object is initialized
  • freq: PWM waveform frequency
  • duty: PWM duty cycle, refers to the percentage of the high level in the entire cycle, value: [0,100]
  • [pin]: PWM output pin. It is not necessary to set, but use fm to manage pin mapping in a unified manner.
  • enable: Whether to start generating the waveform immediately, the default bit is True, and the PWM waveform will be generated on the specified pin immediately after the object is generated

Method

init

Similar constructor

pwm.init(tim, freq, duty, pin, enable=True)

Parameters

Same as constructor

return value

no

freq

Get or set PWM frequency

pwm.freq(freq)

Parameters

  • freq: PWM frequency, optional parameter, if no parameter is passed, the step setting will only return the current frequency value

return value

Actual PWM frequency currently set

duty

Get or set the PWM duty cycle

pwm.duty(duty)

Parameters

  • duty: PWM duty cycle is optional, if no parameter is passed, the step setting will only return the current duty cycle value

return value

The currently set PWM duty cycle value

enable

Enable PWM output to generate waveform on the specified pin immediately

pwm.enable()

Parameters

no

return value

no

disable

Disabled PWM output, the specified pin no longer generates waveform

pwm.disable()

Parameters

no

return value

no

deinit/__del__

Log off the PWM hardware, release the occupied resources, and turn off the PWM clock

pwm.deinit()

Parameters

no

return value

no

Examples

pwm.deinit()

or

del pwm

Constant

no

Routine

Routine 1 (breathing light)

board_info is related to the board, and different board configurations are different. Manual configuration is required before use.

from machine import Timer,PWM
import time
from board import board_info

tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
ch = PWM(tim, freq=500000, duty=50, pin=board_info.LED_G)
duty=0
dir = True
while True:
    if dir:
        duty += 10
    else:
        duty -= 10
    if duty>100:
        duty = 100
        dir = False
    elif duty<0:
        duty = 0
        dir = True
    time.sleep(0.05)
    ch.duty(duty)

Routine 2

board_info is related to the board, and different board configurations are different. Manual configuration is required before use.

import time
import machine
from board import board_info

tim = machine.Timer(machine.Timer.TIMER0, machine.Timer.CHANNEL0, mode=machine.Timer.MODE_PWM)
ch0 = machine.PWM(tim, freq=3000000, duty=20, pin=board_info.LED_G, enable=False)
ch0.enable()
time.sleep(3)
ch0.freq(2000000)
print("freq:",ch0.freq())
ch0.duty(60)
time.sleep(3)
ch0.disable()