別件シリーズでプログラマブル・ゲイン・アンプ(PGA)が欲しかったので入手。Microchip社製品であります。3.3V単電源で動作するレイルツーレールのオペアンプです。ホストのマイコンとの接続はSPI。これにてx1倍からx32倍まで8段階のゲインで増幅可能です。マイコンのアナログ入出力の御供に最適?
※「部品屋根性」投稿順Indexはこちら
MCP6S21 プログラマブル・ゲイン・アンプ
マイクロチップ社の製品ページが以下に
MCP6S21 Single-Ended, Rail-to-Rail I/O, Low Gain PGA
“Low Gain”と控えめであります。接続例のアプリケーションノートなども完備されとりますが、マイコン大手のマイクロチップ社だけに、自社のPICマイコンがホストであります。
SPIでの制御
今回はマイクロチップ社製品ということでまずPICマイコンで制御してみます。ホスト・マイコンはPIC16F18855です。別シリーズPIC三昧で活躍中のもの。以下の記事でPIC16F18855のSPIバス(マスタ)接続をやってみています。
PIC三昧(14) MSSP(SPI)で23LC512にRWしてみる、PIC16F18855
MCP6S21の制御は、基本的にはゲイン設定のレジスタに所望のゲインを書き込むというだけの操作です。レジスタ指定8ビット、ゲイン指定8ビット(設定できるゲインは8段階デス)の合計16ビットのコマンド語を書き込めばことたります。SPIはモード0対応可です。
実験に使用した回路
とりあえず、倍率2倍、4倍くらいで増幅している「感」がでればよろしい、という程度の今回目標です。エバボードのデジタル電源をそのまま引き出してアンプの電源にしてしまっているので、ノイズなど飛んで火にいる夏の虫状態。まあそれでもゲイン可変なところは分かると。回路図が以下に。
実験用のソフトウエア
実験用のコードは別シリーズPIC三昧でいつもやっているとおりマイクロチップ社のMPLAB X IDE環境で、自動コンフィギュレーションツールMCCクラシック使用で作成してます。コマケー設定は自動でやってくれる優れもの。これ無にはとても大変、書く気になれないっす。
まずプロジェクトリソースの設定から。MSSP1というリソースを追加。MSSP1はSPIでもI2Cにでもコンフィグできるペリフェラル回路です。
MSSP1の設定が以下に。SPIなのに妙に遅いクロックにしているのはSPIの波形を観察する場合に都合がいいからです。実際にはもっと速いクロック設定で動作可能なハズ。
上記設定後、Generateボタンを押すことで必要な関数などを皆自動生成してくれるので、後はmain()関数などをちょいと記述すればOKです。
今回使用のmain()関数などのソースが以下に。これまたSPIの波形を観察するときの利便性を考えてループの中でゲイン設定を繰り返しているのですが、実際は最初に1回設定するだけでOKっす。
#include "mcc_generated_files/mcc.h" #define GAIN1 (0) #define GAIN2 (1) #define GAIN4 (2) void setMCP6S21gain(uint8_t gnum) { uint8_t buf[2]; buf[0] = 0x40; //Write to the GAIN register buf[1] = gnum & 0x07; RC6=0; SPI1_WriteBlock(buf, 2); RC6=1; } void main(void) { SYSTEM_Initialize(); RC6=1; SPI1_Initialize(); while (1) { SPI1_Open(0); setMCP6S21gain(GAIN2); SPI1_Close(); RA0 = 1; __delay_ms(50); RA0 = 0; __delay_ms(50); } }
実験結果
まずはアナログ入力にオフセット500mV、振幅100mV、1kHzの正弦波を与え、MCP6S21に2倍に増幅を指定した場合の波形です。黄色C1が入力、青色C2が出力です。ほぼほぼ2倍の出力がでております。しかし、波形が汚い。ノイズでベコベコ。
つづいてゲインを4倍にしてみました。先ほどの入力設定のままでゲイン4倍にしたら増幅した波形の頭の方が切れてしまうことに気づいたので、入力の振幅は同じですが、オフセットをさげて観察してます。泥縄。
ゲイン可変は良いが、もうちょっと綺麗な波形が観察できるようにしろよ、自分。