⚖️

Raspberry Pi Picoを使ってADC(LTC2462)からカウント値を取得する

2021/09/30に公開6

初めに

もう2021年9月も終わりですね。今月は1本も記事を書いていないことに気付いたので、雑ではありますが1本記事を書くことにしました。

今回は、Raspberry Pi Picoを使い、SPI(Serial Peripheral Interface)を経由してADC(アナログ/デジタル変換器)である「LTC2462」からカウント値を取得する方法について書いてみます。
なお、開発環境としてはMicroPythonを使用しました。

使用する部品

今回は、秋月電子通商で購入できる以下の2つの部品を使いました。
LTC2462CMSは表面実装部品なので、適宜、変換基板などを使用してください。

https://akizukidenshi.com/catalog/g/gK-16149/

https://akizukidenshi.com/catalog/g/gI-07302/

配線

主な配線は、以下の通りです。LTC2462の残りの端子は、データシートを参照して良い感じにコンデンサ、測定対象などを接続してください。なお、括弧内はピン番号です。

  • LTC2462(03) CS --- GND
  • LTC2462(04) SDI --- Raspberry Pi Pico(05) GP3
  • LTC2462(05) SCK --- Raspberry Pi Pico(04) GP2
  • LTC2462(06) SDO --- Raspberry Pi Pico(06) GP4
  • LTC2462(07) GND --- GND
  • LTC2462(12) Vcc --- Raspberry Pi Pico(36) 3V3

Pythonコード

Raspberry Pi Pico上のMicroPythonでは、machine.SPIを使うことでSPI経由で読み書きすることができます。
1秒毎にADCのカウント値を読み出すコードの例は、以下の通りです。

import machine
from machine import Pin, SPI
import utime
spi = SPI(0, baudrate=100000, polarity=0, phase=0, sck=Pin(2), mosi=Pin(3), miso=Pin(4))
buf = bytearray(2)
while True:
    spi.write(b"\x00\x00")
    utime.sleep(0.1)
    spi.readinto(buf)
    value = ((buf[0] << 8) + buf[1]) - 32768
    print(value)
    utime.sleep(1.0)

最後に

さすがに雑すぎる書きっぷりでしたね。来月(2021年10月)は、もう少し丁寧に記事を書いていきたいと思います。

Discussion

Yuya KatoYuya Kato

ダミーデータです。詳しくはチップの仕様書などをご覧ください。

BillieTatsuyaBillieTatsuya

回答ありがとうございます。どうして、16ビットADコンバータなのに、value = ((buf[0] << 8) + buf[1]) -65535ではなく、value = ((buf[0] << 8) + buf[1]) - 32768になるんですか?

BillieTatsuyaBillieTatsuya

回答ありがとうございます。(buf[0] << 8) + buf[1]) は、spi.readinto(buf)で受信したバイナリーデータの0番目の要素を8ビット左にシフト演算して、1番目の要素を加算するということですか?

Yuya KatoYuya Kato

初学者の方でしょうか?
申し訳ないですが、これ以上、質問にお付き合いすることはできません。
十分な情報を含む仕様書と動作するコードがありますので、あとはご自身で調査してみてください。