Delta Sigma ADC 驱动程序/滤波器问题

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

大家好,

我想问一些关于在 PSoC 5LP 上驱动 Delta Sigma ADC 的问题。 首先,简单介绍一下我的用例:我想使用 Delta Sigma ADC 来测量介于 100 nA 到 100 uA 之间的非常小的电流。 我已经证明使用这款设备的先前版本我可以很好地做到这一点,而且准确性相当高。 我使用的是配置为 20 位分辨率的 ADC,最大采样速率约为每秒 180 次。 我还要为它多路复用 14 个输入。

在我的最新版本中,我认为明智的做法是缓冲然后应用低通滤波器,以尽可能为ADC提供最干净的信号。 我首先进行缓冲的原因是我还将该信号发送到比较器以进行快速过流检测。 以下是缓冲器/过滤器的示意图:

henmill_0-1699547027632.png

但是最近我在数据表中注意到了这个规范:

henmill_1-1699547099181.png

所以我最大的问题是,在带宽已经很低的时候应用过滤器是不是在浪费精力和金钱(并增加更多的抵消量)? 在上面的示意图中,截止频率为 50 Hz。 由于稳定时间慢以及所有输入的多路复用,我甚至准备增加该频率。

在你问之前,还有一些细节:我有点坚持低边单端测量,因为我已经用完了 GPIO 了。 不过,我可能会考虑切换到仪表放大器,然后"将感应电阻器"提高到地上以更好地消除噪声(请告诉我对此的想法)。 不过,我也可以说服使用 GPIO 扩展器来重新获得用于差分 ADC 测量的引脚...

这就是要点,我欢迎对这个问题提出任何意见,并提前感谢您的帮助!

-H

 

0 点赞
1 解答
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

为了测试 PSoC5 Delsig-ADC 的性能,我起草了两个项目,比较了原生 20 位模式和 16 位模式下的 Delsig-ADC 与随后使用带抽取器的自定义二阶移动平均滤波器的平均值。 比较了 (A) 60Hz 0.5V 正弦信号抑制和 (B) 短路输入的本底噪声。

与原生 20 位模式相比,使用自定义滤波器对 60Hz 信号的抑制效果略好,并且噪底约为原生 20 位模式的 1/2。 同时,使用自定义滤波器可以提供更快的更新速率(29Hz),而在20位原生模式下只有10Hz。 此外,16 位模式下的原始(未经过滤的数据)以更快的速率(2560Hz)提供,这可能对过流检测很有用。

16 位模式下的估计灵敏度约为 (噪声/2^16)x(adc_Range/buffer_Gain)=(50/65536)*(2 x 0.064V/8)= 12uV。

附带的项目包括所有必要的组件。

 

 

图 1。 ADC 测试的项目示意图,配置为 20 位分辨率、10Hz 输出(模数转换器时钟为 163.840kHz)。 在测试 A 中,输入已连接到板载信号发生器的 60Hz 0.5VP-p 正弦输出(未显示)。 在测试 B 期间,ADC 输入短路至 Vref =1.02V (Pin_03)。

DelSigADC_01a_A.PNG

 

图 2。不同 SPS 速率下的 20 位 ADC 输出:左-ADC 输出速率为 11 Hz(ADC 时钟为 180.224kHz), 对-ADC 输出速率为 10 Hz(模数转换器时钟为 163.840kHz)。 ADC 输入范围:1.02 +/-1.02 V, 缓冲增益 =1。 通过删除 4 个 LSB,可以将 20 位输出降低到 16 位。 数据是使用 S erialPlot 制图软件绘制 的。该图表明,在 10Hz SPS 下可以抑制 60Hz 的寄生噪声,但在 11Hz 时不能抑制。

DelSigADC_01a_Chart2_60Hz_05Vpp_11Hz-10Hz .PNG

 

 

图 3。Delsig-ADC 的项目示意图,配置为 16 位分辨率、2560Hz 速率输出(ADC 时钟为 163.840kHz)和自定义输出滤波器。 采样数据以乒乓模式存储到内存缓冲区(Buffer0 和 Buffer1,各为 256 个点)中。 填充缓冲区后,将触发中断,开始数据处理。 输出速率为(adc_Sampling_Rate /buffer_Length)= 2560/256 = 10Hz。 在测试 A 中,输入连接到来自内部信号发生器的 60Hz 0.5vp-p 正弦信号。 在测试 B 中,ADC 输入短路至 Vref =1.02V (Pin_03)。

DelSigADC-DMA-Filter_01a_A.PNG

 

图 4。 自定义移动平均分量用于过滤 16 位 ADC 数据。 过滤器是二阶的,带有三角形(Bartlett)窗口和可选的抽取器。 出于速度原因,滤镜的长度只能设置为 2 的次方(2^宽度)。 滤波器长度配置为 256 以匹配缓冲器的长度和 ADC 采样率,因此 60 Hz 噪声落入滤波器的第 6 个零点内:Fsps = (60 Hz x 2^宽度)/k = 60 * 256/ 6 =2560 Hz。 在此采样率下,滤波器还可以抑制 50Hz 噪声,该噪声降至第 5 个零点。 (可选)抽取系数设置为 256,以返回每个缓冲区末尾的数据(10 Hz)。 通过将缓冲长度缩短到例如,可以将返回速率提高到 20Hz 128(并相应地更改抽取系数)。

DelSigADC-DMA-Filter_01a_MAFilter.PNG

 

 

图 6。 测试 A:比较使用 S erial Plot 绘制的 60 Hz 噪声抑制值;左-原生 20 位,SPS 10Hz;右-16 位,SPS 2560Hz 与自定义 MA 滤波器,缓冲长度 256。 ADC 输入范围为 +/-1.02V,缓冲增益 = 1。 20 位输出减少了 4 位,以与 16 位标度相匹配。 信号发生器产生 60Hz、0.5Vp-p 的正弦输出。 在这两种情况下,60Hs似乎都被抑制了,但是自定义滤镜之后的噪声振幅似乎约为原生20位模式的一半。

DelSigADC_01a_Chart2_60Hz_05Vpp_20bit-16bit filter256_B.PNG

 

 

 

图 7。测试 B:ADC 输入短路时的噪底:左-本机 20 位,SPS 10Hz;右-16 位,带自定义滤波器的 SPS 2560Hz,缓冲长度 256。 ADC 范围为 +/-0.064V, 缓冲增益 = 8。 20 位 ADC 输出减少了 4 位,以匹配 16 位刻度。 机载信号发生器仍在运行但未连接。自定义滤波器(16 位 ADC)之后的本底噪声似乎比 20 位模式下低大约 2-2.5 倍。 16 位模式下的估计灵敏度为(噪声/2^16)x(2 x ADC_Range/buffer_Gain)=(50/65536)x(2 x 0.064V/8)= 12uV。

DelSigADC_01a_Chart2_Shorted_20bit-16bit filter256_C.PNG

 

 

 

图 8。使用 PSoC 注释库 v1.0 创建的项目注释SerialPlot 制图软件的 UART 输出使用 KitProg 中内置的 USB-UART 接口执行(无需外部连接)。

DelSigADC_01a_KIT-059_1M.PNG

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-5-3-1/Delta-Sigma-ADC-driver-filter-Questions/m-p/643343

在原帖中查看解决方案

0 点赞
6 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

我有一些关于 Delsig-ADC 陷阱的一般性评论:

1。 PSoc5 Delsig-ADC “本地” 只有 16 位,通过采样后软件的平均值来实现 20 位分辨率。 因此,可以在 16 位模式下使用它以实现更快的响应,并在代码中对 ADC 输出进行自定义过滤。 如果滤波器针对输入信号进行了优化,则有可能实现更高的灵敏度。

2。大多数噪音来自 60Hz 的电源。 抑制 60/120Hz 对于实现高灵敏度最为重要。 例如,可以调整移动平均滤波器以抑制这些频率。

3。Delsig-ADC 的频率响应并不平坦,在采样频率的 0.5 倍时会降至几乎为零。 例如,如果采样频率为 20kHz,则 10kHz 正弦信号将具有零响应。 因此,Delsig-ADC 最适合对稳定的直流信号进行采样。

4。与使用外部 Opamp 和 PSoC5 相比,使用一系列廉价的外部 24 位 ADC,例如 HX711 和 PSoC4 可能更灵敏、更具成本效益。

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

PSoc5LP Delta-Sigma ADC 使用三阶调制器。 它以最大 20 位采样率运行,为 187 Hz。 调制器的响应为 sinc^3 (f)。 sinc^3 函数的 -3dB 点为采样率的 0.44 倍,因此带宽约为 40 Hz。 这与数据表非常吻合。 Sinc 函数的采样率为一半为空,采样率为整数+一半。 要抑制 60 Hz 噪声,请调整时钟速率使采样率为 60 Hz 的整数倍,这样可以将零值置于 60Hz 噪声的顶部,并且可以很好地抑制它。
必须确定积分非线性 (INL) 是否足以满足您的需求。

----Dennis Seguine,英飞凌应用首席工程师。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

谢谢你们俩的意见。 看来你们俩都遇到了一个关于ADC响应的重要点——它使任何频率在1/2时为零,整数倍数为采样频率的1/2。

因此,说白了,如果我的目标是抑制来自主电源的噪声,那么如果Delta Sigma调制器可以轻松抑制60Hz的噪声,那么实现有源LPF是没有意义吗?

例如,现在我正在考虑将采样率设置为 120Hz 并放弃巴特沃思滤波器级。 我现在也非常倾向于尝试使用仪表放大器进行高边差分测量,而不是简单的低边缓冲器。

以下是我想让你考虑的示例场景:假设我正在尝试在 1k 感应电阻器上测量 100nA。 这将在整个感官上产生 100uV 的潜力。如果我的 ADC 测量范围为 0-2*Vref(0-2.048V)和 20 位分辨率,则大约为 50 个计数。 你认为如果我使用高边差分(到单端)缓冲级而不是低边缓冲区,我的精度会好得多吗?

我还要指出,我在样本上使用了一个非常漂亮的中值滤波器函数,该函数似乎可以很好地对信号求平均值。 但是需要大量样本(因此也需要时间)才能看到响应。 因此,如果我能减少样本中位数以加快响应速度,那就太好了。

再说几句话,我也可以对信号施加一些增益,或者有可能增加感应电阻器的尺寸。 但是我的竞争是对宽动态范围的渴望,所以在这两条路线上我能走多远都是有限的。

再次感谢您的所有投入,

-H

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-5-3-1/Delta-Sigma-ADC-driver-filter-Questions/m-p/642424

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

H:
中值滤波器很酷,但计算起来很混乱。
关于你的测量需求,我有很多问题。
我很乐意和你谈谈权衡取舍。通过私人消息或直接电子邮件发送您的电话号码:

dennis.seguine@infineon.com
我远程办公(在蒙大拿州的家中),选择合适的时间并设置 zoom 或 webex 会议。

----丹尼斯

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-5-3-1/Delta-Sigma-ADC-driver-filter-Questions/m-p/642433

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

是的,中值滤波器确实需要大量的动态分配内存。

感谢您主动提出与我讨论这个问题,我会通过电子邮件与您联系。 🙂

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-5-3-1/Delta-Sigma-ADC-driver-filter-Questions/m-p/642473

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

为了测试 PSoC5 Delsig-ADC 的性能,我起草了两个项目,比较了原生 20 位模式和 16 位模式下的 Delsig-ADC 与随后使用带抽取器的自定义二阶移动平均滤波器的平均值。 比较了 (A) 60Hz 0.5V 正弦信号抑制和 (B) 短路输入的本底噪声。

与原生 20 位模式相比,使用自定义滤波器对 60Hz 信号的抑制效果略好,并且噪底约为原生 20 位模式的 1/2。 同时,使用自定义滤波器可以提供更快的更新速率(29Hz),而在20位原生模式下只有10Hz。 此外,16 位模式下的原始(未经过滤的数据)以更快的速率(2560Hz)提供,这可能对过流检测很有用。

16 位模式下的估计灵敏度约为 (噪声/2^16)x(adc_Range/buffer_Gain)=(50/65536)*(2 x 0.064V/8)= 12uV。

附带的项目包括所有必要的组件。

 

 

图 1。 ADC 测试的项目示意图,配置为 20 位分辨率、10Hz 输出(模数转换器时钟为 163.840kHz)。 在测试 A 中,输入已连接到板载信号发生器的 60Hz 0.5VP-p 正弦输出(未显示)。 在测试 B 期间,ADC 输入短路至 Vref =1.02V (Pin_03)。

DelSigADC_01a_A.PNG

 

图 2。不同 SPS 速率下的 20 位 ADC 输出:左-ADC 输出速率为 11 Hz(ADC 时钟为 180.224kHz), 对-ADC 输出速率为 10 Hz(模数转换器时钟为 163.840kHz)。 ADC 输入范围:1.02 +/-1.02 V, 缓冲增益 =1。 通过删除 4 个 LSB,可以将 20 位输出降低到 16 位。 数据是使用 S erialPlot 制图软件绘制 的。该图表明,在 10Hz SPS 下可以抑制 60Hz 的寄生噪声,但在 11Hz 时不能抑制。

DelSigADC_01a_Chart2_60Hz_05Vpp_11Hz-10Hz .PNG

 

 

图 3。Delsig-ADC 的项目示意图,配置为 16 位分辨率、2560Hz 速率输出(ADC 时钟为 163.840kHz)和自定义输出滤波器。 采样数据以乒乓模式存储到内存缓冲区(Buffer0 和 Buffer1,各为 256 个点)中。 填充缓冲区后,将触发中断,开始数据处理。 输出速率为(adc_Sampling_Rate /buffer_Length)= 2560/256 = 10Hz。 在测试 A 中,输入连接到来自内部信号发生器的 60Hz 0.5vp-p 正弦信号。 在测试 B 中,ADC 输入短路至 Vref =1.02V (Pin_03)。

DelSigADC-DMA-Filter_01a_A.PNG

 

图 4。 自定义移动平均分量用于过滤 16 位 ADC 数据。 过滤器是二阶的,带有三角形(Bartlett)窗口和可选的抽取器。 出于速度原因,滤镜的长度只能设置为 2 的次方(2^宽度)。 滤波器长度配置为 256 以匹配缓冲器的长度和 ADC 采样率,因此 60 Hz 噪声落入滤波器的第 6 个零点内:Fsps = (60 Hz x 2^宽度)/k = 60 * 256/ 6 =2560 Hz。 在此采样率下,滤波器还可以抑制 50Hz 噪声,该噪声降至第 5 个零点。 (可选)抽取系数设置为 256,以返回每个缓冲区末尾的数据(10 Hz)。 通过将缓冲长度缩短到例如,可以将返回速率提高到 20Hz 128(并相应地更改抽取系数)。

DelSigADC-DMA-Filter_01a_MAFilter.PNG

 

 

图 6。 测试 A:比较使用 S erial Plot 绘制的 60 Hz 噪声抑制值;左-原生 20 位,SPS 10Hz;右-16 位,SPS 2560Hz 与自定义 MA 滤波器,缓冲长度 256。 ADC 输入范围为 +/-1.02V,缓冲增益 = 1。 20 位输出减少了 4 位,以与 16 位标度相匹配。 信号发生器产生 60Hz、0.5Vp-p 的正弦输出。 在这两种情况下,60Hs似乎都被抑制了,但是自定义滤镜之后的噪声振幅似乎约为原生20位模式的一半。

DelSigADC_01a_Chart2_60Hz_05Vpp_20bit-16bit filter256_B.PNG

 

 

 

图 7。测试 B:ADC 输入短路时的噪底:左-本机 20 位,SPS 10Hz;右-16 位,带自定义滤波器的 SPS 2560Hz,缓冲长度 256。 ADC 范围为 +/-0.064V, 缓冲增益 = 8。 20 位 ADC 输出减少了 4 位,以匹配 16 位刻度。 机载信号发生器仍在运行但未连接。自定义滤波器(16 位 ADC)之后的本底噪声似乎比 20 位模式下低大约 2-2.5 倍。 16 位模式下的估计灵敏度为(噪声/2^16)x(2 x ADC_Range/buffer_Gain)=(50/65536)x(2 x 0.064V/8)= 12uV。

DelSigADC_01a_Chart2_Shorted_20bit-16bit filter256_C.PNG

 

 

 

图 8。使用 PSoC 注释库 v1.0 创建的项目注释SerialPlot 制图软件的 UART 输出使用 KitProg 中内置的 USB-UART 接口执行(无需外部连接)。

DelSigADC_01a_KIT-059_1M.PNG

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/PSoC-5-3-1/Delta-Sigma-ADC-driver-filter-Questions/m-p/643343

0 点赞