TWELITEでのLED照度調整と同じようにRaspberry Pi 4でもPWMを使ってLED照度調整をおこないます。
回路図はとてもシンプルです。GPIO4 (7pin)をブルーLED、PWM0 (12pin)をグリーンLEDの、それぞれアノード(足の長い方)に接続し、それぞれのLEDの他端をGND (6pin) に接続しています。
GPIO4 (7pin) | ブルーLEDのアノード |
PWM0(12pin) | グリーンLEDのアノード |
GND (6pin) | 両方の抵抗端 |
GPIO4とPWM0にLEDを接続しているのは、ソフトウエアPWMとハードウエアPWMの両方を動かしてみたかったからです。ハードウエアPWMはハードウエアでPWM信号を生成していて、周期やDuty比は正確です。けれどもRaspberry Pi 4ではPWM0とPWM1の2つしか備えられていません。一方ソフトウエアPWMはGPIOポートであればどれでもPWM信号を生成できますが、ソフトウエアゆえに内部の優先処理の影響をうけて周期やDuty比の正確さに欠けます。簡易的なPWMといったところですね。
工作室ではそれら二つのPWMを動かすPythonコードを用意しました。周期とDuty比を設定してPWM出力して、キーボードでコントール+Cを押すことで出力を停止します。
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)
blue=GPIO.PWM(4, 1000) # GPIO4を1000HzでPWM設定
blue.start(0) # Duty=0%でスタート
blue.ChangeDutyCycle(95) # Duty=95%に設定
GPIO.setup(18, GPIO.OUT)
green=GPIO.PWM(18, 1000) # GPIO18を1000HzでPWM設定
green.start(0) # Duty = 0%でスタート
green.ChangeDutyCycle(95) # Duty=95%に設定
try:
while True:
sleep(0.1) # Ctr-Cが押されるまで点灯継続
except KeyboardInterrupt:
pass
blue.stop()
green.stop()
GPIO.cleanup()
工作室で購入したロジックアナライザーLA1010を使って実際のPWM出力信号を観察してみます。
Duty比 5%
Duty比 5%ではPWM信号周期の内5%だけ出力(HIGH)します。LEDはこの5%だけ点灯するわけですね。なので結構暗いですね。ロジックアナライザーでは周期が861Hzだと言っています。Pythonでの設定では1000Hzなので結構なズレがあることがわかります、というかズレすぎな感じがしますね。どっちが悪いんだろうって感じです。
Duty比 50%
Duty比50%ではPWM周期の内半分がHIGHになります。LEDも元気よく点灯します。
Duty比 95%
Duty比95%ではPWM周期の95%がHIGHなので、ほぼほぼLEDは全力投球といったところです。ただ、自分の目では50%時の明るさと区別がつかない感じでした。また、グリーンLEDよりもブルーLEDの方が明るく点灯するように感じました。試しにグリーンLEDをブルーLEDに交換したら両方とも同じ明るさに見えたので、PWM信号差(端子差)ではないようです。
周期変更の場合
追加で周期を500Hzから1000Hzに変更した場合もロジックアナライザーで観察しました
コメント