SpresenseでLチカから始める (2) アナログ・ポート

 Arduino UNOのアナログ・ポートは、一般的なマイコンと同様にA-D変換器とマルチプレクサで構成されていて、複数の入力を切り替えて使います。A-D変換をする場所は1か所です。A-D変換をするには時間がかかるので、その間入力電圧が変化すると正しいディジタル値が得られません。そこで一時的に電圧を保持するためにサンプル・アント・ホールド(S&H)回路が取り付けられています。Arduino UNOで使われているATMega328のS&H回路は簡易的で、入力側が電流が流せない(吸い込む)と、ほかのチャネルに影響が出ます

Spresenseのアナログ・ポートはArduino UNOとは仕様が異なる

 Arduino UNOのA0からA5はアナログ入力用ですが、普通にディジタル入出力にも使えます。SpresenseのA0からA5はアナログ入力専用です。外部基準電圧入力であるAREF端子は有効ではありません。Vref端子はジャンパ(JP1)ピンで設定された電圧が出ています。

 ESP8266を搭載した多くのマイコン・ボードでは、デバイスのアナログの最大入力が1Vのため、3.3V入力で利用できるように抵抗で分圧しています。Spresenseも同様で、デバイスの入力電圧範囲は0~0.7V(公称)ですが、それを0~5Vで使えるようにしています。使われている抵抗値は62k(27k)と10kΩと比較的低い?ので、入力につながるセンサ類の出力インピーダンスは低いことが望まれます。分圧比の異なる回路があり、62k-10kの回路は入力0~0.7V用、27k-10kの回路のA-Dコンバータの入力電圧範囲は0~1.4Vと推測されます。

 AREF端子が無効なので、内部にある基準電圧だけが使われると思われます。

アナログ入力の実験

 次のようにアナログ入力端子を別の端子にジャンパで接続し、アナログ入力値を表示するスケッチを動かします。

  • A0 5V
  • A1 3.3V
  • A2 GND

 サンプルのReadAnalogVoltageを読み込み、A1とA2端子の入力を追加します。

void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
int sensorValue1 = analogRead(A1);
int sensorValue2 = analogRead(A2);
// Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
float voltage = sensorValue * (5.0 / 1023.0);
float voltage1 = sensorValue1 * (5.0 / 1023.0);
float voltage2 = sensorValue2 * (5.0 / 1023.0);
// print out the value you read:
Serial.print(voltage);Serial.print(" ");Serial.print(voltage1);Serial.print(" ");Serial.println(voltage2);
}

 ほぼ正しい電圧が測れているようにみえます。DMMで実測すると、5V端子は4.83V 3.3V端子は3.29V、GNDは0Vでした。 10ビットA-Dコンバータの1 LSBは1/2^10=0.00488Vです。GNDの電圧がその10ビット分あるというのはおかしいです。5Vも低すぎるように思えます。

 Arduino UNOでおなじくDMMで実測すると、5V端子は4.94V 3.3V端子は3.28V、GNDは0Vでした。上記のスケッチのリファレンス値には4.94Vを入れ実行しました。 表示値は4.94V、3.27V、0Vです。

 したがって、筆者のハードウェアと最初のリリース・バージョンのソフトウェアでは、アナログ入力はなにかしらのトラブルを抱えているかもしれません。

 次に、5VへつないでいるA1端子を抜いたり、GNDにつなぎ変えたりしましたが、3.3Vの電圧に変化はありませんでした。簡易的な実験ですが、S&H回路はしっかりと働いているようです。

前へ

SpresenseでLチカから始める (1) Lチカは簡単か

次へ

SpresenseでLチカから始める (3) Wireライブラリ A-DコンバータMCP3421