⚖️
Raspberry Pi Picoを使ってADC(LTC2462)からカウント値を取得する
初めに
もう2021年9月も終わりですね。今月は1本も記事を書いていないことに気付いたので、雑ではありますが1本記事を書くことにしました。
今回は、Raspberry Pi Picoを使い、SPI(Serial Peripheral Interface)を経由してADC(アナログ/デジタル変換器)である「LTC2462」からカウント値を取得する方法について書いてみます。
なお、開発環境としてはMicroPythonを使用しました。
使用する部品
今回は、秋月電子通商で購入できる以下の2つの部品を使いました。
LTC2462CMSは表面実装部品なので、適宜、変換基板などを使用してください。
配線
主な配線は、以下の通りです。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
b"\x00\x00"はどういう意味ですか?
ダミーデータです。詳しくはチップの仕様書などをご覧ください。
回答ありがとうございます。どうして、16ビットADコンバータなのに、value = ((buf[0] << 8) + buf[1]) -65535ではなく、value = ((buf[0] << 8) + buf[1]) - 32768になるんですか?
LTC2462は差動入力だからです。出力データのフォーマットは以下の仕様書9ページに記載があります。
逆に
value = ((buf[0] << 8) + buf[1]) - 65535
という式はどこから来たのでしょうか…?回答ありがとうございます。(buf[0] << 8) + buf[1]) は、spi.readinto(buf)で受信したバイナリーデータの0番目の要素を8ビット左にシフト演算して、1番目の要素を加算するということですか?
初学者の方でしょうか?
申し訳ないですが、これ以上、質問にお付き合いすることはできません。
十分な情報を含む仕様書と動作するコードがありますので、あとはご自身で調査してみてください。