アナログデジタルコンバータ LTC2450の使い方

LTC2450 アナログデジタル変換 プログラミング

アナログデジタルコンバータLTC2450を使ってアナログからデジタルに変換したデータを読み取る方法を紹介します。

使用するマイコンはRaspberry Pi、プログラム言語はPythonです。

主な仕様
入力数:1チャンネル
分解能:16ビット
変換方式:ΔΣ方式
電源:単一電源
入力:シングルエンド
通信:SPI通信

外付け部品が不要であることや内部較正アルゴリズムで、オフセットやフルスケールが動作温度範囲に対して高精度に保証されています。

準備

LTC2450の購入

LTC2450は6端子のDFNと呼ばれる形状です。
センサーを手ではんだ付けするのは不可能なのでモジュールの購入になると思います。

写真は秋月電子通商で購入したLTC2450モジュールです。今回は、このモジュールを使ったサンプルプログラムを紹介します。

LTC2450モジュールの写真

モジュールとRaspberry Piの接続

ブレッドボードの接続図と、ADのカウント値の例です。

接続図

ブレッドボードを使用したLCT2450モジュールとRaspberryPiの接続

接続写真

ブレッドボードを使用したLTC2450の接続写真 1
ブレッドボードを使用したLTC2450の接続写真 2

アナログ信号の接続例

LTC2450はレール・トゥ・レール入力です。リファレンス電圧は電源電圧です。
レール・トゥ・レール入力なので、GNDレベル~電源までの入力に対してデジタル変換が可能です。(『オフセット誤差とフルスケール誤差を無視すれば、理論的に入力0Vの時にオールゼロ、電源電圧の時にオール1の結果を出力する』の記述があります。)

入力を下の回路図の様に接続して、ADの出力データを確認することができます。

①ADの出力 約 0 (VINをGNDに接続)
②ADの出力 約 65535 (VINをVccに接続)
③ADの出力 約 32768 (VINをVcc/2に接続)

※LTC2450の入力抵抗は15kΩです。誤差が大きくなる可能性が有るので、接続する回路の出力抵抗には注意してください。

①ADの出力データ 約 0

入力をGNDへ接続-AD出力 0 count-

②ADの出力データ 約 65535

入力をVccへ接続-AD出力 65535 count-

③ADの出力データ 約 32768

入力をVcc/2へ接続-AD出力 32768 count-


Raspberry Piの3.3V電源は50mAの電流を流せるようなので、
3.3V / 50mA = 66Ω
おおまかには、66Ω以上であれば電源が落ちることはないと思います。

仮にR = 1kΩとすると、
(1kΩ+15kΩ) / (1kΩ×15kΩ) = 937.5Ω
1kΩ+937.5Ωなので、電流は問題なく流せます。
ADの出力データの誤差は、
937.5Ω/(1kΩ+937.5Ω)* 65536 = 31710
R = 1kΩのとき、約 31710 です。

Raspberry Piの通信設定とPythonの操作方法

Raspberry PiのSPI通信設定を有効にします。
下の記事でRaspberry Piの通信設定と、Pythonの基本操作を説明しています。

SPI通信プログラミング

プログラムコード

Pythonプログラムです。

import spidev
import time

#SPI設定
spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 10000
spi.mode = 3

dat = [0x00, 0x00]

#繰り返し
while True:
    
    #読み込み
    ret = spi.xfer2(dat)
    
    #データ変換
    ad_count = (dat[0] << 8) & 0xFF00 | (dat[1] & 0x00FF)
    
    #表示
    print('A/D count: ' + str(ad_count))
    
    #一時停止
    time.sleep(0.1)
    
spi.close()

LTC2450は特別な設定をしなくても下記サイクルを繰り返します。

・電源投入後から自動的にAD変換 → スリープ
・要求があったときにデータの出力 → AD変換 → スリープ

マイコンからAD変換の命令が無くても自動的にAD変換をしてスリープ状態になります。

プログラムの説明

プログラムの流れです。

  1. SPI通信の設定
  2. LTC2450からデータを取得
  3. 取得したデータをShellに表示
  4. 2.~3.を繰り返します

1.SPI通信の初期設定

#SPI設定
spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 10000
spi.mode = 3

spi.open(0,0)
Bus0をチップセレクト0でオープンします。

spi.max_speed_hz = 100000
クロックのスピードを10kHzにします。

spi.mode = 3
SPI通信のハードウェア設定です。(mode 3は負論理の立下りエッジ検出)

SPI通信の詳しい説明はこちら
シリアル・ペリフェラル・インタフェース」(2021年10月21日 (木) 02:31 UTCの版)『ウィキペディア日本語版』

2.LTC2450からデータを取得

#読み込み
ret = spi.xfer2(dat)

ret = spi.xfer2(dat)
ADのカウント値を読み込みます。16bitデータです。

#データ変換
ad_count = (dat[0] << 8) & 0xFF00 | (dat[1] & 0x00FF)

ad_count = (dat[0] << 8) & 0xFF00 | (dat[1] & 0x00FF)
8bitの入れ物2つにデータが入っているので、16bitにします。

16bitデータ

3.取得したデータを画面に表示

#表示
print('A/D count: ' + str(ad_count))

#一時停止
time.sleep(0.1)

print(‘ad: ‘ + str(count))
ADのカウント値を画面に表示します。

time.sleep(0.1)
カッコ内の秒数の0.1秒間一時停止します。

4.2.~3.を繰り返します

#繰り返し
while True:

while True:
Stopボタンが押されるまで繰り返します。

※この『while True:』は、13行目のwhile文です。

spi.close()

spi.close()
SPI通信終了します。
ただし、プログラムはSTOPボタンで終了するので、spi.close()は実行されません。

プログラムの実行結果

プログラムを実行します。

①Runボタンを押します。
②ADのカウント値を0.1秒間隔で画面に表示します。
③Stopボタンを押すとプログラムは終了です。

PythonのRunボタンとStopボタン
LTC2450のプログラムの実行結果

以上、アナログデジタル変コンバータ LTC2450を使用してADのカウント値を画面に表示するサンプルでした。

LTC2450を使ってアナログ加速度センサーで測定した記事です。

まとめ

LTC2450からデジタル変換したデータを受け取るサンプルプログラムの解説をしました。如何でしたでしょうか。

アナログデジタルコンバータが使えると、いろいろな機会で活躍できると思います。
アナログ出力センサーも使えるようになりますので、今まで出来なかったことが出来るようになれば幸いです。

プログラミングやソフトウェアの記事です。

コメント