低電力センサAFEを使用した高精度な化学または生物学的センシングシステムの実装
DigiKeyの北米担当編集者の提供
2019-08-29
より高精度な生物学的または電気化学センシングの需要が高まる中、さまざまな要件に対応する精度と柔軟性を提供できる効果的なセンサ信号チェーンソリューションは、まだほとんど見つけ出されていません。しかも、そのような機能を小型かつ低コストで実現する必要があるため、問題はさらに複雑化し、設計スケジュールが乱されてしまいます。
正確なセンサ信号の取得および調整を行わずに、生物学的および化学センシングアプリケーションに関連したノイズの多い微小信号源を測定しようとすると、大きな誤差が生じる恐れがあります。人のバイタルサインの監視などの生物学的アプリケーションや有毒ガス検知などの化学アプリケーションにおいて、測定誤差に起因する、正常を異常と判定したり異常を正常と判定したりする誤判定は悲惨な結果を招きかねません。
この記事では、幅広い2、3、4線式センシングアプリケーションをサポートした、Analog Devicesの高精度アナログフロントエンド(AFE)がシンプルで効果的なソリューションを提供していることを紹介します。AD5940を使用すると、構成と動作機能をプログラミングするだけで、正確な生物学的センシングや電気化学センシングのさまざまな要件を満たすことができる超低電力な設計を迅速に実装できます。
生物学的および化学センシングシステム用アプリケーション
人体や電気化学的ソースにおけるインピーダンス、電圧、または電流の変化を測定することが、多くのアプリケーションの重要機能になってきました。皮膚電気活動(EDA)(旧称、ガルバニック皮膚反応(GSR))を測定することでストレス指標を求めることができれば、医療従事者に個人の精神生理学的状態に関する重要な手がかりを提供できます。慢性的なストレスや不安を放置すると、心臓の疾患などの生理学的異常を引き起こしかねません。
生体インピーダンス解析(BIA)などその他の種類の測定も、医療レベルの解析だけでなく健康およびフィットネス用民生製品での応用が増加しています。体組成計で長年にわたって使われてきたBIAは、非侵襲性の血圧測定手法として医療専門家からの関心が高まっています。医療機器の専門家は、電気化学的ソースにおける電流の微小変動測定の関連手法を用いて、その測定結果を使用して有効性の向上した血糖モニタなどのデバイスを提供しています。産業分野のエンジニアも同様に、これらの電気化学測定法を有毒ガスモニタや水質テスタなどのアプリケーションに使用できます。
これらの測定手法は、皮膚面や液状検体内で電極を使うなどの特徴が共通しています。しかしながら、その実装の詳細は、幅広い要件に単独で対応できるソリューションを見つけ出すのが難しいため大きく異なっています。
たとえば、EDA測定には、人体組織の深層にまで励起信号が貫通するのを制限するように設計された、通常200Hz以下の低周波励起源が必要です。励起源は通常、2線式回路で実装され、1対の電極間の皮膚部分にかかる励起源電圧は、表皮伝導率の変化に伴って変動する微小電流を誘導します。
これに対してBIA測定には、通常、低周波励起と組織の深層に到達する高周波励起(標準的には50kHz)を組み合わせた4線式回路が必要です。
電気化学測定には、通常、さらにもう1つの構成が必要です。これらの測定では、対象の化学反応に関わる作用電極と、定電位の維持に使う基準電極、電流ループを閉じる対向電極を組み合わせます。
この数年の間に、これらの各種測定用のさまざまなソリューションが登場してきましたが、これらの手法の異なった要件に対応できる効率のよいものはまだほとんどありません。Analog Devices AD5940BCBZ-RL7 AFEを使用すると、高精度、小型、低消費電力の要求をすべて満たす生物学的センシングおよび電気化学センシングのシステムをより簡単に実装できます。
統合AFE
AD5940は低電力の多機能AFEであり、プログラムで設定することで、2、3、4線式センサ測定を必要とするさまざまなアプリケーションをサポートできます。AD5940と適切な電極を組み合わせると、健康、医療、産業分野でアプリケーションのさまざまな測定要件に対応できる高精度デバイスを迅速に開発できます。
AD5940は、その精度と構成可能である点に加え、出力データレート4Hz時の消費電力が80µA未満であるため、登場しつつあるウェアラブルや他のバッテリ駆動デバイスのような超低電力製品に測定機能を組み込むことができます。また、AD5940は、電圧、電流、インピーダンスの高精度測定に必要なサブシステムをすべて統合しているため、設計が簡単になります(図1)。
図1:Analog Devices AD5940は、励起源の生成と電流、電圧、インピーダンスの測定に必要なサブシステムの完全なセットを組み合わせています。(画像提供:Analog Devices)
AD5940の機能アーキテクチャは、励起出力、入力信号の測定、制御の3つの主要なサブシステムで構成されています。
AD5940は、励起源として別個に2つの高精度励起ループを提供しています。最大200kHzの高周波励起を必要とするBIAのようなアプリケーションには、必要な周波数および波形で励起信号を発生させられる広帯域ループを使用できます。このループの中で波形発生器が高速12ビットD/Aコンバータ(DAC)を駆動し、次にそのフィルタ処理済み出力が、励起出力アンプを駆動するプログラム可能ゲインアンプ(PGA)を通過し、励起出力アンプがAC励起信号をセンサの必要とするDCバイアス電圧と合成します(図2)。
図2:高周波励起の要件に対しては、Analog Devices AD5940の高速信号チェーンを使用して、周波数最大200kHzの各種波形を生成できます。(画像提供:Analog Devices)
DCから200Hzまでの低周波励起を必要とするEDAや電気化学測定のようなアプリケーションには、狭帯域幅励起ループを使用できます。このループの中で、低電力、デュアル出力の12ビットDACは、通常、3線式センサ構成の対向電極(CE)に接続した低ノイズポテンショスタットアンプ(PA)の非反転入力を駆動します(図3)。
この構成の場合、測定ループはPAの反転入力を駆動する基準電極(RE)で完結する一方で、センス電極(SE)は低電力トランスインピーダンスアンプ(TIA)の反転入力を駆動し、TIAの非反転入力はデュアル出力DACの他の出力チャンネルによって駆動されます。
図3:低周波励起を必要とする3線式センサ構成の場合、Analog Devices AD5940の狭帯域幅ループには、出力をCEに、入力をREに接続したPAが含まれる一方、低電力トランスインピーダンスアンプ(LPTIA)はSEからの入力を受けます。(画像提供:Analog Devices)
狭帯域幅ループと同様、広帯域幅ループは高周波励起信号チェーンを、SE入力電流を電圧に変換する高速TIAで補完します。どちらのループも次にそれぞれの出力をAD5940の内蔵アナログマルチプレクサに送り、それが入力信号測定サブシステムへの入力になります。
信号測定サブシステムの中心部では、高性能アナログ信号チェーンが、バッファ、PGA、16ビット逐次比較レジスタ(SAR)A/Dコンバータ(ADC)への入力となる2次フィルタで構成される信号調整段に接続しています(図4)。
図4:AD5940の信号測定サブシステム内部には、アナログマルチプレクサがあるため、開発者は各種の電圧源を高性能16ビットADCによる変換用信号調整段を介して駆動できます。(画像提供:Analog Devices)
開発者は、アナログ入力マルチプレクサを使用して、内部温度センサ、電源、基準電圧やその他の外部電源などの各種信号源からADC信号チェーンに入力することができます。通常のアプリケーションの場合、センサデータ収集用1次信号源は、低電力TIAおよび高速TIAをそれぞれ狭帯域幅ループおよび広帯域幅ループからの出力のままにします。
変換後、デジタルフィルタ処理と、サンプルセットの算術平均、平均、分散の計算などの後処理を各機能ブロックで実行します。AD5940の後処理ハードウェアには、これらの基本機能を果たすもの以外に、離散フーリエ変換(DFT)ユニットがあります。このDFT機能により、インピーダンス測定に必要な位相の値を自動計算するようにAD5940を構成することができます。
3つめの主要サブシステムは、特定の励起源の生成、各種電圧源の変換、後処理機能の実行など、デバイスの動作を制御します。この制御サブシステムの基盤にはプログラム可能シーケンサがあり、これを使用すると、ホストマイクロコントローラやホストマイクロプロセッサを介さずに励起の生成およびセンサ測定を実行できます。
ホストプロセッサを使用して一連のコマンドをAD5940に読み込ませた後、AD5940のシーケンサをスタートさせるコマンドの発行だけをして、即座に割り込み待機(WFI)命令か他の方法で、ホストプロセッサを低電力のスリープ状態にします。その時点からシーケンサがAD5940による制御を引き継いで、一連の測定を独立して実行し、さらには測定の間にデバイスを低電力モードにすることまで行います(図5)。
図5:AD5940は、パワーオンリセット後も、ブートプロセス中に値を読み込み、デバイスを初期化し、コマンドシーケンスを読み込み、最後にシーケンサを動作させることで、独立して動作するようプログラムできます。(画像提供:Analog Devices)
シーケンサ制御による自律動作中、AD5940はFIFO(先入れ先出し)コマンドバッファからコマンドを読み込み、結果データをFIFOデータバッファに書き込みます。コマンドFIFOバッファとデータFIFOバッファは、AD5940の内蔵SRAM(スタティックランダムアクセスメモリ)から割り当てられた6KBの同一ブロックを共有しますが、この2つのFIFOバッファの動作は別個に維持されます。AD5940は、コマンドFIFOバッファが空になるかデータFIFOバッファが一杯になったときに、ホストプロセッサに対する割り込みを生成し、必要に応じて追加シーケンスの読み込みまたはデータの消去をするようにプログラムできます。
システム設計
ハードウェア、ソフトウェアどちらの観点から見ても、AD5940を使用した開発は単純明快です。
必要なハードウェアサブシステムをすべて統合しているため、AD5940を使用すれば、外部コンポーネントを最小限にとどめて4線式BIA測定ループのような複雑な設計を実装できます。AD5940の狭帯域幅ループを構成することで、デバイスの2つのアナログ入力(AIN)ポートであるAIN2およびAIN3を使用して、必要な低周波測定ができます(図6)。それと同時に、デバイスのCE0ポートおよびAIN1ポートを使用して、同じくBIAアプリケーションが必要とする高周波励起および測定を実装できます。
図6:Analog Devices AD5940を使用すると、少数の外部コンポーネントしか必要とせず、生体インピーダンス解析アプリケーションに必要な低周波および高周波励起の両方を含む4線式構成を実装できます。(画像提供:Analog Devices)
Analog Devicesの評価ボードのセットを使用すれば、この最小限のハードウェアインターフェース設計段階を省略して開発プロジェクトを迅速に進められます。Arduino UNOフォームファクタを使用して設計された、Analog DevicesのEVAL-ADICUP3029評価キットベースボードは、Analog Devices ADUCM3029マイクロコントローラを基にしたホストプラットフォームです。AD5940バイオエレクトリックシールドを取り付けると、すぐにAD5940を使用してBIAなどの生物学的測定を始められます。あるいは、AD5940電気化学シールドを取り付け、ガスセンサなどの外部センサを追加して、AD5940を使用した電気化学測定による有毒ガス分析を実行できます。
用意されているリソースを使用して、さまざまなAD5940ベースのソフトウェアアプリケーションをすばやく評価できます。オープンソースC言語AD5940ファームウェアライブラリとともに、Analog Devicesは生体インピーダンス解析サンプルアプリケーションなど多数のC言語アプリケーションのサンプルを含んだオープンソースリポジトリを提供しています。
リスト1に示すように、BIAモジュールのメインルーチンAD5940_Main()は、一連の初期化関数を呼び出します。
AD5940PlatformCfg()は、FIFO、クロック、GPIOなど、AD5940のハードウェアサブシステムをセットアップするAD5940ファームウェアライブラリ関数です。AD5940BIAStructInit()は、サンプル出力データレート(BiaODR、単位はHz)、サンプル数(NumOfData)などのアプリケーションパラメータ値をもつ構造体をインスタンス化するBIAアプリケーション関数です。開発者はこれらの値を変更することで、アプリケーションパラメータを容易に変えることができます。AppBIAInit()は、パラメータのリセット、較正の実行、および別のBIAアプリケーションルーチンAppBIASeqCfgGen()の呼び出しでシーケンサの初期化を行うBIAアプリケーション関数です。
コピー
/* !!Change the application parameters here if you want to change it to none-default value */
void AD5940BIAStructInit(void)
{
AppBIACfg_Type *pBIACfg;
AppBIAGetCfg(&pBIACfg);
pBIACfg->SeqStartAddr = 0;
pBIACfg->MaxSeqLen = 512; /** @todo add checker in function */
pBIACfg->RcalVal = 10000.0;
pBIACfg->DftNum = DFTNUM_8192;
pBIACfg->NumOfData = -1; /* Never stop until you stop it mannually by AppBIACtrl() function */
pBIACfg->BiaODR = 20; /* ODR(Sample Rate) 20Hz */
pBIACfg->FifoThresh = 4; /* 4 */
pBIACfg->ADCSinc3Osr = ADCSINC3OSR_2;
}
void AD5940_Main(void)
{
static uint32_t IntCount;
static uint32_t count;
uint32_t temp;
AD5940PlatformCfg();
AD5940BIAStructInit(); /* Configure your parameters in this function */
AppBIAInit(AppBuff, APPBUFF_SIZE); /* Initialize BIA application.Provide a buffer, which is used to store sequencer commands */
AppBIACtrl(BIACTRL_START, 0); /* Control BIA measurment to start.Second parameter has no meaning with this command.*/
while(1)
{
/* Check if interrupt flag which will be set when interrupt occured.*/
if(AD5940_GetMCUIntFlag())
{
IntCount++;
AD5940_ClrMCUIntFlag(); /* Clear this flag */
temp = APPBUFF_SIZE;
AppBIAISR(AppBuff, &temp); /* Deal with it and provide a buffer to store data we got */
BIAShowResult(AppBuff, temp); /* Show the results to UART */
if(IntCount == 240)
{
IntCount = 0;
//AppBIACtrl(BIACTRL_SHUTDOWN, 0);
}
}
count++;
if(count > 1000000)
{
count = 0;
//AppBIAInit(0, 0); /* Re-initialize BIA application.Because sequences are ready, no need to provide a buffer, which is used to store sequencer commands */
//AppBIACtrl(BIACTRL_START, 0); /* Control BIA measurment to start.Second parameter has no meaning with this command.*/
}
}
}
リスト1:Analog Devicesの生体インピーダンス解析(BIA)サンプルアプリケーションでは、メインルーチンが基本的なデザインパターンの実例を示しており、AD5940の初期化、カスタムパラメータの設定、コマンドシーケンスの定義、最後にAD5940からの割り込みを待つ無限ループの中で測定結果の収集を行います。(コード提供元:Analog Devices)
AppBIASeqCfgGen()は、AppBIAInit()関数から呼び出されると、目的のシーケンス(この場合はインピーダンス測定)の実行に必要なAD5940サブシステムを構成する大きな処理を実行します。このルーチンは、各アプリケーションに必要な固有の構成およびパラメータを設定する一連の構造体をインスタンス化します。それらの構造体はAD5940ファームウェアライブラリのヘッダファイルad5940.hで定義されています。
最後に、AD5940_Main()は、測定処理を開始するAppBIACtrl()を呼び出してから、データ収集を行う無限ループに入ります。データが入手可能になると(割り込み信号で指示)、AppBIAISR()の呼び出しによりデバイスからデータを取得し、別のルーチンAppBIADataProcess()を呼び出します。このルーチンが生データを処理してアプリケーションに必要な結果を生成します(リスト2)。本番用アプリケーションでは、AD5940の広範な割り込み機能を使用して、より効率的なデータ収集方法を実装できます。
コピー
/* Depending on the data type, do appropriate data pre-process before return back to controller */
static AD5940Err AppBIADataProcess(int32_t * const pData, uint32_t *pDataCount)
{
uint32_t DataCount = *pDataCount;
uint32_t ImpResCount = DataCount/4;
fImpPol_Type * const pOut = (fImpPol_Type*)pData;
iImpCar_Type * pSrcData = (iImpCar_Type*)pData;
*pDataCount = 0;
DataCount = (DataCount/4)*4;/* We expect RCAL data together with Rz data.One DFT result has two data in FIFO, real part and imaginary part. */
/* Convert DFT result to int32_t type */
for(uint32_t i=0; i<DataCount; i++)
{
pData[i] &= 0x3ffff; /* @todo option to check ECC */
if(pData[i]&(1<<17)) /* Bit17 is sign bit */
{
pData[i] |= 0xfffc0000; /* Data is 18bit in two's complement, bit17 is the sign bit */
}
}
for(uint32_t i=0; i<ImpResCount; i++)
{
iImpCar_Type *pDftVolt, *pDftCurr;
pDftCurr = pSrcData++;
pDftVolt = pSrcData++;
float VoltMag,VoltPhase;
float CurrMag, CurrPhase;
VoltMag = sqrt((float)pDftVolt->Real*pDftVolt->Real+(float)pDftVolt->Image*pDftVolt->Image);
VoltPhase = atan2(-pDftVolt->Image,pDftVolt->Real);
CurrMag = sqrt((float)pDftCurr->Real*pDftCurr->Real+(float)pDftCurr->Image*pDftCurr->Image);
CurrPhase = atan2(-pDftCurr->Image,pDftCurr->Real);
VoltMag = VoltMag/CurrMag*AppBIACfg.RtiaCurrValue[0];
VoltPhase = VoltPhase - CurrPhase + AppBIACfg.RtiaCurrValue[1];
pOut[i].Magnitude = VoltMag;
pOut[i].Phase = VoltPhase;
}
*pDataCount = ImpResCount;
/* Calculate next frequency point */
if(AppBIACfg.SweepCfg.SweepEn == bTRUE)
{
AppBIACfg.FreqofData = AppBIACfg.SweepCurrFreq;
AppBIACfg.SweepCurrFreq = AppBIACfg.SweepNextFreq;
AD5940_SweepNext(&AppBIACfg.SweepCfg, &AppBIACfg.SweepNextFreq);
AppBIACfg.RtiaCurrValue[0] = AppBIACfg.RtiaCalTable[AppBIACfg.SweepCfg.SweepIndex][0];
AppBIACfg.RtiaCurrValue[1] = AppBIACfg.RtiaCalTable[AppBIACfg.SweepCfg.SweepIndex][1];
}
return AD5940ERR_OK;
}
リスト2:Analog Devicesの生体インピーダンス解析(BIA)サンプルアプリケーションに含まれているAppBIADataProcess()ルーチンは、独自の後処理ルーチンでAD5940の測定データを使用する方法を例示したものです。このルーチンでは電圧の大きさと位相を計算します。(コード提供元:Analog Devices)
たとえば、健康およびフィットネス用ウェアラブル向けの機能がさらに豊富なソリューションの場合には、AD5940のインピーダンス測定機能とAnalog DevicesのAD8233心拍数モニタ(「Specialty Heart-Rate Monitor ICs Overcome ECG Noise and Power Challenges(ECGノイズおよび電力の課題を克服する特製心拍数モニタIC)」参照)を組み合わせることができます。
まとめ
幅広い2、3、4線式センシングアプリケーションをサポートしたAnalog DevicesのAD5940 AFEは、高精度な生物学的センシングや電気化学センシングの精度および柔軟性の問題に対して、シンプルで効果的なソリューションを提供しています。AD5940を使用すると、構成と動作機能をプログラミングするだけで、さまざまなアプリケーションのニーズを満たすことができる超低電力な設計を迅速に実装できます。
免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。


