2012年4月11日水曜日

Arduino で使用できるPWMを理解してみる

以前、LEDの明るさを調整してみるで使用したPWMの理解をもう少し深めてみようと思います。

PWM(=Pulse Width Modulation:パルス幅変調)とは、日本語訳、そのままなら、パルスの幅を変更する機能を意味していることになります。

じゃーパルスって何? となります。


PWMを使うためには、Arduinoの出力をデジタルではなく、アナログ指定にしました。Arduinoでアナログ出力する際に、実際にはどういう出力がなされるているかを考えることが手掛かりになります。

 スケッチでは、下記のように記述します。
analogWrite(9, 127);

【パラメータ】
pin: 出力に使うピンの番号
value: デューティ比(0から255)

リファレンスによれば、指定したピンからアナログ値(PWM波)を出力します。ですから、9番ピンからのデューティ比128のPWM波を出力することになります。

それそもアナログ波は、波って言うくらいなので、山(On)と谷(Off)の波が出力されるわけです。
さらに、デューティ比という比率で、どのくらい山(On)が続くかを指定できるわけです。
100%(スケッチで使用できる数値としては、255です)であれば、ずっと山(on)です。つまり、デジタル出力でHIGHを指定した時と同じです。0%(スケッチの指定では、0)であれば、ずっと谷(Off)なので、デジタル出力でLOWを指定した時と同じ、出力電圧は0Vです。

では、127を指定した場合、50%ですが、1周期のうち、50%の時間は5V、残りの50%の時間は0Vというきれいな、山と谷の波です。75%(191)の場合には、75%の時間は5V、残り25%の時間は0Vとなるわけです。

ちなみに、Arduinoの1周期は500Hz (2ms)です。

結果的に、出力の変動の度合いにより、疑似的に電圧を制御できるわけです。
けっして、アナログ出力と言っても、1V出力したり、3V出力するわけではないのです。

良く考えられていますね。

引用 
Arduino日本語リファレンス http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=2134
Arduinoチュートリアル基礎編 http://www.musashinodenpa.com/arduino/ref/index.php?f=2&pos=152




2 件のコメント:

  1. はじめまして(・・)
     
    私は現在とある高専に通っている3年生です。

    部活でマイコンなどをいじっているのですが、

    つい最近Arudinoを知っていろいろ調べ始めました。

    いろいろ調べていたらこのブログを見つけ、

    いろんな記事を読ませていただきました。

    まだ開発環境など、わからないことがいろいろあったのですが、

    あなたの記事を読んでようやく理解できました。

    Arudinoについては解らないことだらけなので、

    記事を読んで勉強したいと思います(・・)q__

    返信削除
  2. Marioさん
    コメントありがとうございます。
    少しでもArduinoの理解のお役にたてれば光栄です。初心者ならでは視点を大切にしたいと思い、自分の理解できたことを記事にしています。
    また、ときどき来てくださいね。

    返信削除