这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【Let'sdo2026年第1期】过程贴:实现PWM输出功能

共1条 1/1 1 跳转至

【Let'sdo2026年第1期】过程贴:实现PWM输出功能

高工
2026-07-01 19:23:14     打赏

一:PWM知识

PWM(Pulse Width Modulation 脉宽调制)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。它是一种对模拟信号电平进行数字编码的方法。是指在一定时间内波形的高电平(即 1 状态)所占用的时间比例。通过高分辨率计数器的使用,方波占空比被调制用来对一个模拟信号的电平进行编码。PWM 信号任然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有,要么完全无。比如我们的电压输出是 5V的,那么经过改变 PWM 的占空比,可以达到在一定时间内输出 3.3V 或者 1.3V 的效果。

这里需要有两点需要注意的:

PWM是脉冲宽度调制,具有两个非常重要的参数:频率和占空比。

频率:PWM的频率是整个周期的倒数。

占空比:占空比是指一个周期内高电平所占的比例。

二:树莓派PWM配置

几乎所有GPIO引脚都可以配置为PWM输出,唯一需要注意的是,这些引脚被组织成了8个“切片”(Slice),同一切片下的两个引脚会共享相同的PWM频率。

为了让你看得更明白,我以最常见的Raspberry Pi Pico开发板为例,整理了一张PWM引脚映射表,并列出了同一切片的引脚组合。

03-2  GPIO引脚.png

例如,GP0和GP1都属于Slice 0。如果你把GP0设为PWM输出,那么GP1如果也被配置为PWM,它的频率会被强制同步为与GP0相同。但它们俩的占空比(决定亮度或速度)可以各自独立设置,互不影响。

关于ADC引脚:GP26、GP27、GP28是特殊的,它们兼具模拟输入(ADC)和PWM功能。如果你要用这些引脚读取模拟信号(如电位器),就不能同时把它们用作PWM输出了。

本款开发板有26个可用的GPIO引脚,都可以做PWM输出

三:软件代码:
from machine import Pin, PWM, Timer

# 配置 PWM
pwm_pin = Pin(25)
pwm = PWM(pwm_pin)
pwm.freq(1000)

# 定义占空比变量
duty = 0
direction = 1  # 1 表示增加,-1 表示减少

# 定时器回调函数
def update_pwm(timer):
    global duty, direction
    duty += direction * 500  # 每次增加或减少 200
    if duty >= 65535 or duty <= 0:
        direction *= -1  # 反转方向
    pwm.duty_u16(duty)

# 配置定时器
timer = Timer()
timer.init(period=10, mode=Timer.PERIODIC, callback=update_pwm)  # 每 10ms 触发一次
这里我配置使用定时器实现板载的LED灯呼吸效果。

结合定时器功能实现呼吸灯效果,这里可以接到本次活动的开发板就可以了。

四:实物验证

03-1 实物图片.png

图示所示,将代码烧录到程序中,可以看到LED灯闪烁的过程。





关键词: RP2040     PWM    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]