【硬件控制】3. Pico点亮一盏会呼吸的灯

上一节文章末尾讲了如何点亮一个LED,本节讲解如何点亮一个会呼吸的LED,也就是如图所示的呼吸灯:

PWM基础知识:

通常控制一个LED亮灭只需要控制一个引脚输出高电平或者低电平即可,是一个数字信号,只有两个值,要么是0,要么是1

但是在0到1之前还有无数的中间状态,这就是模拟信号

我们要实现呼吸灯使用数字信号来控制肯定是不行的,我们需要能够输出0和1之前的值,相当于输出一个模拟信号,但是树莓派的GPIO引脚都是数字信号的,怎么办呢?

这时候就有一种PWM的方式将数字信号转换成模拟信号输出

PWM全称Pulse Width Modulation(脉冲宽度调制),简称脉宽调制,通过控制方波一个周期内高电平的占比来模拟一个正弦波。

从高电平到低电平再到高电平叫作一个周期,而频率是周期的倒数,如果一个PWM的频率为50Hz,那么一个周期的时间为0.02s。

而这0.02s中高电平所占时间的比例就叫作占空比。

比如一个高电平电压是5V,经过75%占空比的PWM输出后,输出电压为3.75V

通过不断改变每个周期的占空比来实现输出电压的渐变。

代码示例:

Pico中直接导入PWM包即可,不用自己计算PWM

from time import sleep

from machine import Pin, PWM

pwm = PWM(Pin(25, Pin.OUT))

pwm.freq(1000)

while True:
    for duty in range(65535):
        pwm.duty_u16(duty)
        sleep(0.0001)
    for duty in range(65535, 0, -1):
        pwm.duty_u16(duty)
        sleep(0.0001)

这段代码将LED接到25号脚上

然后设置PWM的频率为1000Hz

第一个for循环将占空比从0%涨到100%,LED会逐渐变亮

第二个循环将占空比从100%减到0%,LED会逐渐变暗

pwm.duty_u16(duty)

这里设置的其实是0-65535中间的一个数值,这个数值除以65535才是占空比,之所以范围是0-65535是因为这个数值是uint 16位的,相当于2的16次方=65536

这只是PWM的一个简单应用,使用PWM还可以实现直流电机转速的控制

这个在以后的章节会讲到

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值