TOPに戻る

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コンバータは含まれていないので、アナログ出力はありません。

(※)Raspberry Pi PicoADCの特性評価

連載 CircuitPython 10行プログラミング Step5

(1) Raspberry Pi Picoの準備と動作確認

(2) Raspberry Pi Picoのdigitalio

(3) Raspberry Pi Picoのmicrocontroller

(4) Raspberry Pi Picoのアナログ入力

(5) Raspberry Pi PicoのPWM出力

(6) Raspberry Pi PicoのI2S出力

(7) Raspberry Pi PicoのI2C ① OLEDディスプレイ

(8) Raspberry Pi PicoのI2C ② 温湿度センサ

(9) Raspberry Pi PicoのI2C ③ 気圧センサ

(10) Raspberry Pi PicoのSPI ① TFTディスプレイ


連載 CircuitPython 10行プログラミング Step4

(1) Adafruit Feather nRF52840 Senseの準備 (2) Lチカ (3) 搭載センサ (4) BLE①ペリフェラル (5) BLE②セントラル


連載 CircuitPython 10行プログラミング Step3

(1) Metro M4 Express AirLift (WiFi)の準備 (2) ロータリ・エンコーダ (3) eInk/ePaper (4) Wi-Fi その1 接続 (5) Wi-Fi その2 ソケット (6) Wi-Fi その3 電圧測定 (7) 気圧センサLPS25HB (8) サーミスタ


連載 CircuitPython 10行プログラミング Step2

(1) Grand Central M4 Expressの準備 (2) グラフィック・ディスプレイOLED (3) RTC DS3231 (4) モジュール/SDメモリ (5) 複合センサ BME680 (6) ロードセル+ADS1220 (7) サーボ・モータ① (8) サーボ・モータ② (9) I2S UDA1334A (10) D-Aコンバータ


連載 CircuitPython 10行プログラミング

(1) Trinket M0の準備 (2) ディジタルI/O (3) アナログ入出力 (4) I2C 温湿度センサSi7021 (5) SPI 熱電対+MAX31855 (6) UART 距離センサTFMini (7) 1-Wire 温度DS18B20 (8) ロータリ・エンコーダ (9) 7セグメントLED (10) FANコントロール (11) UART GPS (12) I2C Lチカ MCP23017