This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ADS1256:对于100Hz 及以上的模拟正弦输入频率、ADC 输出不正确

Guru**** 2541070 points
Other Parts Discussed in Thread: ADS1256

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/855557/ads1256-adc-output-is-not-correct-for-100hz-and-above-analog-sine-input-frequency

器件型号:ADS1256

您好!

我正在使用 ADS1256。

固件采用 Python、该 Python 来自 GitHub。 使用 PibyADC - PYTHON 模块将基于 SPI 总线的模数转换器与 Raspberry Pi 相连。

在固件中、使用 Read_Continuous 方法读取模拟信号。

设置如下:

数据速率= 2Ksps

PGA = 1

输入缓冲器关闭。

时钟频率= 7.86Mhz。

我将 ADC 通道0用于模拟输入。

模拟输入为正弦波、频率为1Hz、10Hz、100Hz、1kHz。

对于1和10Hz, 我将获得正确的输出频率1和10Hz。

问题是在100Hz 之后无法获得输出。

请帮助我解决上述问题。

谢谢、

Rashmi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rashmi、

    欢迎访问 TI E2E 论坛!

    当您说"100Hz 以上的频率无法获得输出"时、您是指您根本看不到任何数据、还是您看到了不正确的数据?

    我知道 ADS1256的数字滤波器将在2kSPS 数据速率下略微衰减100Hz 信号(大约-0.1dB)、但我仍希望在输出端看到正弦波。

    我听说其他人在使用某些基于 Python 的 SPI 软件库与 Raspberry Pi 上的 ADS1256进行通信时遇到问题(https://e2e.ti.com/support/data-converters/f/73/p/475295/1788391)。 问题在于、当 ADS1256配置为某些更高的数据速率时、其中一些库不够快、无法从 ADC 捕获数据。

    您可能会考虑将示波器或逻辑分析仪连接到 SPI 引脚和"/DRDY "、以查看 RasPi 是否 能够跟上 ADC 的步伐并在每个/DRDY 下降沿捕捉数据。

    另一个需要注意的问题是捕获数据的时间。 在连续捕获模式下、需要在下一个/DRDY 下降沿之前很早就读取数据。 ADC 数据从寄存器中移出、该寄存器在/DRDY 变为低电平时更新。 因此、如果您在/DRDY 下降沿期间读取数据、则数据将被损坏(即、它将是旧转换数据和新转换数据的混合)。 理想情况下、数据应在/DRDY 下降沿之后立即(或至少很快保持一致)输出时钟。 如果您看到数据在/DRDY 下降沿之后的不同时间随时钟移出、则可能表明微控制器不符合 ADC 的输出数据速率。  

    让我知道这一点很有帮助!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chris:

    感谢您的回答。

    我在 ADC 输出端获得100Hz 模拟输入信号的正弦波(通过在 Excel 中绘图进行检查)。

    问题是在输入频率为250Hz、500Hz 和1KHz 时每个周期不会获得更多样本。

    基本上、有 ADC 数据转换和从 MCU 时间读取数据。

    尽管采样率已更改为3750 SPS,但每个周期的采样数不多,而且正弦波也不正确。

    因此、通过 SPI 读取数据到 MCU 会增加延迟。 请确认。

    当前 SPI 频率为 976563Hz。

    是否可以安全地更改为 1953125Hz。

    或任何其他选项来加快数据读取过程。

    提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rashmi、

    我建议查看示波器上的/DRDY 和 SPI 信号、以检查以下两点:

    1. 通过提高 ADC 的数据速率、您应该会看到/DRDY 下降沿之间的时间减少。 /DRDY 下降沿之间的时间应与所选输出数据速率的周期相关。

    2. 查看 SPI 通信、查看您的 MCU 是否以与 ADC 生成转换结果相同的速率读取数据。 MCU 可能会尽可能快地读取数据、而提高 ADC 的数据速率不会为您提供任何额外的数据、因为 MCU 无法跟上步伐。

    ADS1256 SCLK 的频率最高可达 ADC 主时钟频率的四分之一。 因此、如果您使用的是标称7.68MHz 主时钟、则 SCLK 的速度可高达1.92MHz。 以 SCLK 的最大频率运行有助于减少 MCU 时钟输出转换结果所需的时间。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chris:

    感谢您的宝贵响应。

    我将检查 DRDY 信号。

    我已在代码中将数据速率配置为30000 SPS。

    我正在以连续模式读取 ADC 数据。

    当我运行脚本时,我每秒只获得10000个样本。

    请您解释原因以及我如何解决该问题。

    我的另一个问题是、我使用序列方法通过两个通道读取数据。

    我观察到的是2000sps、每个通道每秒收到大约500个样本。

    请您解释原因以及我如何解决该问题。

    提前感谢。

    Rashmi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rashmi、

    对于30kSPS 数据速率、您是在通道之间进行多路复用、还是在持续转换时仅获得10kSPS?

    ADS12配置 的数字滤波器是一种移动平均值滤波器、需要多个样本才能计算平均值。 第一个转换结果的计算时间始终较长、但从那时起、您将以预期的数据速率输出数据。 但是、当您在通道之间进行多路复用时、必须清除此移动平均滤波器、然后重新计算第二个通道上的第一个新结果。

    查看数据表中的表13和14、了解多路复用时可以实现的最大数据吞吐量。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chris:

    感谢您的回答。

    对于30KSPS,我在连续模式下读取,而不进行多路复用。 输出仅为10KSPS。

    表15显示了30KSPS 下的设置时间(DRDY 周期)为5。

    这是我获得10KSPS 的原因吗? 请确认。

    谢谢  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rashmi、

    如果您连续测量单个 ADC 通道(不进行多路复用)、则应获得预期的输出数据速率。 然而、ADS1256的输出数据速率确实取决于晶振/时钟频率。 30kSPS 数据速率假设您提供7.68MHz 时钟。 但是、如果您使用较慢的时钟频率、则 ADC 的输出数据速率将按比例缩放。 因此、如果您将 ADS1256编程为30kSPS、但仅使用2.56MHz 时钟为其计时、则10kSPS 将是预期的输出数据速率。

    稳定时间/多路复用器延迟仅与第一个 ADC 转换结果有关。 每次切换通道或重新启动转换时、第一个结果所需的时间将比进行中的数据速率长5倍。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chris:

    感谢您的宝贵响应。

    今天、我检查了 DRDY 引脚状态。 我发现 MCU 无法与 DRDY 引脚保持一致。 我想这就是我们获得30K 样本的大约10K 样本的原因

    采样率。

    我将高精度 AD/DA 板与使用 Python 模块的 Raspberry Pi 搭配使用。  

    您能否推荐任何其他建议来解决此问题。

    提前感谢。