CircuitPython 10行プログラミング Step5 (4) Raspberry Pi Picoのアナログ入力
RP2040 Datasheetによれば、Picoのアナログ入力は5本あります。1本はチップにある温度センサに直接つながっています。前回のmicrocontroller.cpu.temperatureで読み出せますが、アナログ入力モジュールのコマンドではポートを指定できません。
アナログ入力はディジタル入力でも使えるので、Picoボードのシルク印刷では、
- GP26_A0
- GP27_A1
- GP28_A2
と表示されています。GPIO29(A3)はピンに出ていません。VSYS/3を測定するので、内部で直接つながっているようです。VSYSは電源端子で、1.8~5.5Vが使えます。
●基準電圧を知る
A-Dコンバータは、シングルエンド入力の場合、0V~Vrefの間の電圧をディジタルに変換します。基準電圧Vrefは、次のように表示できます。
3.3Vでした。
●電源端子VSYSの電圧を知る
GPIO29(A3)は指定できるので測ってみました。
5.27Vの表示です。DMMで測ると5.24Vでした。USBコネクタからのVBUS電圧です。
●A0、A1、A2の入力を試す
A1に基準電源の1.0000Vを入力しました。測定結果は1.017Vでした。
A2端子をGNDにつないで実行しました。測定結果は0.015V前後でした。
A2端子を3.3Vにつないで実行しました。測定結果は3.299V前後でした。
●誤差
12ビットA-Dコンバータの最小ビット 1 LSBの電圧は、
3.3 / 2^12 = 0.000805V
です。
被測定電圧源[V] | 実行結果[V] | 差[V] | 差[LSB] |
---|---|---|---|
3.3 | 3.299 | 0.001 | 1 |
2.49 | 2.517 | 0.027 | 33 |
1.0000 | 1.017 | 0.017 | 21 |
0.5000 | 0.516 | 0.016 | 20 |
0.0 | 0.015 | 0.015 | 19 |
ENOBは9ビットなのでも、もともと12ビットの確度はありません。測定が1回しか行っていないので厳密ではありませんが、誤差、特に直線性が悪いように感じます。逆に言えば、ラフに配線して利用しても8ビットの確度程度の変換はできるということになります。
●Vref端子
外部基準電圧源の入力がADC_Vref端子です。そこへTL431の出力2.49Vをつないで、A1入力端子に1.0000Vをつないで実行しました。
1.0Vにはなりませんでした。CircuitPython ではサポートされていないのかもしれません。
(※)PicoにはD-Aコンバータは含まれていないので、アナログ出力はありません。