多くの アルドゥイーノ UnoやNanoなどのボードは、異なる電圧を出力する機能がありません。 Arduinoデジタル-アナログ コンバータ (DAC) 記事。ただし、パルス幅変調 (PWM) の形式で出力を急速に循環させ、変化する出力をシミュレートすることはできます。
Arduino PWM (または任意のPWM) 信号を記述するには、次の2つの特性を使用できます。
1.周波数: 一定期間内にパルスが発生する頻度。
2.デューティ サイクル: 信号がオンになっている時間の割合。
たとえば、デューティ サイクルが50% の信号では、オン時間とオフ時間が同じ繰り返しになります。制御信号では周波数は一定に保たれる傾向があります。このテクニックの詳細については、弊社の記事「 PWMのすべて」をご覧ください。
ここでは、Arduinoボードに直接関連するPWMについて、特にATmega328Pマイクロコントローラを搭載したArduino Unoのコンテキストで説明します。幸いなことに、これらの概念はどの開発ボードにも適用できます。
画像: ジェレミー・S・クック
Arduino PWM LEDコントロール
Arduino PWM LEDを使い始めるには、Arduino IDEに組み込まれているPWMサンプル「Fade」を使用できます。上記のスクリーンショットに示されているこの例にアクセスするには、次の手順に従います。
1.IDEに移動し、「基本」の下の名前を探します。
2.サンプルをボードにロードします。
3.LEDと適切な抵抗器を直列にピン9に接続します。時間の経過とともにLEDが明るくなったり暗くなったりするのがわかります。
4.必要に応じて、出力ピン番号を(3、5、6、10、11に)変更できます。
明るさやフェードの量を変更したり、このコードをより高度なデザインのテンプレートとして使用したりすることもできます。
Arduino PWMモーター制御
DCモーターでもPWMを使用できます。この方法では同じパルス電圧の概念を使用しますが、モーターのより高い電流ニーズに対応するために モーター ドライバー/トランジスタ セットアップ が必要になります。
PWM経由でサーボを制御する場合は、Arduino環境に固執し、次のような1つ以上のサーボ オブジェクトを使用します。
- ArduinoのWebサイトに掲載されているスイープの例。
- ArduinoフレームワークでATtiny85を使用してサーボを制御します 。
Arduino PWM周波数とデューティサイクル
基本的なPWMの議論では、周波数はデューティ サイクルよりも重要視される傾向があります。そして多くの場合、ある一定のレベルを超えると、大きな違いは生じなくなります。しかし、場合によっては頻度が重要になります。たとえば、Unoの6つのハードウェアPWMピンは、3つの個別のタイマーを介して2つの異なるデフォルト周波数で動作します。これらは次のように分類されます。
- D3/D11、速度490.20Hz。
- D5/D6、速度は976.56 Hzです。
- D9/D10、速度490.20 Hz。
便利なことに、 これらの周波数の値をコード内でセットとして変更 できます。次に例を示します: TCCR2B = TCCR2B & B11111000 | B00000001 は、D3/D11の周波数を31,372.55Hzにします。TCCR0B = TCCR0B & B11111000 | B00000001 とすると、D5/D6をさらに高く設定でき、速度は62500.00 Hzになります。必要に応じて、すべてのPWMピンで100 Hz未満のレベルまでの値が使用できます。
モーター、ライト、または他のアプリケーションの制御に使用する場合でも、Arduino PWMは便利なツールです。この技術を使用すると、デバイスの電源のオン/オフだけでなく、最小限のハードウェアでより微妙な出力をシミュレートすることもできます。