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.

[参考译文] ADS114S08:ADS114S08随机数据损坏

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1330425/ads114s08-ads114s08-randomly-data-corruption

器件型号:ADS114S08

我正在使用 ADS114S08进行电流测量、但它会随机导致数据损坏。

器件配置概述:
-内部4MHz OSC
-数据格式是带有 CRC 的数据
-单端
- PGA 已禁用
-数据速率为2000

我想使用读直接模式按顺序切换和测量输入通道。 我发送以下命令并同时读取数据。 (next_CH 每次递增、如果达到最后一个通道、则会绕回。)
0x42、0x01、(next_CH<<4 + 0xc)、0x0
将对所有接收到的数据进行 CRC 检查、但有时会报告 CRC 错误。 频率可能有几个%。
ADC 通过 SPI 连接到微型计算机板、但 DRDY 未连接、以减少布线次数。 除了 DRDY 监控、会应用足够的等待(656usec 或更高)。

我猜这是一些时序问题、因为如果使用 RDATA 命令、则看不到相同的问题、但即使延长转换等待、也无法解决。 是否有已知问题或某种想法可解决该问题?

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

    Hi Yui Sakazume,

    您的命令序列让我有点困惑、因为您在传输4个字节时、PGA 寄存器始终是固定的。  您是否也启用了 STATUS 字节?

    如果通过使用 RDATA 解决了问题、则问题很可能是与使用计时器而不是监控 DRDY 有关的时序。  使用 RDATA 命令可阻止将传入转换结果传输至输出缓冲区、直到读取所有转换数据。  使用 Read Data Direct 时、必须在下一次转换结束或数据损坏可能发生并破坏 CRC 结果计算之前完全读出转换结果。

    时序问题的发生方式是内部时钟与微计时器相比可能会随时间漂移。  656.3us 转换周期假设4.096MHz 为精确振荡器(但器件规范为+/- 1.5%)。  根据多路复用器延迟设置、还存在一些额外延迟。  多路复用器延迟设置的默认延迟是额外的54.7us。  因此、假设精确的时钟、多路复用器写入解码后的延迟时间为656.3us + 54.7us = 711us。  由于时钟可能会发生漂移、精度级别会发生变化、您会遇到一个小窗口、在该窗口中下一个转换数据结果可能会中断从输出缓冲区进行的读取。

    如果无法使用专用 DRDY 引脚、我建议使用微监控器 DOUT/DRDY 引脚来缩短时序、从而确保在正确的时间范围内读回转换数据。  要在轮询引脚时使用此方法、需要您从寄存器读取中强制 DOUT/DRDY 为高电平、然后监控引脚是否发生高电平至低电平转换。  如果您有备用 GPIO 引脚、则可以将 DOUT/DRDY 连接到微控制器的 SDI 和 GPIO。  然后、为 GPIO 启用一个中断、寻找一个高到低的转换、以启动转换结果读取。

    如果无法实现、则建议使用单次模式或使用 RDATA 命令。  如果使用单次模式、则可以替换通信序列中的 start 命令。 这现在将变为 0x42、0x00、(next_ch<<4 + 0xc)、0x08 (启动命令)。

    如果仍有问题、我建议使用逻辑分析仪来捕获通信内容、以帮助确定出现问题的原因。  您需要确保微代码正确捕获数据以及正确计算 CRC 结果。

    此致、

    鲍勃 B

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

    尊敬的 Bob:

    感谢您的回复。
    抱歉、我的解释不正确。 请让我更正描述。
    不使用状态字节、WREG 命令为0x42、0x01、(next_ch<<4 + 0xc)、使用3字节传输。

    另外、我注意到 WREG 命令的第二个字节是错误的。
    数据表中的详细信息。
    '第二个命令字节是要写入的寄存器数量(减1):'
    因此、它应为0x0。 我修复了它,昨天尝试,但问题没有解决。

    我已经尝试将等待时间延长到10倍或以上、但问题未解决。

    通信过程如下、这基本上是正确的吗?
    1.将 CS 设为低电平
    2.等待711us 或以上
    3.同时发送 WREG 命令和接收数据
    4.将 CS 设为高电平

    报告 CRC 错误时、数据字节通常从0xFF 或0x00开始。 这可能是线索。

    此致、

    余一

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

    尊敬的 Yui:

    3字节传输和数据捕获对于该用例是正确的。  根据您的顺序、我将更改为:

    1. 将 CS 设为低电平
    2. 发送 WREG 命令并同时接收数据
    3. 将 CS 设为高电平
    4. 等待711us 或以上

    如果噪声强到足以作为外部时钟出现、SCLK 上的任何杂散噪声都将导致问题。  您使用的 SCLK 频率是多少?

    如果仍然有问题、我强烈建议在逻辑分析仪上收集数据、以便我们了解发生通信错误时实际发生的情况。  或者、您可以遵循我以前的建议。

    此致、

    鲍勃 B