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だけなのにアナログっぽい挙動になった。