树莓派 Pico 使用 PWM 实现 LED 呼吸灯 ,脉宽调制实现模拟输出(第五期)树莓派Pico,LED灯,LED模块

By 呃呃呃

2023-11-07 18:48:49

浏览量9237

已赞3

Pico 上的每个 GPIO 引脚都能够进行脉宽调制,通过改变引脚打开和关闭的频率,可以改变或调制这些脉冲的宽度实现模拟输出。


树莓派 Pico 上的模拟-数字转换器只能以一种方式工作,它将模拟信号转换为微控制器可以理解的数字信号。如果你想走另一种方式,并让你的数字微控制器创建一个模拟输出,你通常需要一个数字到模拟转换器(DAC),但有一种方法来「伪造」模拟信号,使用所谓的脉宽调制或 PWM。

微控制器的数字输出只能是 0 或 1。打开和关闭数字输出被称为脉冲,通过改变引脚打开和关闭的频率,你可以改变或调制这些脉冲的宽度,因此称为「脉宽调制」。


Pico 上的每个 GPIO 引脚都能够进行脉宽调制,但是微控制器的脉宽调制块是由八个切片组成的,每个切片有两个输出。如图所示,你会看到每个 Pin 都有一个字母和一个数字。数字表示 PWM 引脚的编号,而字母表示使用的哪一个 PWM 片来输出。

 Image


如果你在引脚 GP0 上使用 PWM_A[0],在引脚 GP1 上使用 PWM_B[0],一切都正常。如果你在引脚 GP2 上添加 PWM_A[1],依然正常运行。但是如果你尝试在引脚 GP0 和引脚 GP16 上使用 PWM 通道,你会遇到问题,因为它们都连接到 PWM_A[0]。

上面按照图示搭建电路,LED 和 330Ω 限流电阻,LED 正极通过 330Ω 电阻连接 Pico 的 GP16。LED 负极连接到 Pico 的 GND 引脚。

在 Thonny 中输入以下代码:

from machine import Pin, PWM
import utime

#将GPIO16设引脚置为PWM
led = PWM(Pin(16))
#设置频率
led.freq(1000)
led_val = 0
#步进值
led_step = 5

while True:
    #按步进值调整
    led_val += led_step
    if led_val >= 100:
        #到达最大值,设置步进为负值,逐步减小
        led_val = 100
        led_step = -5
    elif led_val <= 0:
        #到达最小值,设置步进为正值,逐步增加
        led_val = 0
        led_step = 5
    #设置PWM的值
    led.duty_u16(int(led_val * 500))
    utime.sleep_ms(50)

如果要通电自动运行该程序,直接保存到Pico中时将其命名为main.py

可以执行效果如下:可看到led呼吸闪烁

Image


本文章最后由 超级版主2023-11-12 19:25 编辑
发表评论
请先 注册/登录 后参与评论

已有0 发布

默认   热门   正序   倒序
    查看更多评论
    (3) 分享
    分享

    扫二维码或复制链接分享该篇文章

    取消
    已有0次打赏
    本站免责声明
    1、本站资源,均来自网络或个人用户发布,版权归原作者,所有资源和文章仅限用于学习和研究目的 。
    2、不得用于商业或非法用途,否则,一切责任由该用户承担 !

    侵权删除请致信 E-Mail:cxg88@qq.com