モーターやLEDを使う際には通常アナログ回路が必要だがPWMを利用すればデジタル回路でも使うことできる
Contents
PWMとは?

PWMとはPulse Width Modulation(パルス幅変調)のことでデジタル回路にて上図のようなパルス波を出力し、オン、オフの間隔を制御すること。PWM制御を行うことでデジタル回路で疑似的にアナログ制御が可能となる。

って感じかな?
ちたまん
全然わかんないんだけど(汗
ツン子デジタルとアナログの違いとは?
そもそもデジタルとアナログとはなんだろうか?
- デジタル:数値で表現できる
- アナログ:数値で表現できない
簡単に言えばこれだけ。例を見ていこう


問題!これは何℃でしょう?
ちたまん
38.75℃でしょ。
そのまんまじゃん。


じゃあこれは?
ちたまん
うーん大体36.4℃かな?
ツン子
ちょっと迷うよね?
ちたまん
だって中の液体が目盛りとあってないんじゃん。
ツン子このようにアナログは量が連続的に変化するため正確に数値としてあらわすことができない。アナログ量を正確に保存するなら写真を撮るか絵を描くことになる。
ノートに読み取った数値を記録した場合はアナログからデジタルに変換したことになる。

そんなわけでソロバンはデジタルだったりする
ちたまんアナログ回路とデジタル回路
アナログとデジタルの違いは上述のとおりなんだけど電子回路の世界では少し意味が異なる
- デジタル回路:電圧のオンとオフのみで制御される回路
- アナログ回路:電圧が変動し、電圧によって動作が異なる回路
例えばここまでのレッスンではArduinoでは5vの電圧をオンするかオフするかの制御しかしていない。これはデジタル回路としての制御。

あれ?でも抵抗値を変えてLEDを減光させたよね?
ツン子
それはブレッドボード上の回路で行ったよね。抵抗値を変えることでLEDにかかる電圧が変化して明るさ(動作)が変わったね。Arduinoにブレッドボードというアナログ回路を接続しているんだ。
ちたまん
あー別回路なんだ
ツン子他にもモーターであれば電圧を変えることで時間当たりの回転数が変化する。音声なら電圧によって音量が変化する。

じゃあデジタル回路じゃモーターの制御とか出来ないの!?
ツン子
出来るよ。そのために必要なのがPWM制御なんだ
ちたまんデジタルで速度制御するには?
デジタル回路は電圧のオンとオフしかできないけど、実はそれだけでもモーターの速度制御なんかは出来る。

例えば扇風機。ONにすると風が出るよね。
風量を変えるにはどうしたらいいかな?

風量を変えるツマミがついてるからそれを回せばいいよね。
ツン子
その通りだね。最近はボタンが多いけど。基本はツマミだね。実際どうなっているかは知らないけど、あのツマミを回すことで抵抗値または変圧比が変わり風量が変わっているんだろうね
ちたまん
つまりアナログ回路が組み込まれているんだね
ツン子
そうなるね。でもあのツマミを触らなくても風量を変化させることができる。
扇風機はOFFにしてもすぐには止まらないよね。

たしかに止まらないけど?
ツン子
止まりきる前にONしたら再び速く回るよね。じゃあこれを繰り返したらずっとONの時と比べてどうなるかな?
ちたまん
止まらないけどONのままよりは風は弱そうだね
なるほどね!

さらONの時間1秒に対してOFFの時間を3秒とかにしたら、もっと風は弱くなるよね
ちたまん
手動だと風量が不安定になってしまうけど1秒間100回くらい繰り返せば風量は安定するよね。まあ扇風機でそんなことしたら壊れるけど
ちたまん
良い子は真似しないでね
ツン子
OFFの時間を作ることで平均でみると電圧が下がったことになる。図の例で言えば周期10msに対して4msだけONになっているので、その比率は0.4。そのため平均電圧は4割の2Vになる。つまり常時2Vでモーターを駆動するのと同じになる。これが基本的なPWMの考え方。またこの周期に対するON時間の比をデューティー比と呼ぶ。
PWMの平均電圧は目安程度。実際には平均2Vと常時2V流した場合とでは違いが出る。モーターには回転数、トルク、消費電力等の複数のパラメータがあるが、パラメータによって近い数値もあれば大きくかけ離れる数値もある。
LEDの制御もPWMでできる。
LEDは抵抗を使って分圧することで電流を制御することができる。これによりLEDを壊わさずに使用できる。
ただこの記事でも紹介したけどLEDの動作電圧の幅は狭く、細かい抵抗値の調整が必要になる。
しかも一定以上電圧を下げるとと電流が足らずに消灯してしまってうまく減光できない。

ん?そうするとさっきの平均電圧の話に合わなくなっちゃう?
ツン子
その通り。LEDの減光は別の理屈だよ
ちたまん先ほど説明したようにモーターの場合はOFFにしてもすぐには止まらないし、そもそもONの時も最高速度に達するまでタイムラグが生じている。
これに対してLEDは応答速度が50n秒~100n秒と非常に短い。
そのためPWMの波形に合わせて点灯と消灯を繰り返す。つまり高速で点滅する

ものすっごいチカチカするってこと!?目がおかしくなっちゃわない!?
ツン子
実はあまりにも高速過ぎて人間の目では点滅を認識できないんだ。蛍光灯も同じように高速で点滅してるけどチカチカしないでしょ?
ちたまん人間の目はおよそ50Hzまでの点滅までしかチラツキを認識することは出来ないのでPWM制御によるLEDの点滅を認識することは出来ずずっと同じ光量で光っているように見えてしまう。
しかし、実際に消灯している時間があるため、人間の目に入ってくる光量は少なくなってる。人間の目は一定時間あたりに入ってくる光の総量で明るさを認識するため。高速で点滅させると暗くなったように感じる。
そしてPWMでLEDを駆動させた場合、デューティー比を下げることで本来点灯できないレベルの低い光量を得ることができる。また抵抗による分圧より消費電力も小さくて済む。
デジタルだからプログラミングできる
そんなわけでPWM制御を使うことでデジタル回路で疑似的にアナログな動きを再現できる。またLEDのようにPWMのほうがメリットがあることもある。
そしてデジタル回路ということはコンピュータで制御できるということだ。なので例えばデューティー比の変更はプログラムから変更可能。抵抗などを物理的に変更しなくても変数に入れる数値を変更するだけでLEDの明るさを変えたり、モーターの速度を変えることができる。