プログラマブル・ゲイン・アンプMCP6S22
最近のA-Dコンバータには内部にプログラマブル・ゲイン・アンプPGAが入っていることが多いです。ここでは、単独で使える8ピンのDIP形状のPGA MCP6S22を使って機能を確かめます。秋月電子通商で入手しました。ゲインの設定はSPIインターフェースを通して行います。
●MCP6S22のおもなスペック
- 入力電圧範囲 シングルエンド0~Vdd
- 動作電圧 2.5~5.5V
- 入力チャネル数 2
- ゲイン x1、x2、x4、x5、x8、x10、x16、x32
- 帯域 2~12MHz
- SPI転送速度 最大10MHz
●接続
Arduino UNOは5V動作です。次のようにMCP6S22と接続します。
MCP6S22 | Arduino UNO |
---|---|
1 出力 | - |
2 入力1 | - |
3 入力2 | - |
4 Vss | GND |
5 /CS | 10 SS |
6 SI | 11 MOSI |
7 SCK | 13 SCK |
8 Vdd | +5V |
●スケッチ
それぞれ、8ビット長のINSTRUCTION REGISTER、GAIN REGISTER、CHANNEL REGISTERの各レジスタが三つあります。次のように、2バイトの命令を送ると、設定ができます。
- ゲイン INSTRUCTION REGISTER+GAIN REGISTER
- 入力チャネル INSTRUCTION REGISTER+CHANNEL REGISTER
ゲインを設定するとき、INSTRUCTION REGISTERは0b01000000、GAIN REGISTERは、次の値を設定します。
- 0b00000000 = 1 (Default)
- 0b00000001 = 2倍
- 0b00000010 = 4倍
- 0b00000011 = 5倍
- 0b00000100 = 8倍
- 0b00000101 = 10倍
- 0b00000110 = 16倍
- 0b00000111 = 32倍
入力チャネルを設定するとき、INSTRUCTION REGISTERは0b01000001、CHANNEL REGISTERは、次の値を設定します。
- 0b00000000 = チャネル1 (Default)
- 0b00000001 = チャネル2
波形を見るためにloop()にSPIの実行部を記述していますが、本来ならsetup()で一度実行すればよいです。
#include <SPI.h> #define SS 10 SPISettings settings(1000000,MSBFIRST,SPI_MODE0); void setup() { pinMode(SS, OUTPUT); Serial.begin(9600); SPI.begin(); } void loop() { SPI.beginTransaction(settings); digitalWrite(SS, LOW); SPI.transfer(0b01000000); // INSTRUCTION REGISTER SPI.transfer(0b00000010); // GAIN REGISTER digitalWrite(SS, HIGH); SPI.endTransaction(); }
オシロスコープは、PicoScopeの5242Bを利用します。SCK(クロック)とSI(MOSI)の信号です。MCP6S22はmode0とmode2をサポートしています。
ICの入力1端子に発振器(1kHz、1V0-p)の信号を入れてch1のプローブで観測し、出力をch2のプローブで見ています。
設定どおり4倍になっています。
●小信号で周波数を上げる
1kHz、10倍に増幅します。
100kHzに周波数を上げます。
1MHzに上げます。立ち上がりが相当なまってきました。
いままでは200mVの入力信号でした。1/10の20mVにします。
逆に大きな入力レベル、1V0-pにします。今度は、立ち下がりの特性も悪くなりました。
●32倍
センサ類の値の変化は緩やかです。10Hzの100mV0-pを、最大増幅率の32倍に拡大しました。オフセットが目立ち、0Vであるべきところで288mVの電圧が出ています。ピーク・ツー・ピークは3.198Vなので、32倍に増幅されていることがわかります。
●レール・ツー・レール
入力1V0-p、ゲインを5倍にしました。
このデバイスの特徴はレール・ツー・レールです。0V付近はわずかにオフセットがありますが、ほぼ0Vです。しかし、Vddは5Vですが、4.75Vと到達できていません。