創作內容

1 GP

樹莓派 全彩 RGB LED 彩色循環 (PWM教學)

作者:GJLMoTea│2019-05-20 23:58:09│巴幣:2│人氣:2472


樹莓派 全彩 RGB LED 彩虹循環 (PWM教學)








1. 用到這個全彩LED燈,接腳由左至右分別為R、G、B、GND(接地)
2. 接上樹莓派的GPIO
3. 在樹莓派中以 Python3 來執行程式碼





GPIO.setmode(GPIO.BOARD)
# R: 33號腳位(第33根pin)
# G: 35號腳位(第35根pin)
# B: 37號腳位(第37根pin)
R_pin = 33
G_pin = 35
B_pin = 37

其中用到的R、G、B腳位分別為第33、35、37根pin,加上GND

如下圖所圈起來的地方






R_pwm = GPIO.PWM(R_pin, 500) # GPIO.PWM(R_pin, 500)表示channel(腳位)
G_pwm = GPIO.PWM(G_pin, 500) # 500 表示 頻率frequency
B_pwm = GPIO.PWM(B_pin, 500)


R_pwm.start(0) # R_pwm.start(0)的0表示佔空比,可以設置 0~
100的數字
G_pwm.start(0)
B_pwm.start(0)


R_pwm.ChangeDutyCycle(R_mapping) # R_pwm.ChangeDutyCycle() 為改變佔空比,依然
G_pwm.ChangeDutyCycle(G_mapping) # 是要填入一個0~100的數字
B_pwm.ChangeDutyCycle(B_mapping)

在此用到的 GPIO.PWM 只有三段,

p.start()之後 PWM 才會開始動作,
此時 改變占空比 p.ChangeDutyCycle() 、改變頻率p.ChangeFrequency() 等函式才有作用

p.start(0~100)p.ChangeDutyCycle(0~100) 改變佔空比的功能,是一樣的
p=GPIO.PWM(pin, f)p.ChangeFrequency(f) 改變頻率(f)的功能,是一樣的 (頻率的單位為hz)



至於頻率要怎麼設,首先要了解頻率與佔空比的關係



占空比(Duty Cycle)可以想像成:
一天有24小時,我一天工作8小時,
等於是我每天有1/3的時間在做事,在生產、發電,
那我的占空比就是1/3 (33.3%)。

而工程師泰迪很勤勞,
一天有24小時,泰迪每天工作16個小時,是個工作狂,
等於是泰迪每天有2/3的時間在做事,在生產、發電,
那麼泰迪的占空比就是2/3 (66.7%)。

其實我覺得"佔空比"這翻譯翻的怪怪的,應該是要翻成"佔忙比"或"負載週期"吧。



套上頻率的概念後,這邊以LED燈來解釋:

若佔空比10%f為1 (週期為1秒1次),
表示PWM在這1秒週期內 LED燈亮了0.1

若佔空比100% f為1 (週期為1秒1次),
表示PWM在這1秒週期內 LED燈亮了整整1

若佔空比50%f為0.1 (週期為10秒1次),
表示PWM在這10秒週期內 LED燈亮了一半的時間,也就是5秒

若佔空比50% f為5 (週期為0.2秒1次 也就是1秒內發生了5個循環周期)
會發現LED燈在0.2秒內亮了0.1秒、暗0.1秒
換句話說如果觀察了1秒,會發現LED燈在這1秒內明滅了5次

那如果是佔空比30%f為500呢?
照理說會是在一秒內LED燈明滅閃爍了500次
每次閃爍只有3成的時間亮著、7成的時間是暗的,
但因為頻率太高、速度實在太快無法跟上
(肉眼怎麼可能在一秒內精準數出500次!! 給你跪了),

所以 人眼會覺得這顆LED燈一直亮著、亮度是30%
這便是由控制PWM的頻率來達到模擬類比(analog)顯示明亮程度的效果


頻率設越高越耗CPU資源。
至於頻率到底要設多少才是合理的?

pwmFrequency in Hz = 19.2e6 Hz / pwmClock / pwmRange

50 Hz = 19.2e6 Hz / 1920 / 200

網路上給了一個簡單(?)的公式,


簡單來說是這樣子,


我們要的頻率 = 樹莓派基頻(定值) / 1920(預除頻值 定值) / 自己設的變數

頻率建議範圍為50~4000 (全彩LED的話,頻率800已經足夠使用),

超過4000容易產生不預期的結果(點我)





下面這張圖是剛剛那串公式的解釋,
由左而右是clock的時序,
圖中公式的osc_clock代表這台機器的基頻,
PWM_Clock 如同預除頻值 (以4096 Clock為一個單位),
PWM_Range 如同這邊按照需求所設定的update_rate變數,
將結果四捨五入後-1就是我們所求的值





引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4399604
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

1喜歡★GJLMoTea 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:樹莓派 Raspbain... 後一篇:什麼是電腦?為什麼電腦只...

追蹤私訊切換新版閱覽

作品資料夾

dhreekingdon幸運看見的你
給你一顆紅心~讓你能保有一整天的好心情~祝你有個愉快的一天喲(<ゝω・)~❤看更多我要大聲說昨天21:19


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】