回答

收藏

[评测分享] 【树莓派5测评】 08.PWM测试

#板卡评测 #板卡评测 1736 人阅读 | 0 人回复 | 2024-03-18

本帖最后由 stm1024 于 2024-3-18 22:39 编辑

PWM(Pulse-width modulation)是脉冲宽度调制的缩写。脉冲宽度调制是一种模拟信号电平数字编码方法。脉冲宽度调制PWM是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式。所以根据面积等效法则,可以通过对改变脉冲的时间宽度,来等效的获得所需要合成的相应幅值和频率的波形。实现模拟电路的数字化控制可显著降低系统成本和功耗。许多微控制器和数字信号处理器 (DSP) 已包括了 PWM控制器芯片,因此可以更轻松地实施数字化控制。PWM信号是通过调节占空比的变化来调节信号、能量等的变化。PWM输出可以简单的用GPIO输出加上延时来模拟,但是稍微高级一些的微控制器一般是带有这种外设的,在树莓派中,仍旧可以使用gpiozero库实现PWM的输出,这使用到了PWMLED类。
还是按前面的方式,将一个LED接入到地和某个GPIO针脚上,这里我们选用的是4号GPIO通道,然后新建一个文件为pled.py的文件,然后输入如下代码:
  1. from gpiozero import PWMLED
  2. from time import sleep
  3. import math

  4. led = PWMLED(4)
  5. N=10
  6. x=1
  7. direct=True
  8. while True:       
  9.        
  10.         print(x)
  11.         if direct:
  12.                 x += 1
  13.                 if x==N:
  14.                         direct=False
  15.                 led.value = x/N
  16.         else:
  17.                 x -= 1
  18.                 if x==1:
  19.                         direct=True
  20.                 led.value = x/N
  21.         sleep(0.1)
复制代码
就可以实现一个简单的呼吸灯效果了,当然还有更简单的方式:
  1. from gpiozero import PWMLED
  2. from signal import pause

  3. led = PWMLED(4)
  4. led.pulse()
  5. pause()
复制代码
以及:
  1. from gpiozero import PWMLED
  2. from signal import pause

  3. led = PWMLED(4)
  4. led.blink()
  5. pause()
复制代码
还可以给blink提供更多的参数,确定点亮和熄灭的时长,例如下面的配置:
  1. from gpiozero import PWMLED
  2. from signal import pause

  3. led = PWMLED(4)
  4. led.blink(0.01,0.03)
  5. pause()
复制代码
第一个参数是高电平0.01秒,低电平是0.03秒,运行后,逻辑分析仪抓波形如下:

可以看到,周期40ms,占空比25%都是比较符合的。

更多高级的用法,可以参考gpiozero的文档手册,官网地址是https://gpiozero.readthedocs.io/
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

5300 积分
55 主题
+ 关注
热门推荐
关闭

站长推荐上一条 /3 下一条