【MFT2019】AD7194基板動作OK<1CHのみ>

AD7194EVALボード上に基板を載せてNUCLEO L432KCを搭載しました。6CHのひずみゲージブリッジのターミナルブロックが面積喰うので2階建て基板となりました。結局HX711 6個の基板面積と同等サイズになりました。しかし、AD変換が高精度高速でSPIインターフェースが安定しているので、HX711よりはるかに良いので価格が5倍しても惜しくはないと思います。基本的な動作プログラムは、以前のAD7794と同じなので、AD7794初動作の記事を参照してください。

全8CHの長いピンがあるのですがところどころ違う機能のピンがあって配線順間違えてしまってREFERENCE電圧ピン REFIN1+とREFIN1-がずれてしまっていてAD変換エラーがでてデータがでてこないバグがあって3時間ほど道草を食いました。
=====================AD7194ほど高価な多CHは不要で1-2CHでいい場合============
※2021年9月1日追記【新しいアンプADS122U04を追加しました。SPIでなくUART接続なので簡単接続です】
AD7193とM5系でSPI接続のトラブルが多いのでSPI接続でなくUART接続が可能なΣデルタ型ADCチップを探しあてました。TexasのADCでADS122U04という安くて、小さい2CHのADCですが、配線がラフでもきちんと接続できるし1CHで2000sps 2Chで370spsもでるのでAD7194,AD7193ほど多CHが必要ない場合に便利です。
【ひずみゲージアンプ】ADS122U04の動作その1<UARTで楽ちん動作>
【ひずみゲージアンプ】ADS122U04の動作その2<2CHで370Hz出る>
上記記事は、mbedを使ってますが、C++のシリアルなので、ESP32系、M5系でも移植は簡単だと思います。
================================================

●テストプログラム
1chだけ最高速4.8KHzでサンプリングしてみました。
簡単に書いたのでライブラリーとか関数は使ってないので判り易いと思います。

// AD7194 EVAL Board mbed NUCLEO 432KC SPIIF Program
// Differential 1Ch AIN1(+) AIN2(-)
//2019/03/23 Shinshu-Makers
#include “mbed.h”
SPI ad7194 (PA_7,PA_6,PA_5); //NUCLEO L432KC MOSI, MISO, SCLK
DigitalOut CS(PA_4); // Chip select
//DigitalOut ADReset(p15); // Pin 15 is reset line for AD9850
Serial pc(USBTX, USBRX); // tx, rx for debug terminal
Timer t;
int data,data0,data1,data2 ;
int sdata,sdata0,sdata1,mdata0,mdata1,mdata2,data_1;
int condata0,condata1,condata2;
int cReg0,cReg1;
double mV;int main()
{
pc.baud(115200);
CS=0;//Chip Selct Low設定
//set_AD7194();
//MODEレジスタへモード設定データ書き込み
ad7194.write(0x08);//MODEレジスタ書き込み指定
ad7194.write(0x08) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz
ad7194.write(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま
ad7194.write(0x01) ;//MODEレジスタ7-0bit書き込み=4800Hz設定
//mode書き込み確認
ad7194.write(0x48);//MODEレジスタ書き込み指定
mdata0=ad7194.write(0x00) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz
mdata1=ad7194.write(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま
mdata2=ad7194.write(0x00) ;//MODEレジスタ7-0bit書き込み=4800Hz設定
//pc.printf(“mdata:%x,%x,%x|n\r”,mdata0,mdata1,mdata2);
//設定レジスタへ設定データ書き込み
ad7194.write(0x10);//設定レジスタ書き込み指定
ad7194.write(0x00) ;//設定レジスタ23-16bit書き込み=デフォルトのまま
ad7194.write(0x01) ;//設定レジスタ15-8bit書き込み=1CH設定 AIN1+ AIN2-
ad7194.write(0x17) ;//設定レジスタ7-0bit書き込み=BUF Gain128
//Config書き込み確認
ad7194.write(0x50);//Configレジスタ書き込み指定
condata0=ad7194.write(0x00) ;//MODEレジスタ23-16bit書き込み=連続変換モード+InternalClock4.8MHz
condata1=ad7194.write(0x00) ;//MODEレジスタ15-8bit書き込み=デフォルトのまま
condata2=ad7194.write(0x00) ;//MODEレジスタ7-0bit書き込み=4800Hz設定
//pc.printf(“mdata:%x,%x,%x,condata:%x,%x,%x|n\r”,mdata0,mdata1,mdata2,condata0,condata1,condata2);t.start();while(1)
{
ad7194.write(0x40);//status request
sdata0=ad7194.write(0x0);//status read
//pc.printf(“read In status=%x\n\r”,sdata0);
//pc.printf(“%x:sdata0 & 0x80=%x\n\r”,sdata0,sdata0 & 0x80 );
if (sdata0 & 0x80 ) {//7bit目がクリアされたら変換完了でデータレジスタアクセス
ad7194.write(0x58);
data0=ad7194.write(0x0);
data1=ad7194.write(0x0);
data2=ad7194.write(0x0);
mV=(data0*65536+data1*256+data2)/5084;
//pc.printf(“==============%4.1f,%x,%x,%x,%4.4f\n\r”,mV,data0,data1,data2,t.read());
pc.printf(“%4.1f,%4.3f\n\r”,mV,t.read());
}
}}

●仕様の理解
AD7194のレジスタ仕様は、AD7794とほぼ同じなのですが、CH数が多いのでMODEレジスタとConfigurationレジスタが3バイトとなってます。他は、ほぼ同様の定義で使えます。
レジスタ表を記録しておきます。

●以後
6CHを切り替えるプログラムを作ってスループットが5msecでるか確認します。6分力センサボディにひずみゲージ貼りも始めます。何しろ24枚をΦ16x70㎜に集積させるので、大変手間がかかりそうです。試しに上段のモーメントMX1、MY1の8枚貼ってみましたがこれだけで1時間かかりました。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です