Skip to content

脉宽调制(PWM)

参考: https://doc.itprojects.cn/A0001.micropython.esp32/01.doc.5ec0ceed6860b084b258559aa19c2534/index.html

PWM(Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信、工控等方面

成员函数功能说明

  • pwm.freq(): 获得当前的PWM频率.
  • pwm.freq(0-1023): 设置PWM频率:0-1023
  • pwm.duty():获得当前的PWM占空⽐:0-8192
  • pwm.duty(0-100):设置占空⽐:0-100
  • deinit(): 关闭PWM
  • freq(Pin,freq,duty): 设置PWM频率

呼吸灯

Python 控制 PWM

查看 ESP32 的官方文档对于 PWM 的描述:

https://docs.micropython.org/en/latest/esp32/quickref.html#pwm-pulse-width-modulation

python
from machine import Pin, PWM

pwm0 = PWM(Pin(0))
freq = pwm0.freq()
pwm0.freq(1000)

duty = pwm0.duty()
pwm0.duty(256)

有几个注意点:

  • 需要可以具备输出功能的IO口,上述代码选择的是 GPIO0
  • 占空比的数值在 0~1023 之间

呼吸灯效果

正常亮灯

python
from machine import Pin  # 导入 Pin (开发板中 Pin 代表 GPIO)
from time import sleep_ms  # 导入时间

LED = Pin(15, Pin.OUT)  # 定义一个 LED 灯,D25 脚,输出
while 1:
    print('hello world !')
    LED.on()  # 灯亮
    sleep_ms(500)  # 等待 500 毫秒
    LED.off()  # 灯灭
    sleep_ms(500)

呼吸灯实现

python
from machine import Pin, PWM
from time import sleep_ms

LED = Pin(15, Pin.OUT)

PWM_LED = PWM(LED)

while 1:
    for i in range(1023, -1, -1):
        PWM_LED.duty(i)
        sleep_ms(1)
    for i in range(1024):
        PWM_LED.duty(i)
        sleep_ms(1)