什么是脉冲宽度调制?
脉冲宽度调制(PWM)是一种模拟信号控制技术,通过调整数字信号的占空比(即高电平时间与总周期时间的比例)来模拟不同级别的模拟信号。这在电机控制、LED 调光等方面非常有用。
在 MicroPython ESP32 上,你可以使用 PWM 来控制连接到 GPIO 引脚的设备。下面是一个简单的示例,展示如何在 ESP32 上设置和使用 PWM.
- 导入必要的库:
from machine import Pin, PWM
- 设置 PWM:
引脚 的初始化
pwm = PWM(Pin(2))
也可以在初始化时设置其频率和占空比如下:
频率设置范围为1HZ~40MHZ(40 000 000HZ)
pwm0 = PWM(Pin(2), freq=5000)
- 配置 PWM 参数:
freq:PWM 的频率(Hz)。
duty:PWM 的占空比(0 到 1023 的整数)。
# 设置频率为 1000 Hz,占空比为 512 (即 50%)
pwm.freq(1000)
pwm.duty(512)
示例1:
PWM调光
import machine,time
# 创建PWM对象
led = machine.PWM(machine.Pin(2), freq=1000)
while True:
# 占空比从 0 到 1023 增加
for i in range(0, 1024):
led.duty(i)
time.sleep_ms(5)
# 占空比从 1023 到 0 减少
for i in range(0, 1024):
led.duty(1023 - i)
time.sleep_ms(5)
示例2:控制舵机
舵机的控制信号周期为20ms,所以频率为50(1000ms/50=20ms)。
舵机的信号为500us~2500us,对应角度为0 ~ 180度。占空比的设置范围为0 ~ 1023,对就0 ~ 100%的占空比。
from machine import Pin
from machine import PWM
import time
pwm=PWM(Pin(2))
pwm.freq(50)
def Servo(servo, angle):
# angle / 180( * 2(0°-180°) + 0.5()/ 20ms * 1023
servo.duty(int(((angle)/180 *2 + 0.5) / 20 * 1023))
while True:20
Servo(pwm,0)
time.sleep_ms(1000)
Servo(pwm,180)
time.sleep_ms(1000)
示例3:控制蜂鸣器
import machine
import time
#初始化
pwm = machine.Pin(2, machine.Pin.OUT)
pwm = machine.PWM(buzzer_pin, freq=5000) #频率为5000
pwm .duty(512) # 50%的音量
time.sleep(1) # 延时1秒钟
pwm .deinit() # 停止蜂鸣器
联系我们
扫码或者点这里加群了解更多!
Created by qdprobot