一、PWM介绍
1.什么是PWM
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
2.PWM频率
PWM的频率是指单位时间内PWM方波重复的次数,也就是说一秒钟PWM有多少个周期。
3.PWM周期
周期T=1/f,假设频率f=50Hz,那么推算周期为0.02s即20ms。
4.PWM占空比
PWM的占空比是指一个周期内高电平持续时间与周期的比值,他的单位可以是0%-100%,如果高电平时间占一个周期的时间为一半,那么他的占空比就为50%。
在平时使用PWM时,需要重点关注占空比的大小,他可以实现冲量相等,即占空比≈电压,如果系统电压为5V,占空比为50%,那么可以看成输出电压为2.5V。
二、Python控制PWM
在MicroPython官方文档中:Quick reference for the ESP32 — MicroPython latest documentation,给的示例如下:
from machine import Pin, PWM
pwm0 = PWM(Pin(0)) # create PWM object from a pin
freq = pwm0.freq() # get current frequency (default 5kHz)
pwm0.freq(1000) # set PWM frequency from 1Hz to 40MHz
duty = pwm0.duty() # get current duty cycle, range 0-1023 (default 512, 50%)
pwm0.duty(256) # set duty cycle from 0 to 1023 as a ratio duty/1023, (now 25%)
在配置占空比时,需要注意几个点:
- 配置的IO口(上述代码中的IO口为pin0)
- 占空比的数值(取值范围为0-1023)
三、呼吸灯
完整代码如下:
from machine import Pin, PWM
import time
led2 = PWM(Pin(2))
led2.freq(1000)
while True:
for i in range(0, 1024):
led2.duty(i)
time.sleep_ms(1)
for i in range(1023, -1, -1):
led2.duty(i)
time.sleep_ms(1)