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.

[参考译文] ADS131E08:使用 RDATA 命令读取数据、结果为损坏

Guru**** 2391415 points
Other Parts Discussed in Thread: ADS131E08

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1405151/ads131e08-read-data-with-rdata-command-and-the-result-is-corruption

器件型号:ADS131E08

工具与软件:

您好、TI 专家。

当我使用 ADS131E08收集数据时,我返回的数据是错误的,我使用了 RDATA 命令 。 硬件接口为电源 AVDD = 3.3V、芯片的内部时钟为2.048MHZ、单端信号通过(CH1~CH6)输入。

使用的 MCU 是 C2000 DSP280039、我的软件配置过程如下:

初始化 SPI、4MHz、16位、极性0、相位0;

 ;手动11.1上电时序复位 ADS131e08

3.发送 SDATAC 命令和发送 STOP 命令;

4. Confg1 0xd2h、多数据回读模式、 采样率16ksps;

5、Confg3 0x40h、使用外部基准源(3V);

用于配置0x10h 的6~通道寄存器、其中 CH1、CH6启用且 CH7和 CH8禁用;

7、发送启动命令;

8、将 SPI 的 SCLK 频率更改为10MHz;

接下来、我  在15KHz EPWM 中断函数中发送了 RDATA 命令、然后发送剩余的216个 SCLK 以读取八个通道的数据。 CS 引脚在整个过程中保持低电平。 由于15K 的中断频率与 ADS131E08设定的采样频率异步、因此会出现 DRDY 事件与读取数据时钟 SCLK 重叠的现象、但手册说明这不会导致数据损坏、这可以在实际测试中看出。

示波器波形:

1->SCLK ;2->DOUT (MISO);3->DIN (MOSI) ;4->DRDY

数据损坏发生在以下时间:

我们测试了相关的数据错误时间、测试方法为:

1、 仅读取通道2数据的高8位(24位数据的高8位)、因为通道2的输入约为1.5V。如果数据突然变化、高8位数据将发生变化。 它与上述配置的区别是:SPI 极性1、相位0。

2 μ s、高8位数据将发生变化、上拉 CS 引脚并捕获通过它的示波器波形。

数据正常时间的波形:1:CS;2、SCLK、3;DIN (SIMO);4、DOUT (SOMI)

正常数据高8位0011111:

异常时间高8位数据011111:

最后、使用单个转换指令 RDATA 时、DRDY 事件是否真正影响数据读取?  

我们想知道问题是什么。  期待您的回复、谢谢!

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

    您好!

    您似乎正在使用不同的 SPI 模式。  ADS131E08应始终使用 SPI 设置 CPOL=0、CPHA=1。  SCLK 应空闲为低电平、ADS131E08在 SCLK 下降沿捕获数据(DIN)、并在上升沿启动数据(DOUT)。  主机处理器还应在 SCLK 上升沿(MOSI)启动数据、并应在 SCLK 下降沿(MISO)捕获数据。

    您将写入 CONFIG1和 CONFIG3寄存器。  作为测试、我建议从这些寄存器中读回值、以确认您已正确配置所有寄存器。

    您可以发送包含5个字节(40个 SCLK)的单个 SPI 帧来读取 CONFIG1、CONFIG2和 CONFIG3。

    发送0x21 02 00 00h 并确认 CONFIGx 寄存器的值。

    此外、使用示波器并监测 DRDY 线;这应该以16kHz 的预期数据速率切换。  还请提供显示 ADS131E08所有引脚连接的原理图图片。

    使用 RDATA 将始终回读有效结果。  但是、如果您读取数据的速度不够快、则只会错过转换读数、但获得的读数将有效。  根据我所能知道的、看起来您仍然处于加电默认 RDATAC 模式。

    此致、
    Keith Nicholas
    精密 ADC 应用

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

    您好、Keith Nicholas

    使用的原理图设计如下:Ω

    开始时、使用的 SPI 模式也是 SPOL=0和 SPHA=1、但无法正常建立通信。 但是、使用 SPOL=0、SPHA=0或 SPOL=1、SPHA=0时、可以正常建立通信。

    同时、我们尝试使用仿真器读取寄存器配置、该配置与所需设置一致。

    在初始化的开始、我们尝试发送 SDataC 指令。 初始化完成且寄存器配置完成后、我们会尝试在重新初始化 SPI 速率并读取转换后的数据之前再次发送 SDataC 指令。 所有后续数据读取过程都会发送 RDATA 指令。

    期待您的回复、谢谢!

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

    您好!

    原理图看起来不错。您应该能够从 ADC 读取转换结果。  但是、务必将旁路电容器放置在非常靠近器件电源引脚的位置。  为获得最佳性能、我们建议为 ADC 上的每个电源引脚使用单独的旁路电容器。  我这些电容器不接近于 ADS131E08封装、您可能会发生不可预测的运行情况。

    请捕获用于捕获数据的 SPI 帧的第一部分。  只需捕获前56B (SCLK)、其中包括 RDATA 命令、状态字和通道1转换结果。  包括 1:CS;2、SCLK;3、DIN (SIMO);4、DOUT (SOMI)、和以前一样。  我想确认时间是否正确。  另外、当您捕获此数据时、请提供一个恒定的输入电压、并告诉我该电压值、以便查看转换结果是否正确。

    此外、查看您先前的波形捕获、DIN (SIMO)在其上有活动、下面以蓝色圈出;DIN 在通道数据回读期间应处于低电平。  只有在发送 RDATA 命令时、应该有活动的时间是在 SPI 帧的前8个 SCLK 期间。

    此致、
    Keith

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

    您好、Keith Nicholas

    SPI 配置设置为16位模式、ADC 配置设置为16kHz、极性0、相位0。 下图显示了 SPI 帧的64位数据、包括 RDATA 命令、STAT3字和通道1的转换结果。 通道1的数据为1.5V、外部基准测试的电压为3V。


    此外、在数据检索期间、DIN 不处于低电平、因为数据量太大。 为了便于数据读取、DIN 被分配了一个特殊值并避开命令字。 测得的数据似乎不受该因素的影响。

    期待您的回复、谢谢!

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

    您好、Zhang、

    从上面的示波器图中可以看出、您在使用 f-SCLK=ROM 20MHz。  (200ns 内4个 SCLK 周期)。   由于很难判断是否满足建立时间和保持时间、因此我建议将 F-SCLK 降低到低得多的频率、例如8MHz、以排除任何时序问题。

    此外、当使用 RDATA 命令从 ADS131E08读取数据时、建议您在为帧的其余部分发送 RDATA (12h)后保持 DIN 低电平。  即使未发送有效命令、ADC 仍必须处理数据、如果是意外值、您可能会出现异常行为。

    此致、
    Keith

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

    Keith Nicholas、您好!

    下图显示 SPI 速率为8MHz、其他所有值保持不变。 事实上、我们尝试以较低的速率读取数据、得到了相同的结果。

    在实际应用中、发送 RDATA 命令后、我们降低 DIN、但结果仍然相同。

    期待您的回复、谢谢!

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

    您好、Zhang、

    发送 RDATA 命令后保持 DIN 为低电平、您现在是否能够读取正确的转换结果?  您是否发送了包含 RDATA (8b)、STATUS (24b)和8个转换结果通道(8x 24b)的完整 RDATA 帧?

    将/CS 设置为低电平

    发送 RDATA、8个 SCLK

    发送24x SCLK、捕获状态

    发送192x SCLK、采集8x 通道

    将/CS 设置为高电平、SPI 帧结束、复位 SPI 端口

    此致、
    Keith

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

    Keith Nicholas、您好!

    发送 RDATA 指令后、将 DIN 保持在低电平仍与初始问题相同、在 ADC 完成新数据转换后、数据读取异常。 我们要发送的是一个完整的数据帧、其中包含224 * SCLK、包括 RDATA (8b)、STAT3 (4b)和来自其他通道(8 * 24b)的转换数据。
    此外、我们仅使用了一个 SPI 外设、所以/CS 是固定的低电平、应该不会影响正常的数据读取?

    期待您的回复、谢谢!

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

    您好、Zhang、

    尽管可以在多个转换周期读数中将/CS 引脚保持为低电平、但我不建议使用这种方法。  SCLK 上的任何干扰都会被 ADC 解释为额外的时钟、且会破坏通信。  一旦通信损坏、您需要通过将/CS 置为高电平、然后再次置回低电平来复位 SPI 端口。  我建议对每个转换周期读数使用/CS、以复位 SPI 并尽可能降低 SCLK 线路上的噪声影响。

    我已经假设您在每一帧中都主动使用/CS;因为不是这样、这就解释了为什么一段时间后会出现错误读数。  您可以通过与处理器上 SCLK 源附近的串联电阻器正确端接、以及在 PCB 上实现良好的接地布局、来降低 SCLK 上的噪声。  然而、系统中的任何瞬变、即使布局非常好、仍然会在很长一段时间内引起问题。  因此、为了改进通信、您应该像前面所述的那样使用/CS 来获得 ADC 转换读数。

    此致、
    Keith

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

    根据您的说法、我们在每次读取数据之前将 CS 信号设置为高电平以重置 SPI、然后下拉芯片选择以重新读取数据。 然而、我们获得的结果与最初的结果一致、没有显示任何改善。
    事实上、并非所有通道数据被异常读取、只是在 ADC 新数据转换完成时 SCLK 从某个通道数据读取碰巧有异常时。

    期待您的回复、谢谢!

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

    尊敬的 Zhang:

    我需要与我的团队讨论、并将在周一下班前与您联系。

    此致、
    Keith

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

    张秋、您好!

    在您之前发送的下图中、您可以看到 DRDY 在您说收到"数据损坏"时停止切换。 如果 DRDY 停止切换、这意味着 ADC 不再转换、或至少 ADC 已重新启动转换过程。

    我不清楚导致此问题的原因、所以您可以尝试以下方法:

    1. 使用 CS 帧 RDATA 命令(请注意 SCLK > 4MHz 可在时钟沿输出所有数据)。 这意味着每次发送命令时、CS 都应从高电平开始、然后将 CS 拉至低电平、再发送命令、再将 CS 重新拉至高电平以结束帧
    2. 除 RDATA 命令外、在整个帧中保持 DIN 低电平
    3. 当有高电平到低电平转换时、使用 DRDY 信号触发数据回读、而不是使用异步计时器。 这意味着、您需要编写 FW 来查找 DRDY 转换、然后发送 RDATA 命令、然后在时钟沿输出所有数据(当然由 CS 构成)

    这就是我们期望 ADC 运行的方式、因此这应该运行得非常好。

    请向我们发送示波器屏幕截图、显示执行此操作时会发生什么情况。 此外、您可能需要向我们提供逻辑分析仪图、而不是示波器图、以便我们可以看到整个数据事务。 使用这些示波器屏幕截图很难诊断您遇到的问题

    此外、您还提到、您要测量的信号是单端信号:

    [报价 userid="620577" url="~/support/data-converters-group/data-converters/f/data-converters-forum/1405151/ads131e08-read-data-with-rdata-command-and-the-result-is-corruption "]硬件接口为电源 AVDD = 3.3V、芯片内部时钟为2.048MHZ、单端信号输入为(ch1~ch6)。

    请注意、当使用单极电源(在您的情况下、AVDD = 3.3V)时、ADS131E08无法测量单端(以接地为基准)输入。 我在下面复制的数据表中的公式4很明显地证明了这一点

    -Bryan

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

    您好、  Bryan:

    我们使用您提到的第一点和第二点、在读取数据时会有例外情况。 但根据您提到的第三点、我们采用 DRDY 外设中断方法来读取数据、数据是正常的、这样可以避免数据异常的发生。
    但是、根据手动说明、使用 RDATA 命令不需要检查 DRDY、即可以异步读取数据。 然而,实际现象与手册冲突。 因此、我们是否应该使用 RDATA 来确定它是否可以执行异步操作(在这里、异步操作不需要检查 DRDY 是否已更改、即可以随时读取正常数据)。
    我们的问题是:这是手动说明中的错误、还是由于我们错误地使用了 RDATA 命令。
    此外、手册中的相关说明如下所示:

    我们使用逻辑分析仪来捕获异常数据波形、其中时序满足您对第一点和第二点的要求、但不满足第三点的要求(因为我们想验证我们的问题是否正确)。 其中、仅读取了64个 SLCK、最后一个字节(0x3F)是通道1的最高位数据、其中0x3F 是正确数据。
    同时、我们在 DRDY 信号重叠时捕获了通道1的最高位数据。 根据逻辑分析仪的分析、数据(0x5F)是异常的、这间接证实了我们的假设(DRDY 重叠确实会影响数据的正确性、手册指出错误)。
    我们只需要您确认我们的假设是否正确。
    逻辑分析仪的图像如下:

    期待您的回复、谢谢!

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

    张秋、您好!

    似乎在 DRDY 从高电平切换至低电平之前、期间或紧接着(几微秒)发送命令时存在问题。 因此、这不是数据本身问题、而是命令问题。 数据表中有效地说明了这一点、但可以更清晰地描述。

    由于您将异步采样、最终将出现这种情况、您将得到错误的数据。 这篇 e2e 文章发布了有关该问题的提示: https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/615552/ads131e06-corrupted-data-with-rdata-command

    我对您的系统的建议:

    1. 在数据随时钟移出的整个过程中保持 DIN 为低电平。 我知道你说到目前为止没有问题、但将来肯定会有问题。 您对此承担风险
    2. 在数据读回前后切换 CS。 可以将 CS 连接为低电平、但不建议这样做、因为在不切换 RESET 引脚(或对 ADC 上电/下电)的情况下无法复位 SPI 接口。 但是、它应该起作用
    3. 使用 DRDY 作为中断来确定何时读取数据、即同步读取数据至 DRDY。 这将避免 RDATA 命令及时移位、最终与 DRDY 从高电平切换为低电平发生"冲突"、从而导致数据损坏

    -Bryan

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

    尊敬的 Bryan Lizon:

    我们将采纳您的建议、非常感谢。

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

    嗨、他是 bc、

    很好理解、感谢您的确认。 如果您还需要其他信息、请创建新主题、我们将为您提供支持

    -Bryan