
PWM(脉冲宽度调制)是一种通过快速数字信号模拟模拟信号的技术,在树莓派 Pico主板通过 RP2040 芯片可以轻松实现。PWM 广泛应用于控制 LED 亮度、电机速度、舵机角度等场景。
PWM 通过快速切换引脚的高低电平来工作,周期:完成一次高低电平切换的时间,占空比:在一个周期内高电平所占的百分比,例如:50% 占空比表示高低电平各占一半时间,树莓派 Pico 上几乎所有 GPIO 引脚都可以配置为 PWM 输出,每个引脚都关联到一个 PWM 通道。
下面是一个使用主板GP0引脚通过 PWM 控制一颗 LED灯亮度的示例:将LED灯的长脚正极接线到GP0,短脚负极接线到GND。 我们通过编程来控制GP0引脚输出PWM信号,能实现控制LED灯强弱变化!

from machine import Pin, PWM
import time
# 初始化PWM,使用GP0引脚
pwm = PWM(Pin(0))
# 设置PWM频率为1000Hz
pwm.freq(1000)
# 从暗到亮逐渐变化
for duty in range(0, 65536, 512):
pwm.duty_u16(duty)
time.sleep(0.05)
# 从亮到暗逐渐变化
for duty in range(65535, -1, -512):
pwm.duty_u16(duty)
time.sleep(0.05)
# 关闭PWM
pwm.deinit()
机通常需要 50Hz 的 PWM 信号,通过不同的脉冲宽度来控制角度
舵机控制说明:舵机需要特定频率(通常 50Hz)的 PWM 信号
角度控制通过脉冲宽度实现:
0.5ms 脉冲对应 0 度
1.5ms 脉冲对应 90 度
2.5ms 脉冲对应 180 度
不同品牌舵机可能需要微调占空比范围
将舵机信号线接入主板GP0引脚, 通过编程来控制GP0引脚输出PWM信号,能实现控制舵机旋转角度!
from machine import Pin, PWM
import time
# 初始化舵机PWM,使用GP0引脚
servo = PWM(Pin(0))
# 舵机通常需要50Hz的频率
servo.freq(50)
def set_servo_angle(angle):
# 将角度转换为16位占空比
# 舵机通常在0.5ms-2.5ms脉冲之间对应0-180度
# 50Hz频率的周期是20ms,所以占空比范围约为2.5%-12.5%
min_duty = 1638 # 约2.5% (65535 * 0.025)
max_duty = 8192 # 约12.5% (65535 * 0.125)
duty = min_duty + (max_duty - min_duty) * angle // 180
servo.duty_u16(duty)
# 让舵机从0度转到180度再转回来
while True:
for angle in range(0, 181, 5):
set_servo_angle(angle)
time.sleep(0.1)
for angle in range(180, -1, -5):
set_servo_angle(angle)
time.sleep(0.1)
time.sleep(1)
RP2040 芯片有 8 个 PWM 切片(slices),每个切片可以控制 2 个引脚(通道 A 和 B):
from machine import Pin, PWM
import time
# 初始化两个PWM引脚,使用同一个切片
pwm1 = PWM(Pin(0)) # 切片0,通道A
pwm2 = PWM(Pin(1)) # 切片0,通道B
# 同一切片的频率必须相同
pwm1.freq(1000)
# 两个通道可以有不同的占空比
pwm1.duty_u16(32768) # 50% 占空比
pwm2.duty_u16(16384) # 25% 占空比
# 也可以通过切片对象设置频率
slice = pwm1.slice()
PWM(slice=slice).freq(2000) # 同时改变两个引脚的频率
time.sleep(5)
# 关闭PWM
pwm1.deinit()
pwm2.deinit()
切片特性说明
每个切片控制两个引脚,共享相同的频率,同一切片的两个通道可以有不同的占空比,可以通过 slice() 方法获取切片对象,统一控制频率。
总结
树莓派 Pico 的 PWM 功能具有特点:几乎所有 GPIO 引脚都可配置为 PWM 输出,16 位精度的占空比控制(0-65535),8 个 PWM 切片,每切片控制 2 个通道,灵活的频率设置,适应不同应用场景。
通过 PWM 技术,你可以实现精确的模拟量控制,为各种项目(如机器人、灯光控制、电机驱动等)提供强大支持。使用时注意查看引脚图,了解哪些引脚共享同一 PWM 切片,以便更好地规划电路设计。