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.

[参考译文] ADS1158:间歇性信道跳接和示例故障问题

Guru**** 2551110 points
Other Parts Discussed in Thread: ADS1158

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/599299/ads1158-intermittent-channel-skipping-and-sample-glitch-problems

部件号:ADS1158

我正在一个应用程序中测试ADS1158,它出现了两个我希望很快解决的问题。

在多通道模式下,使用起始引脚,脉冲(SPI总线)命令或 自动扫描模式(在这种模式下,设备会自动步进通道并按顺序对每个通道进行采样),所有这些触发D2D转换的方法似乎都有两个问题:

1)信道索引偶尔会将同一信道的读数返回到后,然后跳过以下读数(根据样本随附的读取状态字节中的信道信息)。 随后的1-10样本本身似乎没有对应于缺失通道或其后的其他通道的值(即似乎比仅仅是通道指针错误更随机)。

2)偶尔(也是间歇性的)样本的值远超出(> 10 % 错误)其余样本的范围,这些样本全部在1 % 内或彼此之间的值更低。 我使用外部回路进行信号调节,但我认为这不是值故障的原因。

我认为这两种类型的错误可能是因为SPI速度太高,但降低却没有任何区别。 我想可能是时间问题,也可能是这个问题,但我在大多数样本转换/读取步骤之间增加了明显的延迟,这似乎也不能解决问题。

我想知道它是否与IC内部的硬件问题有关,但我想这应该已经解决了,所以有一点怀疑就是这个问题。

我们非常感谢您提供任何帮助,故障排除建议等!

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

    很抱歉回复延迟...

    1)跳过通道的最可能原因可能与代码中的/DRDY信号处理方式有关。 如果您正在轮询/DRDY并运行其他进程,则很可能会错过/DRDY下降边缘,从而导致跳过通道。

    我想了解的一些其他故障排除信息...
    -您是否使用中断监控/DRDY信号?
    -您的SCLK频率是多少?
    —ADS1158是如何配置的,具体而言,您使用的数据速率是多少?

    2)您是否使用(或您是否尝试过使用)"按命令读取数据"模式? 如果您正在轮询/DRDY并直接读取数据,此问题可能与第一个问题有关。 如果在/DRDY下降沿期间读取数据,您可能会得到一个无效的结果,该结果是旧转换数据和新转换数据的组合。

    如果您有一个可以共享的示意图或代码示例,如果您不想在论坛上发布它们,这也会很有帮助(您可以通过电子邮件将它们发送到pa_deltasigma_apps@ti.com)。

    此致,
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Chris:
    感谢您的回复和建议。
    我在while循环中轮询*DRDY,其中没有其他命令,等待更改为低(活动)状态,然后再获取下一个读数。
    根据我的理解,该信号应该读取引脚的状态,而不是边缘,对吗? 即使如此,我也不能更快地进行投票。

    问题不仅是跳过的通道,而且是明显相同通道的双倍读数(根据状态字节通道#,甚至设置了“新读数”位),然后有时会跳过之后的通道,有时会跳过自己的通道。
    SCLK是通过Arduino实现的,设置为1570万,但编译器将其降低到Atmel CPU可以执行的任何操作。 无论如何,我尝试了1MHz (及更差)的SPI,它似乎没有任何区别。
    我使用的是最慢的数据速率(DRATE [1:0]=0b00),读数之间的稳定延迟时间最长(DLY[2:0]=0b111)。

    我正在通过接收传输的前3个字节来读取数据*DRDY变低。 我似乎在接收到*DRDY激活后和设置START => LOW之后,在将其设置回HIGH之前,取得了更多的成功(即如果设置了50毫秒之类的巨大延迟,则会减少错误)。 我不清楚为什么在这些时候如此长时间的拖延会产生什么影响,但我希望有人能深入了解为什么这样做会更好。

    一个具体的问题:当*DRDY引脚变低时,数据是否准备就绪,或者是否需要等待?如果需要,为什么?需要等待多久? 虽然我认为不需要等待,但从数据表信号图中我不清楚这一点。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,TC,

    I AM POLY *DRDY in a while loop with no other commands in it,waiting for a change to low (active) state before to get the next reading.(我正在轮询*DRDY,其中没有其它命令,等待更改为低(活动)状态,
    根据我的理解,该信号应该读取引脚的状态,而不是边缘,对吗? [/引述]

    等待/DRDY值降低,然后读取数据应正常工作。 如果可以选择使用中断,通常比轮询引脚的状态快一点。 您是否尝试过查看示波器或逻辑分析仪上的SPI通信,以查看数据是否与SCLK正确对齐?

     

    ADC的时钟频率是多少(您是提供时钟还是使用32.768 kHz晶体和PLL电路)? 如果ADC时钟以额定15.729 MHz运行,则根据tSCLK规范,SCLK不应高于7.86 MHz (15.729 MHz/2)。 您是否已验证您正在使用SPI模式0 (CPOL = 0,CPHA = 0)?

    我正在通过接收传输的前3个字节来读取数据*DRDY变低。 我似乎在接收到*DRDY激活后和设置START => LOW之后,在将其设置回HIGH之前,取得了更多的成功(即如果设置了50毫秒之类的巨大延迟,则会减少错误)。 我不清楚为什么在这些时候如此长时间的拖延会产生什么影响,但希望有人能深入了解为什么这样做会更好。[/QUOT]

    我不确定我是否理解。 您是否正在尝试使用脉冲转换模式? 在这种情况下,您可以在/DRDY下降边之前将起点设置为低方向。 如果设置在/DRDY变为低电平后开始为低电平,则ADC将执行另一个转换。 下次您将"开始"设置为"高"时,它将执行第三次转换...如果您不期望第二次转换,那么这可能解释您看到跳过的频道的原因。

     

    一个具体问题:当*DRDY引脚变低时,数据是否准备就绪,或者是否需要等待?如果是,原因是什么?需要等待多久? 虽然我认为无需等待,但我不清楚数据表信号图中的这一点。[/QUOT]

    听起来您是在使用"直接读取数据模式"读取数据,对吗? 只要您在下一次转换完成时没有读取数据,/DRDY变低后立即读取数据就不会有任何问题。

     

    您是否在数据读数之间切换/CS (这是该模式的要求)? 您可能还希望在计时结束数据之前发送"0x30"命令,尝试"按命令读取数据"模式。

    此致,
    Chris