Arduino-pulse-width-modulation

提供:Dev Guides
移動先:案内検索

Arduino-パルス幅変調

パルス幅変調またはPWMは、パルス列のパルスの幅を変更するために使用される一般的な手法です。 PWMには、サーボや速度コントローラーの制御、モーターやLEDの有効電力の制限など、多くのアプリケーションがあります。

PWMの基本原理

パルス幅変調は、基本的に、さまざまな高低の時間を持つ方形波です。 基本的なPWM信号を次の図に示します。

PWM

PWMに関連するさまざまな用語があります-

  • オンタイム-時間信号の持続時間が長い。
  • オフ時間-時間信号の持続時間が短い。
  • 期間-PWM信号のオン時間とオフ時間の合計として表されます。
  • デューティサイクル-PWM信号の期間中にオンのままになる時間信号の割合として表されます。

期間

図に示すように、T〜on〜はオン時間を示し、T〜off〜は信号のオフ時間を示します。 期間はオンとオフの両方の時間の合計であり、次の式に示すように計算されます-

デューティサイクル

デューティサイクルは、期間のオンタイムとして計算されます。 上記で計算された期間を使用して、デューティサイクルは次のように計算されます-

analogWrite()関数

  • analogWrite()*関数は、アナログ値(PWM波)をピンに書き込みます。 さまざまな明るさでLEDを点灯したり、さまざまな速度でモーターを駆動したりするために使用できます。 analogWrite()関数の呼び出し後、ピンは、同じピンで次にanalogWrite()を呼び出すか、digitalRead()またはdigitalWrite()を呼び出すまで、指定されたデューティサイクルの安定した方形波を生成します。 ほとんどのピンのPWM信号の周波数は約490 Hzです。 Unoおよび同様のボードでは、ピン5と6の周波数は約980 Hzです。 Leonardoのピン3と11も980 Hzで動作します。

ほとんどのArduinoボード(ATmega168またはATmega328を搭載)では、この機能はピン3、5、6、9、10、11で動作します。 Arduino Megaでは、ピン2-13および44-46で動作します。 ATmega8を搭載した古いArduinoボードは、ピン9、10、11で* analogWrite()*のみをサポートします。

UNO PWMピン

Arduino Dueは、ピン2〜13、およびピンDAC0とDAC1で* analogWrite()*をサポートします。 PWMピンとは異なり、DAC0およびDAC1はデジタルアナログコンバーターであり、真のアナログ出力として機能します。

analogWrite()を呼び出す前に、pinMode()を呼び出してピンを出力として設定する必要はありません。

analogWrite()関数の構文

analogWrite ( pin , value ) ;

-デューティサイクル:0(常にオフ)〜255(常にオン)の間。

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
}