Arduino UNO R4 MinimaでanalogRead()でサーミスタの値を読むとどうも小さめの値が出る(サーミスタの自己発熱とはまた別の問題)。これはADコンバータの内部抵抗が低いんじゃなかろうか?
ということで、実験。まずは比較としてArduino UNO R3(互換機)で。
+5Vを10kΩ経由でA1につないだだけ。上の回路図のサーミスタの値が無限大の状態。この場合はanalogRead(A1)ではフルビットが立った1023が読めるはず。
期待通りに1023が得られた。
では、本題のArduino UNO R4 Minima。
やはり、残念ながら1023にならない。ふらついているのも気になるが、まぁ、963前後。これからArduino UNO R4 MinimaのADコンバータの内部抵抗を計算すると160kΩ位。
\( 1023 : 963 = (10 + x) : x \\ 963 \times (10 + x) = 1023x \\ 1023x – 963x = 9630 \\ x = \frac{9630}{60} \\ x = 160.5 \)
試しにADコンバータの分解能を14ビットに上げてみた。
15400位(値のふらつきはさらに大きくなった)で、この値で同じように計算すると内部抵抗は140kΩくらい。このくらいだと被測定物のインピーダンスが高めだと誤差が大きくなってしまうし、場合によっては被測定物の動作にも影響を与えそう。
念のため+5VをA1に直結してみたらちゃんと16383になった。これが16383にならないとまずすぎるけど。
Arduino UNO R4 MinimaでanalogRead()を使う際は、内部抵抗の低さと測定値のふらつきが大きめなのは頭に入れておく必要があるな。
【追記】
Arduino UNO R3に使われているマイコンATmega328PのデータシートにはAnalog Input ResistanceはTyp. 100MΩとあった。これくらい大きければ被測定物に与える影響は小さいだろう。
一方、Arduino Uno R4 MinimaのマイコンRA4M1にはAnalog input resistanceはMax 2.5kΩ(High-precision channel)・6.7kΩ(Normal-precision channel)だそうだ。
上の実験で逆算的に求めた値とだいぶ違うのが気になるけど、ともかく小さい値であることは間違いなさそう。
トランジスタ技術2024年1月号にArduino UNO R4 Minimaの記事を書いた際に、この入力インピーダンスが低いことについてふれておいた。
【追記】他の方の調査記事。
コメント