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