NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

Arduino IDE(analogWriteResolution関数の使い方)

■analogWriteResolution関数
 analogWriteResolution関数は、Arduino Due、Genuino、Arduino Zero、MKR1000用のアナログAPIの拡張で、analogWrite関数の解像度を設定します。
 AVRベースのボードとの下位互換性を持たせる為、デフォルトは8ビット(0〜255の値)です。

■使用例
 ArduinoIDEで使用するanalogWriteResolution関数の使い方は以下の通りです。
 試しにこのプログラムをGenuino101で実行すると、A0の入力を読み取り、それをanalogReadResolution関数によって8,12,4ビットとにマッピングしたPWM信号を11,12,13ピンから出力します
 またマッピングしたPWM出力値をシリアルモニター上に一定間隔で表示します。

void setup() {
   // シリアル接続を開く
   Serial.begin(9600);
   // デジタルピンを出力にする
   pinMode(11, OUTPUT);
   pinMode(12, OUTPUT);
   pinMode(13, OUTPUT);
}

void loop() {
   // A0の入力を読み取り、それをPWMピンにマッピングします
   // LED付き
   int sensorVal = analogRead(A0);
   Serial.print("Analog Read) : ");
   Serial.print(sensorVal);

   // デフォルトのPWM分解能8ビット
   analogWriteResolution(8);
   analogWrite(11, map(sensorVal, 0, 1023, 0 , 255));
   Serial.print(" , 8-bit PWM value : ");
   Serial.print(map(sensorVal, 0, 1023, 0 , 255));

   // PWM分解能を12ビットに変更する
   // 完全な12ビット分解能はサポートされていません
   // Due
   analogWriteResolution(12);
   analogWrite(12, map(sensorVal, 0, 1023, 0, 4095));
   Serial.print(" , 12-bit PWM value : ");
   Serial.print(map(sensorVal, 0, 1023, 0, 4095));

   // PWM分解能を4ビットに変更する
   analogWriteResolution(4);
   analogWrite(13, map(sensorVal, 0, 1023, 0, 15));
   Serial.print(", 4-bit PWM value : ");
   Serial.println(map(sensorVal, 0, 1023, 0, 15));

   delay(5);
}
イメージ 1
図1:プログラム例

■構文
 analogWriteResolution(bits)

■パラメータ
 bits:analogWrite関数で使用される値の解像度(ビット単位)を指定します。
   値の範囲は1〜32です。
   ボードのハードウェア機能よりも高いまたは低い解像度を選択した場合、
   analogWrite関数で使用される値が高すぎる場合は切り捨てられ、
   低すぎる場合はゼロで埋められます。

■戻り値
 有りません

■補足
 analogWriteResolution関数の値をボードの能力よりも高い値に設定すると、ボードは余分なビットを破棄します。
 たとえば、12ビットDACピンでdue with analogWriteResolution(16)を使用すると、analogWrite関数に渡される値の最初の12ビットのみが使用され、最後の4ビットは破棄されます。

 analogWriteResolution関数の値をボードの能力よりも低い値に設定すると、不足しているビットにはハードウェアに必要なサイズを満たすためにパディング※1されます。
 たとえば、12ビットのDACピンでdue with analogWriteResolution(8)を使用すると、ArduinoはanalogWrite関数で使用される8ビット値に4ビットを追加して、必要な12ビットを取得します。
※1:パディングとは、指定した桁数に満たない部分をゼロで埋める事

〇「Due」ハードウェア性能
 AVRベースのボードと互換性を保つ様に、12ピンのデフォルトは8ビットPWMですが、これを12ビット分解能に変更する事が出来ます。
 2ピン、12ビットDAC(デジタル・アナログ変換器)書き込み解像度を12に設定すると、0〜4095の値を持つanalogWrite関数を使用した完全なDAC分解能を活用したり、ロールオーバーせずにPWM信号を設定することができます。

〇「Zero」ハードウェア性能
 AVRベースのボードのように、10ピンのデフォルトは8ビットPWMですが、これを12ビット分解能に変更することができます。
 1ピン、10ビットDAC書き込み解像度を10に設定すると、0〜1023の値を持つanalogWrite関数を使用した完全なDAC解像度を利用できます。

〇「MKR1000」ハードウェア性能
 AVRベースのボードのように、4ピンのデフォルトは8ビットPWMですが、これを12ビット分解能に変更する事が出来ます。
 1ピン、10ビットDAC書き込み解像度を12に設定すると、0〜4095の値を持つanalogWrite関数を使用した完全なDAC解像度を利用できます

イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【ArduinoIDE reference】目次に戻る