2.呼吸燈-樹莓派


2.呼吸燈-樹莓派

什麼是PWM

簡單來說,PWM就是通過控制一定時間內的平均電壓來調節這段時間LED燈的明暗程度。那PWM是怎麼控制一定時間內的平均電壓呢?答案就是通過改變佔空比(Duty Cycle),佔空比指電路被接通的時間佔整個電路工作週期的百分比。

結合視頻中的例子來講:以100毫秒為一個週期,其中50毫秒通電,50毫秒斷電。那麼燈泡在100毫秒內其實只有一半時間是通電的,佔空比就是50%了。 100毫秒內燈泡得到的電壓只有一半,那麼亮度自然也就變為了一半。

我們可以通過RPi.GPIO中的PWM類來控制輸出的平均電壓。

第一個參數為引腳編號,第二個參數為頻率

pwm = GPIO.PWM(num, frequency)

第二個參數要填寫頻率,這裡要用到頻率(f)和周期(T)的轉換公式: [公式]

我們假設週期為20毫秒,那得到頻率為1/0.02s,即50Hz。

注:如果開關動作的周期如果太長,即頻率太小,那麼人的肉眼就可以辨識出燈的開關狀態,也就是說LED燈看起來就是閃爍的。

之後調用p.start(dc)來開啟PWM:

# 開啟PWM,參數dc為佔空比,取值範圍為0-100
pwm.start(dc)

如果要更改頻率,可以調用ChangeFrequency()方法:

pwm.ChangeFrequency(frequency)

如果要修改佔空比,可以調用ChangeDutyCycle()方法:

pwm.ChangeDutyCycle(dc)

當不需要PWM時,可以調用stop()來停止:

pwm.stop()

程式碼


import RPi.GPIO as GPIO  
from time import sleep  
  
led = 20  
freg = 60  
dc = 0  
  
GPIO.setmode(GPIO.BCM)  
GPIO.setup(led, GPIO.OUT)  
  
p = GPIO.PWM(led, freg)  
p.start(dc)  
  
while True:  
    for i in range(1, 100):  
        p.ChangeDutyCycle(i)  
        sleep(0.05)  
    for i in range(100, 1, -1):  
        p.ChangeDutyCycle(i)  
        sleep(0.05)  
p.stop()  
GPIO.cleanup()

文章作者: blairan
版權聲明: 本博客所有文章除特別聲明外,均採用 CC BY 4.0 許可協議。轉載請註明來源 blairan !
评论
  目錄