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.

[参考译文] ADS131A04:故障ADC输入和放大器;故障SPI

Guru**** 2394295 points
Other Parts Discussed in Thread: ADS131A04

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/576582/ads131a04-fault-adc-input-fault-spi

部件号:ADS131A04

大家好,

我正在使用连接到Raspberry Pi 3的ADS131A04,在获取数据时遇到一些问题。 我已按以下方式配置ADC:

来自覆盆子的-AVDD,Refext和RefP 5V

-AVSS和RefN至GND

-SPI同步从属模式

- Raspberry提供3.3V数字电源

寄存器配置已正确完成,无需激活内部参考引脚(INT_REF)和使用外部时钟。

设置完成后,我提取1万个样本,发送NULL命令(0x00),这应该返回RREG(STAT_1) ,然后返回4个通道的数据。 我目前只使用第一个信道,尽管我没有测试返回的数据是否正确,但它看起来很有希望。 下面的图片是我用电源的旋钮进行的测试

但是,RREG(STAT_1)为每个样本不断给出两个错误:设置了F_ADC和F_SPI位。 根据数据表,我读取STAT_P和STAT_N寄存器以查看哪些信道超过阈值,并且我获得了一个0x0F作为对这两个信道的回报,这意味着所有信道都超过正负输入。 我有2个通道接地,1个通道浮动和1个作为输入连接到电源。  

-您知道为什么所有渠道都给我这个错误吗? 因为从图中可以看到,未达到限值的值不应返回任何错误。 (顺便提一下,我将比较器阈值设置为95 %)  

关于SPI,当我阅读STAT_S寄存器时,它告诉我F_CS和F_Frame有错误,我不知道原因。 我正在使用外部16.384 MHz晶体振荡器和两个时钟分频器CLK_DIV_14和ICLK_DIV_14。  

我希望你们能帮我找到解决这一问题的办法。 如果您需要有关设置或代码的更多信息,请告诉我。

提前感谢!

联合国大赦国际

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

    您好Unai:

    COMP_TH[2:0]位中的百分比表示模拟电源轨的百分比。 例如,如果将阈值设置为95 % ,则高侧比较器阈值将在5 V x 0.95 = 4.75 V高于AVSS时触发。 同样,在这种情况下,负输入比较器将在5 V x 0.5 = 0.25 V时触发。 请注意,这与输入之间的电压无关,而只是与电源设备相关的各个输入引脚的电压。 可能会出现比较器触发但转换结果仍在ADC范围内的情况。 以下是一个示例:

    Comp_th = 000 (95 % / 5 % 触发器)

    AINP = 4.8 V (触发器比较器)

    AINN = 4 V

    数据输出= AINP - AINN = 0.8 V

    您说您的输入要么与地面相连,要么与正极电源相连,要么是浮动的。 在输入与AVDD或AVSS关联的情况下,这将始终触发比较器。 当输入处于浮动 状态时,这可能会触发比较器,因为输入处于未知状态。 这是否合理?

    对于F_CS和F_frame故障,这些是接口故障。 您能否在样本采集期间捕获SPI并将图像发布在此处? 这是我唯一能够辨别出错误的方法。

    Brian

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

    您好,Brian,

    感谢您的快速响应。 我一直在做一些更多的测试,看来您对ADC范围的看法是完全正确的。

    对于SPI,我有以下图片(示波器中只有2个通道,因此我多次复制相同的信号)

    我选择了24位字选项,所以我发送NULL命令15次,以获得1个状态字+4个通道数据字(每个5个字x 3个字节)

    -通道1:CS,通道2:SCK

    -通道1:输出,通道2:SCK

    -通道1:dout,通道2:SCK (缩放较少)

    我没有上传Din信号,因为它总是0x00。 不管怎样,如果还需要更多信息,请告诉我。

    还请注意,即使SCK信号以625kHz运行,我也尝试过以~10MHz运行,但存在相同的故障。

    谢谢!

    联合国大赦国际

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

    DRDY是否与CS关联,或者该信号是否以不同的方式驱动? 请记住,必须在设备在同步从属模式下期望的确切时钟周期内取消对DRDY引脚的断言。 F_CS故障仅在CS转换时SCLK为高电平时发生。 您的沟通程序中是否曾发生过这种情况? 甚至可能是偶然的?

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

    您好Brian:

    是的,DRDY与CS相关联。 我一直在检查,CS始终会在SCLK过低时进行转换。 当您说必须在准确的时钟周期内取消断言DRDY引脚时,您的意思是什么? 正如您在上面的POST中所看到的,当 SCLK不再运行时,CS引脚会变高。 您是否认为这可能是问题所在? 那么我能忽略这个错误吗?

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

    在同步从属模式下,DRDY输入必须与寄存器中配置的内部编程数据速率同步。 这通常意味着主机必须获取或访问ADS131A04的主时钟才能保持同步。 是这样吗?

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

    因此,如果我理解正确,我需要创建一个84kHz (16.384MHz/CLK_DIV_14/ICLK_DIV_14)的时钟信号,然后使用它来驱动DRDY。 该设备的主时钟是晶体振荡器,因此我认为从树莓获取它会更容易。 我会尝试这样做,如果我需要其他任何东西,我会回复您。

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

    用于创建DRDY的信号必须与主时钟同步,接口才能正常工作。 或者,您可以使用异步中断模式与设备连接。 该模式最类似于传统SPI接口。 您可能需要稍微调整紧固件以适应不同的销功能。

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

    您好,Brian,

    正如您所建议的,我现在使用异步中断模式,但我仍然遇到F_SPI故障,当我看到它时,它告诉我故障在F_frame中。 现在,我的代码等待直到DRDY变低,然后执行读数,如下图所示:

    通道1:DRDY,通道2:SCK  

    通道1:DRDY,通道2:DOOUT

    因此,我在这里了解到,错误告诉我SPI时钟对于每个帧都不够快,但我看到SCK和DOut都在DRDY发送另一个信号之前完全发送。 您能否澄清F_frame错误的含义?

    谢谢你

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

    F_frame故障的含义与此略有不同。 这意味着为给定帧发送的SCLK周期不足。 在将CS提高到较高值之前,您是否可以验证您发送的SCLK周期数是否正确?

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

    您好Brian:

    我已将ADC配置为24位字,具有动态帧大小,但没有CRC。

    从那里我知道我需要发送5个字,每个字长24位。 我正在使用的库以字节为单位发送单词,所以我每个单词发送3个字节,总共15个字节。 我也检查了发送30字节,但是dout在15字之后停止发送信息,所以我猜所有的信息都是用这15字节发送的。 另外,发送30字节时,会出现相同的错误。

    联合国大赦国际

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

    请将您的示意图发送给我吗?

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

    您好Brian:

    这里,希望结果有用。 请注意,所有GND都是通用的。

    联合国大赦国际

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

    对于异步中断模式下的24位数据输出,该原理图看起来是正确的。

    当内部SCLK边缘计数器检测到从CS降低到高的SCLK期间不足(在本例中至少为120)时,触发F_frame错误。 通信例行程序中一定有不符合这些参数的内容。 我认为我们确信SCLK即将推出足够多的时间(在某些情况下已经足够)。 也许我们应该看看CS -您最后的图像显示DRDY,而不是CS。 CS是否有可能提前进入高水平? 我唯一可以回顾的另一件事是寄存器设置,以确保设备的配置与我们的想法一致。 查看寄存器设置时,请确保从设备中读回这些设置,以排除写入寄存器过程中出现的错误。

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

    您好Brian:

    我更改了代码以检查设置中的寄存器,它们配置得很好。 我还手动发送了Read register命令,并看到它们配置得很好(以防万一)。  

    关于CS,这里有两张图片。

    -通道1:DRDY,通道2:CS

    相同的图片,更大的缩放比例:

    如您所见,CS在340ns后显示DRDY。 现在我使用的是CLK_DIV_4,因此Ficlk = 4.096 MHz。 根据数据表,CS和DRDY之间的传播延迟时间应最多为Ticlk的2倍(~490 ns),在这种情况下符合此要求。  

    联合国大赦国际

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

    这是一个棘手的问题! 感谢您的耐心等待。 我们最终会弄清楚这一个。

    当您读取数据时,您读取的数据是否有意义? 或者,与您认为应该得到的服务相比,它真的很大还是很小? 我想知道在通信过程中是否有一点被无意转移,这导致设备认为您发送的SCLK不够。 您的SPI设置是否为CPOL = 0,CPHA = 1?

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

    您好Brian:

    SPI设置配置为CPOL=0和CPHA=1 (模式1)。 关于读取数据,我意识到可能存在问题。 如果我输入一个波形信号(~1,2kHz 5V) ,它就能很好地捕捉到这个数字。 但当我输入恒定电压时,输出似乎有点不好。 我的示波器出现了一些问题,这需要更多测试。

    我已尝试输入2.34V值(来自电源),内部参考电压为VREF_4V,这将给出4V的58.55 %。 当我阅读时,我会得到57.1 %。 它有点偏,但看起来不会像有位移那样糟糕。  

    明天我将尝试用不同的值进行更多测试,并会再次联系您。

    联合国大赦国际

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

    下面是 我所做的测试的几张图片。 使用内部4V参考电压和作为来自调节器的2.5V输入电压。 8 kSPS时的采样速率。 垂直轴(单位为伏特)和水平轴(单位为微秒)。

    相同的数字,但具有缩放功能

    联合国大赦国际

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

    这看起来非常接近您的期望? 您是否使用万用表测量了电源以查看电源的电压和噪音? 它可能不完全是2.5 V,并且肯定不是无噪音的(要捕获噪音,您可能需要使用示波器或万用表上的"交流耦合"功能)。

    另外请记住,ADS131A04的输入阻抗不是很高。 如果源没有太多带宽,您可能会看到线性问题。 通常,我们建议缓冲ADS131A04的输入以考虑此问题。

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

    您好,Brian,

    很抱歉回复太晚。 我想这些值与我所期待的非常相似,当我用信号发生器尝试时,输出 效果更好。 但是,我应该如何处理F_SPI故障? 忽略它吧? 这些值似乎是有意义的,观察示波器,一切看起来都正确。

    你有什么建议?

    联合国大赦国际

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

    我想说,至少现在这似乎没有给你们造成任何问题。 也许现在就继续发展吧。 也许稍后您会在开发过程中看到一些问题,并将其追溯到该问题,然后我们就可以理解为什么会出现这种情况。 正如我之前说过的那样-一定是有什么原因导致了这种情况。 我还会看看我能做些什么来找出为什么会发生这种情况。

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

    最后一个问题我认为我还没有问过你:当你得到F_SPI位时,你是否每次都读取STAT_S寄存器,故障依然存在? 仅当您读取寄存器时,故障才会清除。

    Brian