gpiozeroライブラリ入門⑯import MCP3301/MCP3302/MCP3304
使用環境
|
gpiozeroパッケージの基底クラスSPI( Serial Peripheral Interface )Devicesは、A-Dコンバータのクラスがたくさん用意されています。いずれもマイクロチップのA-Dコンバータで、10ビット、12ビットおよび13ビット用です。同社のA-Dコンバータは22ビット以上も発表されていますが、下の表の品種が入手しやすいようです。
MCP3xxxはマイクロチップのA-Dコンバータ・シリーズです。内部に基準電圧源を搭載していないモデルは、通常、電源電圧を利用します。端子に基準電源Vrefがあるモデルでは、安定な基準電圧ICの出力をつなぎます。
型番 | ビット数 | チャネル数 | 基準電圧源[V] | 変換速度[sps] | インターフェース |
---|---|---|---|---|---|
MCP3001 | 10 | 差動1 | - | 200k | SPI |
MCP3002 | 10 | 2もしくは差動1 | - | 200k | SPI |
MCP3004 | 10 | 4 | - | 200k | SPI |
MCP3008 | 10 | 8 | - | 200k | SPI |
MCP3021 | 10 | 1 | - | 22.3k | I2C |
MCP3201 | 12 | 差動1 | - | 100k | SPI |
MCP3202 | 12 | 2 | - | 100k | SPI |
MCP3204 | 12 | 4 | - | 100k | SPI |
MCP3208 | 12 | 8 | - | 100k | SPI |
MCP3221 | 12 | 1 | - | 22.3k | I2C |
MCP3301 | 13 | 差動1 | - | 100k | SPI |
MCP3302 | 13 | 差動2 | - | 100k | SPI |
MCP3304 | 13 | 差動4 | - | 100k | SPI |
MCP3421 | 18 | 差動1 | 2.048 | 3.75 | I2C |
MCP3422 | 18 | 差動2 | 2.048 | 3.75 | I2C |
MCP3423 | 18 | 差動2 | 2.048 | 3.75 | I2C |
MCP3424 | 18 | 差動4 | 2.048 | 3.75 | I2C |
MCP3425 | 16 | 差動1 | 2.048 | 15 | I2C |
MCP3426 | 16 | 2 | 2.048 | 15 | I2C |
MCP3427 | 16 | 2 | 2.048 | 15 | I2C |
MCP3428 | 16 | 4 | 2.048 | 15 | I2C |
MCP3550 | 22 | 差動1 | - | 12.5/15 | SPI |
MCP3551 | 22 | 差動1 | - | 13.75 | SPI |
MCP3553 | 22 | 差動1 | - | 60 | SPI |
●13ビットA-Dコンバータ
A-Dコンバータはアナログの値をディジタルに変換します。MCP33xxシリーズは差動入力ができるので、分解能は次の式で得られます。
2 * Vref / 8192 = Vref /4096 = 基準電圧 / 2^12
例えば、基準電圧が3.3Vであれば、
3.3[V] / 2^12 = 0.00080566406[V]
が1LSB=一番細かな最小単位です。0.80566406mV以内のアナログ値は見分けられません。これを量子化誤差と呼びます。ビット数が増えるほど量子化誤差の絶対値は小さくなります。
MCP31xx/MCP32xxシリーズでは疑似差動入力だったので、マイナスの電圧は扱えませんでした。MCP33xxシリーズの差動は、基準電圧が3.3Vのとき、-3.3~+3.3Vの入力電圧が扱えます。
ここで取り上げるMCP3301/3302/3304は、入力チャネル数が異なります。内部にA-D変換するユニットは一つですが、入力に切り替えスイッチで複数のチャネルを同時に扱えるように構成されています。
データシート MCP3301 MCP3202/3204
●ピン配置
ピン配置やピンの名称などシリーズの統一性はありません。SPIインターフェースの読み書きにも統一性はありません(写真はMCP31xxを加工して使用。ピン配置と名称はまったく同じ)。
●MCP3301
class gpiozero.MCP3301(max_voltage=3.3, **spi_args)MCP3301は、 チャネルは一つの12ビット・アナログ-ディジタル・コンバータ。MCP3301は常に差動モードで動作し、IN-に対するIN+の値を測定する。
|
(図の写真はMCP31xxを加工して流用しています)
実行例です。電圧源は電池を使ったTL431の約2.5Vです。
◆IN+プラス入力、IN-マイナス入力
◆IN+マイナス入力、IN-プラス入力
●MCP3302
class gpiozero.MCP3302(channel=0, differential=False, max_voltage=3.3, **spi_args)MCP3302は、 4チャネル・シングルエンド/2チャネル差動、12ビット・アナログ-ディジタル・コンバータ。
|
(図の写真はMCP31xxを加工して流用しています)
実行例は省略します。
●MCP3304
class gpiozero.MCP3304(channel=0, differential=False, max_voltage=3.3, **spi_args)MCP3304は、 8チャネル・シングルエンド/4チャネル差動、12ビット・アナログ-ディジタル・コンバータ。
|
(図の写真はMCP31xxを加工して流用しています)
実行例です。電圧源は電池を使ったTL431の約2.5Vです。
◆ch0-プラス入力、ch1-マイナス入力 adc = MCP3304(channel=0, differential=True)
◆ch0-マイナス入力、ch1-プラス入力 adc = MCP3304(channel=0, differential=True)
◆ch0-プラス入力、ch1-マイナス入力 adc = MCP3304(channel=1, differential=True)
◆ch0-マイナス入力、ch1-プラス入力 adc = MCP3304(channel=1, differential=True)
●基準電圧
Vref端子にA-D変換のかなめとなる基準電圧を入力します。基準電圧は0.25V~Vddの範囲です。このとき、A-Dコンバータの入力電圧は、0V~基準電圧の範囲になります。
電源電圧Vddを5.0Vとすれば、Doutなどの出力端子のHIGHレベルVohは4.0V以上になるため、ラズパイのGPIO入力電圧の上限を超えます。Vdd=3.3Vのときのスペックがデータシートにないのですが、0.7Vddとすれば、2.31Vです。ラズパイの入力端子のHIGHレベルを満足しています。
(※)インターネットを検索すると、ラズパイのHIGHレベルVohは1.34~3.30V、LOWレベルVolは0~1.19Vが多いようです。これはラズパイ4に当てはまるかは不明です。
電源電圧を3.30Vとした場合、Vrefは3.30V以下を選ぶことになりますが、データシートから、2.5V以上ないと、有効ビットENOB、利得誤差、オフセット誤差が大きく劣化し、1V以下だと積分非直線性 (INL)も劣化します。したがって、2.5~3.30Vを選択します。