Arduino-パルス幅変調
パルス幅変調またはPWMは、パルス列のパルス幅を変化させるために使用される一般的な手法です。PWMには、サーボや速度コントローラーの制御、モーターやLEDの有効電力の制限などの多くのアプリケーションがあります。
PWMの基本原理
パルス幅変調は、基本的に、高時間と低時間が変化する方形波です。次の図に、基本的なPWM信号を示します。
PWMに関連するさまざまな用語があります-
On-Time −時報の持続時間が長い。
Off-Time −時報の持続時間が短い。
Period −PWM信号のオン時間とオフ時間の合計として表されます。
Duty Cycle −PWM信号の期間中にオンのままである時間信号のパーセンテージとして表されます。
限目
同図に示すように、Tで表すオン時間とTのオフ信号のオフ時間を示します。周期はオン時間とオフ時間の合計であり、次の式に示すように計算されます。
$$ T_ {合計} = T_ {on} + T_ {off} $$デューティサイクル
デューティサイクルは、期間のオンタイムとして計算されます。上で計算された期間を使用して、デューティサイクルは次のように計算されます-
$$ D = \ frac {T_ {on}} {T_ {on} + T_ {off}} = \ frac {T_ {on}} {T_ {total}} $$AnalogWrite()関数
ザ・ analogWrite()関数は、アナログ値(PWM波)をピンに書き込みます。さまざまな明るさでLEDを点灯したり、さまざまな速度でモーターを駆動したりするために使用できます。AnalogWrite()関数の呼び出し後、ピンは、同じピンでの次のanalogWrite()の呼び出し、またはdigitalRead()またはdigitalWrite()の呼び出しまで、指定されたデューティサイクルの定常方形波を生成します。ほとんどのピンのPWM信号の周波数は約490Hzです。Unoおよび同様のボードでは、ピン5と6の周波数は約980Hzです。Leonardoのピン3と11も980Hzで動作します。
ほとんどのArduinoボード(ATmega168またはATmega328を搭載したボード)では、この機能はピン3、5、6、9、10、および11で機能します。ArduinoMegaでは、ピン2〜13および44〜46で機能します。古いArduino ATmega8のみをサポートするボード analogWrite() ピン9、10、および11。
ArduinoDueはサポートします analogWrite()ピン2から13、およびピンDAC0とDAC1。PWMピンとは異なり、DAC0とDAC1はデジタル-アナログコンバーターであり、真のアナログ出力として機能します。
AnalogWrite()を呼び出す前に、pinMode()を呼び出してピンを出力として設定する必要はありません。
AnalogWrite()関数の構文
analogWrite ( pin , value ) ;
value −デューティサイクル:0(常にオフ)から255(常にオン)の間。
Example
int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value
void setup() {
pinMode(ledPin, OUTPUT); // sets the pin as output
}
void loop() {
val = analogRead(analogPin); // read the input pin
analogWrite(ledPin, (val / 4)); // analogRead values go from 0 to 1023,
// analogWrite values from 0 to 255
}