在這篇文章中,我們將看一下 Raspberry Pi 的硬體 PWM 功能,並建置相對應的  Python 執行環境。之後,同樣利用 Python 程式來展示如何使用硬體 PWM 功能來控制 LED 燈泡的亮度。

硬體 PWM

在 在 RASPBERRY PI 3 MODEL B 利用 PWM 控制 LED 亮度 這篇文章中的第二部分,我們明明已經可以利用 PWM 的功能來控制 LED 燈泡亮度,怎麼會又有這次的主題?先別急,且讓我們一起看下去。

如果用過如 Arduino 之類控制板的朋友可能已發現 Arduino 有所謂支援 PWM 的腳位,而並不是所有的數位腳位都可以提供 PWM 的功能。難道是 Raspberry Pi 的 GPIO 比較強大,所以每個腳位都可以提供 PWM 功能?其實不是的,我們之前透過 RPi.GPIO 套件所使用的 PWM 其實是所謂的軟體模擬 PWM,跟 Arduino 硬體直接支援的 PWM 並不一樣。

而 Raspberry Pi 也有支援硬體 PWM  的腳位,分別是 BCM 編號 12, 13, 18, 19 的四隻腳位。儘管有四隻腳位支援硬體 PWM 功能,但是卻只有兩個頻道 (Channel)。其中 12/18 屬於同一個頻道 (Channel 0)、而 13/19 則同屬於另外一個頻道 (Channel 1)。

使用軟體來模擬 PWM 功能,有一些缺點。首先是占用 CPU 的資源,因為執行軟體 PWM 功能時,需要 CPU 不斷地計算時間並控制波形。隨之而來的問題就是,因為 CPU 並不是只供軟體 PWM 使用,而必須與各式各樣的程式共享 CPU,所以很容易造成無法在”正確”的時間處理 PWM 功能,進而影響 PWM 輸出的波形。而 PWM 輸出波形就是 PWM 功能最重要的特性,一旦波形不正確,PWM 也就失去了精確性。所以,LED 無法呈現正確的亮度,而伺服馬達則可能無法定位至正確的角度。

簡單來說,使用硬體 PWM 可以達到更精準的控制效果,對系統的負擔也小了許多。

Python 虛擬環境設定

如果你尚未依照在 Raspberry Pi 3 Model B 建立 Python 3.6 環境的說明安裝 Python 3.6 的虛擬環境,請務必先予以正確設定再進行下列步驟。

  1. 選取 Terminal 應用程式
    Raspberry Pi Terminal 應用程式
  2. 初始虛擬環境相關設定
  3. 回到之前建立的虛擬環境
  4. 啟用 pigpio 服務
  5. 在虛擬環境中安裝 pigpio 套件
  6. 確認 pigpio 套件已正確安裝

    應可看到類似下列訊息

線路圖

Raspberry Pi 3 Model B 與 LED 燈泡

Raspberry Pi 3 Model B 與 LED 燈泡

說明如下:

程式範例

利用文字編輯器 (如 nano) 新增 Python 程式 hardware_pwm_led.py

內容如下

說明如下:

  1. 第 1 行指令引入剛剛安裝的 pigpio 套件。相較於 RPi.GPIO 套件提供軟體 PWM 功能,pigpio 套件可使用 Raspberry Pi GPIO 的硬體 PWM 功能。
  2. 第 4 行指令定義 LED 正極 (長腳) 所接腳位之 BCM 編號,編號 18 為支援硬體 PWM 腳位。
  3. 第 5 行指令定義 PWM 所使用之頻率。
  4. 第 7 行定義 pigpio 所需的控制物件。
  5. 第 12~17 行指令利用兩個 for 迴圈先逐漸加強 LED 燈泡的亮度後再逐漸減少其亮度。透過 hardware_PWM 函式,可指定 PWM 腳位、頻率與工作週期,以便改變 LED 燈泡的亮度。需要特別注意的是 hardware_PWM 的第三個參數範圍為 0~1000000,與 RPi.GPIO 工作週期範圍為 0~100 有很大差異,使用上須特別注意。
  6. 第 21 行指令確定程式結束時,BCM 編號 18 的腳位能夠回復到輸入模式。
  7. pigpio 另外提供 set_PWM_dutycycle 函數,與 RPi.GPIO 一樣可以在所有腳位提供 PWM 功能。
  8. pigpio 套件可以透過 pigpio 服務控制遠端 Raspberry Pi 的 GPIO。

程式完成後,輸入下列指令執行程式

順利的話,可以看到 LED 燈泡的亮度開始不斷地循環增減,如影片中所示:

Facebook 留言
Print Friendly, PDF & Email
Summary
在 Raspberry Pi 3 Model B 利用硬體 PWM 控制 LED 亮度
Article Name
在 Raspberry Pi 3 Model B 利用硬體 PWM 控制 LED 亮度
Description
在這篇文章中,我們將看一下 Raspberry Pi 的硬體 PWM 功能,並建置相對應的  Python 執行環境。之後,同樣利用 Python 程式來展示如何使用硬體 PWM 功能來控制 LED 燈泡的亮度。
Author
Publisher Name
Everlearn Studio
Publisher Logo