
Raspberry Piと赤色LEDでパルス幅変調を試すの記事でPWM(パルス幅変調)について触れ、Raspberry PiでLEDを点灯する際に明るさの調整をした。
本に記載されているPWMを読んでみると、PWMで擬似アナログ信号を出力するという内容を頻繁に見かける。
疑似アナログ信号とは何だろう?ということでPWMを更に整理してみることにした。
※これからの内容は個人的な理解になるので、内容に誤りがあるかもしれない。

前回の記事でPWMは周期Tとパルス幅 τ (タウ)で表す事ができる。
この τ の値を周期毎に徐々に値を上げていくと、

上の図のようになる。
τ の値を縦軸で表すようにすると、

上記のようになる。
この図の周期Tを限りなく小さくし、パルス幅 τ の値の増え方も微量ずつにした場合、

こんな感じになる。
※実際には三角になるだろうけれども、気分的に丸くしたかった。
上記の説明の内容の信号をLEDに送ってみたらどうなるのだろう?ということでコードを作成してみた。
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
pin = 12
GPIO.setup(pin, GPIO.OUT)
led = GPIO.PWM(pin, 60)
led.start(0)
duty = 1
add = 1
try:
while True:
led.ChangeDutyCycle(duty)
duty += add
# デューティ比が0もしくは100になった場合は増減の符号を反転する
if duty <= 0 or duty >= 100:
add *= -1
time.sleep(0.01)
except KeyboardInterrupt:
pass
led.stop()
GPIO.cleanup()
コードが作成できたので、実行してみると、
※GPIOの配置は前回の記事と同じでアノード(+)にはGPIO12、カソード(ー)にはGNDを繋げている。
ホタルの光のような点滅になった。
GPIOでHIGHとLOWだけなのにアナログっぽい挙動になった。




