【树莓派教程】——Python使用PWM

2016-02-033.2万
AI 快速预览详细 收起
本文介绍了如何在树莓派上使用Python进行PWM控制,以实现LED的呼吸灯效果。首先,创建一个PWM实例`p = GPIO.PWM(channel, frequency)`,然后通过`p.start(dc)`启用PWM。接着,可以通过`p.ChangeFrequency(freq)`更改频率,通过`p.ChangeDutyCycle(dc)`更改占空比。最后,通过`p.stop()`停止PWM。示例代码展示了如何使LED每两秒钟闪烁一次以及如何在亮/暗之间切换。
1.树莓派引脚对照表

2.PWM控制呼吸灯
脉宽调制(PWM)是指用微处理器的数字输出来对模拟电路进行控制,是一种对模拟信号电平进行数字编码的方法。在树莓派上,可以通过对GPIO的编程来实现PWM。
创建一个 PWM 实例:
  1. p = GPIO.PWM(channel, frequency)
复制代码
启用 PWM:
  1. p.start(dc)   # dc 代表占空比(范围:0.0 <= dc >= 100.0)
复制代码

更改频率:
  1. p.ChangeFrequency(freq)   # freq 为设置的新频率,单位为 Hz
复制代码

更改占空比:
  1. p.ChangeDutyCycle(dc)  # 范围:0.0 <= dc >= 100.0
复制代码

停止 PWM:
  1. p.stop()
复制代码

注意,如果实例中的变量“p”超出范围,也会导致 PWM 停止。
以下为使 LED 每两秒钟闪烁一次的示例:
  1. import RPi.GPIO as GPIO
  2. GPIO.setmode(GPIO.BOARD)
  3. GPIO.setup(12, GPIO.OUT)
  4.   
  5. p = GPIO.PWM(12, 0.5)
  6. p.start(1)
  7. input('点击回车停止:')  
  8. p.stop()
  9. GPIO.cleanup()
复制代码

以下为使 LED 在亮/暗之间切换的示例:
  1. import time
  2. import RPi.GPIO as GPIO
  3. GPIO.setmode(GPIO.BOARD)
  4. GPIO.setup(12, GPIO.OUT)
  5.   
  6. p = GPIO.PWM(12, 50)  # 通道为 12 频率为 50Hz
  7. p.start(0)
  8. try:
  9.     while 1:
  10.         for dc in range(0, 101, 5):
  11.             p.ChangeDutyCycle(dc)
  12.             time.sleep(0.1)
  13.         for dc in range(100, -1, -5):
  14.             p.ChangeDutyCycle(dc)
  15.             time.sleep(0.1)
  16. except KeyboardInterrupt:
  17.     pass
  18. p.stop()
  19. GPIO.cleanup()
复制代码

【树莓派教程】——Python使用PWM图1


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(7)
蛋脑花
蛋脑花
请问树莓派rpi.gpio库可以更改pwm的占空比范围吗?比如将0到100 提高到 0到1000的范围
蛋脑花
蛋脑花回复蛋脑花
只能通过提高PWM的控制频率来提高控制精度吗
ldsgrh
ldsgrh
备用学习
iooops
iooops
啊我的树莓派
吹口琴的钢铁侠
吹口琴的钢铁侠
同时能有几个PWM
对CPU占用有多少
每个GPIO都可以操作吗
凌风清羽
凌风清羽
作者
回复吹口琴的钢铁侠
这个还有待研究一下,我试了两个GPIO都可以~~可能是巧合了,以前看过一篇资源竟然找不到了
孙毅
孙毅回复吹口琴的钢铁侠
好问题,我也知道。。。。。等楼主
孙毅
孙毅
哈哈哈,已经有人准备跟着你玩树莓派了啊。。。哈哈哈
hnyzcj
hnyzcj
我的树莓估计年后才能到,要不现在就跟你后面做了。
孙毅
孙毅回复凌风清羽
就是,炸的大肾,怎么买 肾7
凌风清羽
凌风清羽
作者
回复hnyzcj
炸了大肾买iPhone7
共9条回复,已加载2条,点击查看更多共9条回复,已加载全部
qq815076543322
qq815076543322
沙发 做一个
- 没有更多了 -