使用低功率感測器 AFE,實作高精確度的化學或生物感測系統
資料提供者:DigiKey 北美編輯群
2019-08-29
生物或電化學感測對於更高精確性的需求越來越高,但對開發人員來說,目前沒有幾款感測器訊號鏈解決方案能有效提供準確度和靈活性以滿足不同的需求。而且還要以小型體積和低功率提供這些能力,因此會進一步讓問題更加複雜,也影響到設計的進度。
如果無法準確地擷取和調整感測器訊號,在針對生物和化學感測應用,測量帶有雜訊的小型訊號源時,有可能會造成嚴重誤差。在生物應用 (如人體生命徵象監測) 或化學應用 (如毒氣偵測) 中,如果因量測誤差而造成誤判為真或誤判為假,可能會產生嚴重的後果。
本文將說明 Analog Devices 的精密類比前端 (AFE) 藉由支援多種 2、3 和 4 線感測應用,提供簡單有效的解決方案。只要針對 AD5940 的組態和操作功能進行編程,開發人員就能使用此元件迅速實作超低功率設計,在準確的生物或電化學感測應用中滿足眾多需求。
生物與化學感測系統應用
測量人體 (或電化學來源) 的阻抗值、電壓或電流變化,已成為許多應用的重要功能。透過電化活動 (EDA;之前稱為膚電反應 GSR) 的量測來判定壓力指標,可為健康專業人員提供有關個體身心狀態方面的重要線索。長期壓力和焦慮如果不加以治療,有可能會導致心臟問題和其他嚴重的生理病變。
生物阻抗分析 (BIA) 等其他類型的量測功能,目前也逐漸出現在健康和健身,以及醫療級分析市場的消費性產品中。BIA 用於人體組成分析裝置已經有多年的歷史,目前醫療專家越來越有興趣將這種分析作為非侵入性的血壓量測技術。醫療裝置專家使用相關方法來測量電化學來源中的少量電流變化,藉由這些量測來提供更有效的血糖監測器和其他裝置。同樣地,工業工程師能將這些電化學量測方法,用於毒氣監測器和水質測試器等應用。
這些量測技術和其他技術具有一些相同的特點,例如都是在皮膚上或液態樣本中放置電極,但實施細節卻有很大的差異,導致開發人員更難找到一個能夠涵蓋眾多需求的解決方案。
舉例來說,EDA 量測需要低頻率的激磁來源 (一般不超過 200 Hz),可用來將激磁訊號的穿透侷限在更深層的人體組織。實作時,通常會使用雙線電路,皮膚貼片上電極對之間的來源電壓會產生少量的電流,並隨著表皮導電性的變化而波動。
相比之下,BIA 量測通常需使用四線電路,將低頻激磁和高頻激磁 (一般為 50 kHz) 相結合,以便到達深層組織。
然而,電化學量測通常需要另一種配置。要進行量測,需使用工作電極 (涉及一些相關的化學反應)、參考電極 (用來維持固定電位),以及反電極 (完成電流迴圈)。
雖然過去幾年陸續出現多種可進行不同量測的解決方案,但沒有幾款高效率的替代方案,能支援這些技術的不同需求。開發人員只要使用 Analog Devices 的 AD5940BCBZ-RL7 AFE,就能以更輕鬆的方式實作能滿足高準確度、小體積、低功耗需求的生物和電化學感測系統。
整合式 AFE
AD5940 是低功率的多功能 AFE,能以編程方式進行設定,以支援多種需要進行 2、3 或 4 線感測器量測的應用。只要使用 AD5940 並搭配一整組適當的電極,就能針對健康、醫療和工業領域中的應用,快速開發出符合這些應用需求的高精確度元件。
AD5940 除了具備可設定性和準確度,在 4 Hz 的輸出數據傳輸率下也只消耗不到 80 µA,因此開發人員能將此元件的量測功能放進新興的超低功率產品中,例如穿戴式裝置和其他電池供電式裝置。同時,AD5940 能整合一整組子系統,以進行高精確度的電壓、電流和阻抗值量測,因此可簡化設計 (圖 1)。
圖 1:Analog Devices 的 AD5940 整合一整組子系統,以產生激磁來源並測量電流、電壓和阻抗值。(圖片來源:Analog Devices)
AD5940 的功能架構由三大子系統組成,可進行激磁輸出、輸入訊號量測和控制。
作為激磁來源,AD5940 提供兩個不同的高精確度激磁迴圈。如果應用 (例如 BIA) 需要高達 200 kHz 的高頻激磁,開發人員可以使用高頻寬迴圈,在所需的頻率和波形下產生激磁訊號。在此迴圈中,波形產生器會驅動一個高速的 12 位元數位類比轉換器 (DAC),其輸出經過濾波後,會轉而通過一個可編程的增益放大器 (PGA)。此增益放大器會驅動激磁輸出放大器,再由輸出放大器結合 AC 激磁訊號和所需的感測器 DC 偏壓 (圖 2)。
圖 2:若有高頻激磁需求,開發人員可使用 Analog Devices 的 AD5940 高速訊號鏈,產生出不同形狀和頻率高達 200 kHz 的波形。(圖片來源:Analog Devices)
EDA 或電化學量測等應用,需要 DC 至高達 200 Hz 的低頻激磁,開發人員可使用低頻寬激磁迴圈滿足此需求。在此迴圈中,有一個低功率、雙輸出的 12 位元 DAC,可驅動低雜訊恆電位器放大器 (PA) 的非反相輸入,而此放大器在 3 線感測器配置中,通常都會連接至反電極 (CE) (圖 3)。
在此配置下,量測迴圈使用參考電極 (RE) 驅動 PA 的反相輸入,並使用感測電極 (SE) 驅動低功率轉阻放大器 (TIA) 的反相輸入,其非反相輸入則由雙輸出 DAC 的另一個輸出通道來驅動。
圖 3:在需要低頻激磁的 3 線感測器配置中,Analog Devices 的 AD5940 低頻寬迴圈中包含一個 PA,其輸出連接至 CE,而輸入接至 RE,同時由低功率轉阻大器 (LPTIA) 接收來自 SE 的輸入。(圖片來源:Analog Devices)
如同低頻寬迴圈,高頻寬迴圈也使用高速 TIA 補足高頻激磁訊號鏈,以便將 SE 輸入電流轉換成電壓。這兩個迴圈會輪流將各自的輸出驅動至 AD5940 的整合式類比多工器,以滿足應輸入訊號量測子系統的需求。
在訊號量測子系統的核心區塊,有個高效能類比訊號鏈,其結合訊號調整級 (含緩衝器),、PGA 和二階濾波器,可饋送訊號給 16 位元連續漸近暫存器 (SAR) 類比數位轉換器 (ADC) (圖 4)。
圖 4:AD5940 訊號量測子系統內有一個類比多工器,能讓開發人員透過訊號調整級驅動不同的電壓源,以利高效能 16 位元 ADC 進行轉換作業。(圖片來源:Analog Devices)
藉由類比輸入乘法器,開發人員用不同的訊號源饋送訊號給 ADC 訊號鏈,包括內部溫度感測器、供應電壓和參考電壓,以及其他外部來源。對於一般常見應用,感測器資料收集的主要訊號源,仍然是分別來自低頻寬迴圈和高頻寬迴圈的低功率 TIA 和高速 TIA 輸出。
轉換後,個別的功能區塊可提供進一步的後製處理,包括數位濾波和自動計算樣本集的平均數、中數和方差。除了更基本的功能,AD5940 後製處理硬體還包含獨立的傅立葉轉換 (DFT) 單元。在阻抗量測中,開發人員可運用這項 DFT 功能,設定 AD5940 自動計算所需的強度和相位值。
第三大子系統會控制裝置的運作,包括產生特定激磁來源、轉換不同電壓源,以及執行後製處理功能。基於此控制子系統,開發人員無需動用主機微控制器或微處理器,就能透過可編程定序器產生激磁並執行感測器量測。
使用主機處理器將命令依序載入到 AD5940 後,開發人員只要發出命令來啟動 AD5940 定序器,接著立刻使用等待中斷 (WFI) 指令或其他方法,讓主機處理器進入低功率睡眠狀態即可。此後,定序器會進一步控制 AD5940,獨立執行一連串量測,甚至讓元件在每次量測之間進入低功率模式 (圖 5)。
圖 5:開發人員能對 AD5940 進行編程,使其甚至在開機重置後都可獨立運作,方法是在開機過程中載入數值、將 AD5940 初始化、載入一系列命令,最後運行定序器。(圖片來源:Analog Devices)
當 AD5940 在定序器的控制下進行自發性運作時,會從先進先出 (FIFO) 命令緩衝區讀取命令,再將生成的資料寫入 FIFO 資料緩衝區。命令 FIFO 緩衝區和資料 FIFO 緩衝區,共用一個從 AD5940 整合式靜態隨機存取記憶體 (SRAM) 分配的 6 kB 區塊,不過這兩個 FIFO 緩衝區仍是分別運作。當命令 FIFO 緩衝區清空,或資料 FIFO 緩衝區已滿時,就可對 AD5940 進行編程,產生對主機處理器的中斷命令,以適時載入更多序列或卸載資料。
系統設計
從硬體和軟體兩個層面來看,使用 AD5940 進行開發相當直覺。
AD5940 已完全整合所需的硬體子系統,因此開發人員只要使用很少的外部元件,就能實作 4 線 BIA 量測迴圈等複雜設計。開發人員可以配置 AD5940 低頻寬迴圈,使用其中的兩個類比輸入 (AIN) 連接埠 (AIN2 和 AIN3),來處理所需的低頻量測作業 (圖 6)。同時,還可使用此元件的 CE0 和 AIN1 連接埠,來實作 BIA 應用也需要的高頻激磁和量測。
圖 6:使用 Analog Devices 的 AD5940,開發人員僅需幾個外部元件就能實作兼具低頻和高頻激磁的 4 線配置,以滿足人體阻抗值分析 (BIA) 應用的需求。(圖片來源:Analog Devices)
開發人員可以使用一組 Analog Devices 評估板,省去這個最小的硬體介面設計步驟,以便快速執行開發專案。Analog Devices 的 EVAL-ADICUP3029 評估套件基板採用 Arduino UNO 尺寸設計,可提供 以 Analog Devices ADUCM3029 微控制器為基礎的主機平台。安裝 AD5940 生物電子擴充板後,開發人員就能立即開始使用 AD5940 進行 BIA 等生物量測。或者,開發人員也能安裝 AD5940 電化學擴充板,並添加氣體感測器等外部感測器,即可以 AD5940 電化學量測為基礎進行毒氣分析。
開發人員可以快速地利用可用資源,來評估不同的 AD5940 架構軟體應用程式。除了本身的開放原始碼 C 語言 AD5490 韌體函式庫,Analog Devices 也提供一個開放原始碼儲存庫,其中含有許多 C 語言應用程式範例,包括人體阻抗值分析應用程式範例。
如清單 1 所示,BIA 模組中的主要常式 AD5940_Main(),會調用一系列的初始化函數:
AD5940PlatformCfg()
是一個 AD5490 韌體函式庫函數,用來設定 AD5940 硬體子系統,包括 FIFO、時脈及 GPIO。AD5940BIAStructInit()
屬於 BIA 應用程式函數,可用來實例化含值的結構,開發人員只要修改這些值,就能輕鬆變更應用程式的參數,例如以 Hz 為單位的樣本輸出數據傳輸率 (BiaODR
),以及樣本數量 (NumOfData
)。AppBIAInit()
也是 BIA 應用程式函數,可用來重置參數、進行校正,以及調用另一個 BIA 應用程式常式AppBIASeqCfgGen()
來初始化序列器。
複製
/* !!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) 應用程式範例中,主要常式展示出基本設計模式,可用於初始化 AD5490、設定自訂參數、定義命令序列,以及最後在一個等待 AD5490 送出中斷命令的無限迴圈內收集量測結果。(程式碼來源: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 心率監測器 (參閱《專用型心率監測器 IC 克服 ECG 雜訊與功率的難題》)。
結論
Analog Devices 的 AD5940 AFE 支援多種 2、3 及 4 線感測應用,可針對生物或電化學精確感測應用的準確度和彈性問題,提供簡單又有效的解決方案。只要針對 AD5940 的配置和操作功能進行編程,開發人員就能使用此元件迅速實作超低功率設計,滿足許多應用的需求。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。