好的,所以您想在 1Hz 到 10kHz 的范围内测量传感器的阻抗。从数字(10mV,100p1...100nA)来看,它介于 100kOhm 和 100MOhm 之间。
在数据采集方面,最简单的解决方案是使用 24 位 ADC,因此您有足够的动态范围来完全避免范围切换。如果您还想准确测量阻抗的相位,那么您需要足够高的采样率,以使 10kHz 正弦波看起来不会一团糟。生成测试信号的 DAC 还应具有足够高的采样率以产生干净的正弦波。CPU 还应该有足够的能力来处理数据。
如果您获得了足够的样本,那么您还可以使用平均来减少噪声。基本上,如果您获得几个正弦波周期,并将其与\$ e^{j \omega t} \$相乘,然后平均结果,那么您可以直接提取相位和幅度。通过使用平均,即使信号隐藏在噪声中,您也可以提取信号。
如果您的传感器检测到一些环境 50/60Hz 场,那么此方法将摆脱它们:因为它仅检测感兴趣频率的幅度和相位,它将拒绝其他频率的噪声和干扰。如果您只是在跨阻输出端测量电压,情况并非如此,您会得到更多的噪声。
您还可以使用更快的日志扫描。
我通过声卡获得了纳安级分辨率,而电流检测电阻只有几十欧姆。所以被测量的电压非常小,它通过一个仪表放大器,然后在一堆周期内取平均值。这种方法的好处是,它可以让您在时间与分辨率/噪声之间进行权衡。如果您发现需要更低的噪声和更高的分辨率,只需使用更长的采集时间。
这对于 MSP430 来说是相当困难的,但对于音频设备来说却很容易。音频 ADC/DAC 芯片会自动进行过采样。事实上,您可以使用 PC 或 Raspberry Pi 声卡作为数据采集硬件。大多数都是交流耦合的,因此您需要校准低频滚降或分流一些电容器,但这不是问题。此外,您可能不需要编写任何代码,因为已经有很多用于阻抗分析的 PC 软件......但是如果您确实想自己编写代码,使用 python 很容易。
所以问题是如何把这个微小的电流变成适合声卡输入的电压。
由于您仅使用交流电,因此运算放大器的输入偏移电流仅在它足够大以限制输出时才重要。但是,您的源阻抗和反馈阻抗非常高,因此您应该真正注意运算放大器的输入噪声电流及其 1 /f 角。例如,LT1793具有相当低的输入电流噪声。
请注意问题中的模拟轨迹显示运算放大器正在削波。如果使用单电源,则其输入共模和输出电压范围需要包括地。
使用正电源和负电源可能会更容易,以避免在零输入电流处削波运算放大器,如果您得到一个偏移电压方向错误的样本。此外,如果您使用交流电流来测量阻抗,那么为运算放大器使用分离电源会容易得多。否则,您必须将电容器与电容器交流耦合到中间电源附近的某个参考电压,然后考虑电容器的泄漏电流等。
其他答案提供了有关如何执行 TIA 部分的足够信息,因此我不会详细说明。
编辑:DSP的东西
要绘制阻抗的模量和相位与频率的关系,您可以使用两种方法:
这是经典测试,它扫描整个感兴趣的频率范围。详细的解释和数学在链接中,它大约是 1-2 页的 python 代码。由于它需要对整个波形进行 FFT,它必须适合内存,所以这对于微控制器是不可能的。如果您对整个频率范围感兴趣,这是最快的方法。
这更简单。如果您只对几个频率点感兴趣,那么这是一个不错的选择。如果它花费更多时间平均一个频率,它可以比扫频正弦具有更低的噪声,但当然,如果您对整个频率范围感兴趣,它会慢得多,因为每个频率都必须独立测量,其中包括进入下一个频率后的稳定时间位。
它是这样工作的:
生成正弦波\$ Ao sin(\omega t) \$并用DAC播放
在被测设备上记录测量结果,它也将是具有不同幅度和相移的正弦波。假设记录的数据是\$ Ar sin(\omega t + \phi) \$,其中 Ar=记录的幅度和\$ \phi \$相对于原始正弦波的相移。
所以你计算\$ e^{j \omega t} = cos \omega t + j sin \omega t\$,将它与接收到的信号相乘,然后在整数个正弦周期上平均结果。正弦周期不必是整数个样本,但平均应该是整数个周期。
将这两者相乘并取平均值就像计算记录信号与\$ e^{j \omega t} \$的乘积的离散时间积分一样。如果你写下积分并求解它,你会注意到结果是一个复数,其幅度为 Ar,相位为\$ \phi \$。
或者也许是\$ -\phi \$,我不记得了,但你明白了。
这基本上就是射频检测器的工作原理,它将入射波与正弦和余弦相乘,然后取平均值。
所以你得到一个复数\$ A(f) \$,它对每个频率的幅度和相位进行编码。扫过的正弦也以复数的形式给出结果,所以从现在开始,校准方法是一样的。您必须将结果保留为复数,因为这将很有用。
为了校准它,您必须关注这样一个事实,即您要测量的是在化学溶液中工作的电化学传感器与未浸入溶液中的相同传感器之间的差异。或者可能是别的东西,由你决定,但校准的目的是删除所有你不想成为测量的一部分的东西。
例如,您必须消除由于设置、DAC、ADC、采样延迟、缓冲等(不依赖于频率)引起的所有相移以及由电容和模拟滤波器引起的相移(依赖于频率) . 您还必须测量一个已知的电阻,以了解 ADC 幅度在模拟值方面的含义。
由于您要在高达 10kHz 时测量高达 100 Mohms 的电阻器,而 1pF 的寄生电容在 10kHz 时将具有 15Mohms 阻抗,因此您必须非常小心电容,否则它将完全淹没您的测量。消除电容是不可能的,但如果你让它保持不变,那么你可以校准它。如果皮法很重要,这意味着您不能使用可以设置为不同形状或不同间距的飞线,因为这会改变电容。你必须使用同轴电缆。或者,您也可以完全不使用电缆,例如,将 TIA 放在传感器旁边的小 PCB 上。
另一个不在您的 ADC 上使用多个量程的原因是您的设置可能至少有 10pF 与传感器并联,因此在 100pA 量程上的 10kHz 时,通过电容的电流将比您尝试测量的电流高很多,因此,如果您使用范围切换,它只会夹住运算放大器和 ADC。如果您使用具有大量位的 ADC,则没问题。
如果您设法使传感器电容恒定且可重复,那么您可以调整 TIA 反馈上限以在一定程度上对其进行补偿。它不会是完美的,除非您设法将所有传感器构建得完全相同,或者您将 TIA 制成传感器组件的一部分,以便每个传感器都可以拥有其个性化的反馈上限,但它应该会有所帮助。
要进行校准,您需要能够用电阻器替换传感器,因此您需要一个连接器。
因此,首先您移除传感器并测量开路,这将为您提供包括所有寄生电容在内的设置响应,因此为了准确,所有接线必须相同,只是传感器被移除。或者您可以使用没有液体的虚拟电化学传感器,因此它具有无限的电阻,但它仍然具有在化学溶液中使用时的电容。
然后您可以用已知的电阻值替换传感器并再次测量。或者,为了获得更好的结果,您可以将已知电阻值与未浸入溶液的传感器并联,因此唯一的变化是电阻,而不是电容。
该方法类似于 2 端口网络分析仪校准,但您可能可以忽略大部分术语,只使用两个校准点,即开路和“已知负载”。您可以查找相关文献,或者您可以绘制传感器、无传感器和校准电阻器的各种组合的示意图……然后计算其阻抗,在另一侧放置“=”符号和测量数据,并求解该方程组。
如果数学正确,最终结果只是测量数据和校准数据之间的一堆复杂的乘法、除法和减法,因此编程并不难。