簡単にできるArduinoを使用したパルス幅変調(PWM)

パルス幅変調(PWM)信号は、基本的にはオン(ハイ)とオフ(ロー)状態の間で切り替わる方形波です。PWM信号のデューティサイクルと周波数によって、PWM信号が制御している対象物の動作が決まります。

image

PWM信号の デューティサイクルとは、1サイクルを完了するのにかかる合計時間に対する、信号がハイ(オン)状態にある時間の比率を指します。 通常、パーセンテージまたは比率で表されます。

image

50%のデューティサイクルは、ハイ状態が半分の時間を占め、ロー状態が残りの半分の時間を占めることを意味します。 これは理想的な方形波と同じです。 この比率が50%より大きい場合、ロジックハイ信号はロジックロー信号よりもサイクルで多くの時間を占め、その逆も同様です。

Arduino で簡単にいろいろな方法でPWMを実装することができます。 Seeeduino ボードは学習・評価に適したボードです。これは、ATmega328P MCUをベースにしたArduino 対応のボードです。

このボードには、 analogWrite() 関数でPWM波を出力できる 6つのピン(ピン 3、5、6、9、10、11)があります。 analogWrite() 関数を呼び出すと、指定されたデューティサイクルの安定した方形波をPWMピンに出力できます。 一般に、これらのピンの周波数は約490Hzであり、Seeeduino または同様のボードのピン5と6の周波数は 980Hzです。

Arduinoピンからの出力電圧は5Vであり、以下に示すように、デューティサイクル変えると出力電圧レベルもそれに対応して変わります。

デューティサイクル 出力電圧レベル
0% 0V
25% 1.25V
50% 2.5V
75% 3.75V
100% 5V

例 - LEDの明るさを調節する

例としてPWM技術を使用してArduinoでLEDの輝度を制御します。

ハードウェア接続

image

ソフトウェア

analogWrite() 関数のシンタックス:

analogWrite ( pin , value ) ;

「value」はデューティサイクルを表しており、その数値は0(オフ)から255(オン)の間です。

int ledPin = 9; // LED connected to digital pin 9

void setup() {
pinMode(ledPin, OUTPUT); // sets the pin as output
}

void loop() {
analogWrite(ledPin, 255); //set duty cycle to always on
}

出力ごとに「255」を 0〜255 の任意の数値に設定することができます。あるいはコードを変更して値を連続的に変化させることができます。




オリジナル・ソース(英語)