使用低功耗传感器 AFE,实现高精度的化学或生物传感系统
投稿人:DigiKey 北美编辑
2019-08-29
市场对于更精确的生物或电化传感的需求日益增长,面对这种状况,开发人员几乎找不到有效的传感器信号链解决方案,能够同时提供精度和灵活性,以满足不同的要求。设计人员需要在紧凑的外形内提供这些功能,同时还要保持低功耗,这些需求不仅进一步增加了设计的复杂性,而且打乱了设计日程。
如果没有精确的传感器信号采集和调节,要测量与生物和化学传感应用相关的包含噪声的小信号源,可能导致严重错误。在生物应用(例如监测人体生命体征)或化学应用(例如毒气检测)中,由于测量误差导致的漏报或误报可能带来灾难性后果。
本文将介绍 Analog Devices 的精密模拟前端 (AFE) 凭借对 2 线、3 线和 4 线传感应用的广泛支持,提供一种简单有效的解决方案。只需对 AD5940 的配置和操作功能进行编程,开发人员便可使用 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 位模数转换器进行转换。(图片来源:Analog Devices)
使用模拟输入倍频器,开发人员能够利用不同信号源,包括内部温度传感器、电源和基准电压以及其他外部信号源,为 ADC 信号链馈送信号。对于典型应用,传感器收集数据的主要信号源仍为低功耗 TIA 和高速 TIA 输出(分别来自相应的低带宽和高带宽回路)。
转换之后,单独的功能模块提供进一步的后处理,包括进行数字滤波,以及自动计算样本集的平均值、中间值和方差。除了这些更基本的功能之外,AD5940 的后处理硬件还包括离散傅里叶变换 (DFT) 单元。借助这种 DFT 功能,开发人员可将 AD5940 配置为自动计算阻抗测量中需要的幅度和相位值。
第三个主要子系统用于控制器件的工作,包括生成特定激励源、转换不同电压源、执行后处理功能。以这一控制子系统为基础,开发人员可利用一个可编程定序器来生成激励和执行传感器测量,而无需主机微控制器或微处理器介入。
使用主机处理器将命令序列加载到 AD5940 后,开发人员只需发出命令来启动 AD5940 定序器,然后立即使用一条等待中断 (WFI) 指令或其他方法,将主机处理器置于低功耗休眠状态。此时,定序器将接管 AD5940 的进一步控制,独立地执行一系列测量,甚至在测量之间将器件置于低功耗模式(图 5)。
图 5:开发人员可对 AD5940 进行编程,使其即使在上电复位后仍旧独立工作,即在启动过程中加载值,初始化器件,加载命令序列,以及最终运行定序器。(图片来源:Analog Devices)
在由定序器控制的自主工作期间,AD5940 从先进先出 (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,开发人员只需少数外部元器件,便可实现四线配置,提供在人体阻抗分析应用中所需的低频和高频激励。(图片来源: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)
当被 AppBIAInit()
函数调用时,AppBIASeqCfgGen()
在配置执行目标序列(在本例中为阻抗测量)所需的 AD5940 子系统方面发挥了重要作用。该例程对 D5940 固件库头文件 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 的配置和操作功能进行编程,开发人员便可使用 AD5940 快速实现超低功耗设计,满足不同应用的需求。
免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。