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.

[参考译文] ADS1258:实现125K采样/秒速率

Guru**** 2394305 points
Other Parts Discussed in Thread: ADS1258

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/634907/ads1258-achieving-125k-samples-sec-rate

部件号:ADS1258

我正在研究一种FPGA设计,它用于连接ADS1258以采集模拟样品。

FPGA设计使用专用逻辑通过SPI进行通信,并使用DMA引擎将数据传输到内存。  

到目前为止,该电路已被用于每100次采样一个通道。 但现在我们希望采样速度快得多,每10个。 根据数据表,这在单通道模式下不应该是问题。 但我对如何去做感到困惑,确切地说。

据我估计,我需要处理三个阶段: A/D转换时间,SPI数据传输时间,DMA写入内存时间。

DMA数据写入时间很短,通过在数据写入路径中添加FIFO,我可以忽略不计。

SPI数据传输时间将受SPI时钟速率的限制,该时钟速率需要低于8 MHz。 如果我能以8 MHz的速度运行,那么传输32位需要4个Us。  这会留下A/D转换时间。  我猜这实际上是我们8个人。  因此,为了达到最大采样率,SPI数据传输必须与转换重叠。  这是否正确?

但是,数据表警告说,如果在确定DRDY之前未读取旧数据,数据将会损坏。 所以我的第一个问题是:旧数据的SPI数据传输必须在下一个DRDY之前完成,还是只能开始?  如果SPI数据转换寄存器独立于A/D转换寄存器,那么我希望一旦SPI传输开始,数据将传输而不会损坏。  如果不是,则在我确定当前SPI传输将在采集前完成之前,我无法开始下一次采集。

我的下一个问题是,数据传输真的需要多少位SCLK?   数据表的图56显示了获取三个字节模拟数据的四个字节(32位)的数据。 但第一个字节显示为"status"(状态),其中注明固定信道模式为"disabled"(已禁用)。 "禁用"是否意味着不发送,我实际上只需要提供32个时钟即可获取模拟数据?  或者‘禁用’只是意味着第一个字节的内容没有意义吗?

一个额外的问题: 如果我只对数据的上16位感兴趣,我是否可以提前终止SPI传输? 我的意思是否定 ADS1258的芯片选择。  

谢谢

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

    嗨,Rod,

    欢迎来到TI E2E论坛!

    您是尝试以100 kSPS的速度采样输入信号,还是只需要ADC至少以如此快的速度采样?

    (以红色添加更正)  
    -如果您需要采样大约100 kSPS,那么您必须使用脉冲转换模式精确控制转换的开始,或者提供一个频率等于( 100 / 125)* 15.729 MHz = 12.5832 MHz的外部时钟源。 注意:切换起始引脚将重置数字滤波器,因此您在5个转换周期后才会确定数据。  

      

    在固定信道模式下持续转换时,您应该以100kSPS的速率对单个信道进行采样。 为此,您需要:

    1. 使用以下设置配置设备寄存器:MUXMOD = 1,CHOP = 0,STAT = 0和DRATE[1:0]= 11h。
    2. 通过将起始引脚设置为高来开始ADC转换。
    3. 等待/DRDY降低。 忽略前四个未结算的转换结果。
    4. 在第5次转换后,使用“直接读取”或“读取命令”模式读取数据(同时,ADC将执行下一次转换)。
    5. 重复步骤3和4... 只要您在连续转换(不停止转换,更改通道或其他配置,或发送pulse convert命令),那么在前4个结果后就不需要丢弃任何数据。  

    关于您的问题:

    但是,数据表警告说,如果在确定DRDY之前未读取旧数据,数据将会损坏。 所以我的第一个问题是:旧数据的SPI数据传输必须在下一个DRDY之前完成,还是只能开始?  如果SPI数据转换寄存器独立于A/D转换寄存器,那么我希望一旦SPI传输开始,数据将传输而不会损坏。  如果不是,则在我确定当前SPI传输将在收购前完成之前,我无法开始下一次收购。[/QUOT]

    这取决于您使用的是哪个读取"命令"...

      • 如果您在/DRDY下降边缘中超频数据,"直接读取"命令(0x00)可能会导致数据损坏。 在这种情况下,ADC会对非缓冲数据结果进行时钟处理。 此命令直接以三个字节为单位对数据进行超时(在固定信道模式下,使用此读取模式时,状态字节始终处于禁用状态)。 注意:使用此命令时,必须在数据读取操作之间切换/CS。

      • “读取命令”命令(0x30)将转换数据加载到缓冲移位寄存器中,以便在新转换结果更新期间保留旧数据。 注:在/DRDY中断后,您仍应尝试快速读取数据,因为此命令字节需要在/DRDY下降边缘之前发送(尽管在/DRDY下降边缘期间和之后,如果/CS保持低电平,数据可能仍会被超频)。 此命令需要五个字节来对数据进行时钟处理(在固定信道模式中,将有一个垃圾字节代替状态字节)。

    如果将起始引脚设置为高,则ADC将自动开始下一个转换,而无需等待您读取数据。 但是,在脉冲转换模式下(当起始引脚设置为低电平时),您需要读取数据,然后发出“pulse convert”命令(0x80)。

     

    [引用user="Rod McInnis)]我的下一个问题是,数据传输真的需要多少位SCLK?   数据表的图56显示了获取三个字节模拟数据的四个字节(32位)的数据。 但第一个字节显示为"status"(状态),其中注明固定信道模式为"disabled"(已禁用)。 "禁用"是否意味着不发送,我实际上只需要提供32个时钟即可获取模拟数据?  或者'disoted'是否只是表示第一个字节的内容没有意义?

    状态字节的行为在所有不同模式之间有点混乱...假设是固定通道模式,请参阅上面描述两种读取模式之间差异的答案...

    通过"禁用"(对于直接读取模式),数据表意味着您不会对状态字节进行计时(仅3个字节用于数据)。
    通过"未定义"(对于读取命令模式),数据表意味着您将对状态字节进行时钟处理,但应忽略它。

     

    Rod McInnis 说:
    a Bonus question: 如果我只对数据的上16位感兴趣,我是否可以提前终止SPI传输? 我的意思是否定 ADS1258的芯片选择。  [/引述]

    是的,您应该能够做到这一点...

    您可能无法多次读取相同的转换结果。 特别是在"直接读取"模式下,尝试重新读取数据可能从LSB开始;我不知道100 % 对此有什么看法。 但是, 只要您在每个转换结果中只读取一次数据,我就不会看到任何问题。

      

    此致,
    Chris

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

    感谢您的回复。

    我不认为采样周期需要准确。 不管怎样,我不能改变电路,ADS1258使用32 KHz晶体,我相信这会产生15.7 MHz时钟,从而达到7.85 MHz的最大SPI时钟速率。

    我当然需要能够支持多种采样率,而不仅仅是每秒100K个固定采样率 因此,我认为我不能简单地将起始点拉高一点。 我的想法是,我可以每隔n微秒切换一次起始引脚,然后让运行SPI接口速度的状态机自己脱离DRDY引脚。 因此,每10个Us就会有一个'自由运行'的启动位切换。 一个获取时间(我假设这是8 us,但我找不到实际指定的位置),稍后将断言DRDY引脚(低)。 SPI传输将开始,但在下一次启动之前无法完成。 我应该能够在5 us内完成SPI传输。

    所以现在有一场比赛。 第二次启动将发生在SPI数据传输中的2 Us,这将需要另外3 Us才能完成。 只要第二次收购未在这3个范围内完成,我们都应该是好的。 但如果完成的话,第一个数据传输就会被破坏,我不知道第二个数据传输会是什么。

    是否对实际采集时间有任何评论? 我可以假设至少是3个人吗?

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

    嗨,Rod,

    我又回来了,对我上一篇文章做了一些小的更正...

    通过尝试调整脉冲转换命令的时间来支持多个数据速率将是一个挑战。 我认为使用此技术,您只能支持25 kSPS以下的数据速率范围。 否则,您将被限制在ADC的预定义数据速率范围内。 让我解释一下...

    无论何时切换起始引脚,都将重置ADC的数字滤波器。 由于这是SINC5数字滤波器,因此在ADC完成五次转换之前,输出结果不会确定。 数字滤波器的性能与移动平均滤波器一样有效,对前五个样品进行平均处理。 因此,前4个结果将不准确。 有关示例,请参阅此博客文章中的图2:  

       

    因此,尽管您可以随时开始和停止ADC转换并更改有效数据速率,但您不希望对超过25kSPS的数据速率执行此操作 (即允许至少五个转换以125 kSPS数据速率完成,并丢弃前四个未解决的结果)。 在这种情况下,您必须保持起始引脚高电平,以避免数字筛选器的延迟。 除了应用不同的外部时钟频率外,更改有效数据速率的唯一其他方法是创建您自己的自定义后处理数字筛选器,该筛选器平均值和小数点(您仍将以125 kSPS的速度接收数据, 但您可以延迟它并在FPGA中执行自己的平均,以进一步降低有效数据速率)。

     

    关于时间限制...

    • 在最大125kSPS数据速率下运行时,您有8 us (1/125 kHz)可以在/DRDY变低后(以及在下一个/DRDY发生之前)对数据进行时钟处理。
    • 使用"Read Direct"(直接读取)命令应大约(24 / 7.85 MHz)~= 3.1 Us。
    • 只要您快速处理/DRDY中断以读取数据, 我不会遇到任何及时计时数据的问题。

    ADS1258是对输入信号进行过采样的 Δ-Σ ADC。 与SAR ADC不同,您不需要区分采集和转换期间。 除了/DRDY下降边缘限制外,您几乎可以随时读取数据或发送SPI命令。

     

    此致,
    Chris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    现在我对已经实施的这条线路的可行性感到困惑和担忧。

    这也可能是一个"灯泡"时刻,因为它可能会解释已经观察到但未被理解的事情。

    如果ADC处于单通道模式“通道数据直接读取”模式,则切换起始位,多长时间后才断言DRDY位? ADS1258在宣称DRDY之前是否进行了5次采集? 如果是这种情况,这可能解释为什么我们的测试比预期的时间长40个。

    如果我离开了断言的起点,并且能够以125 kSPS的速率传输所有数据,那么在前四个样本之后的所有样本都是正确的吗?

    我怀疑为该设计选择此ADC的工程师没有考虑过滤器。 我们正在使用此ADC对模拟线路进行采样,该线路上会有一个短的钟形脉冲。 这个脉冲大约为100 us宽,我们需要确定峰值时间,最好在50 us以内。 现在我担心这种正在运行的筛选器会使数据歪斜。

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

    嗨,Rod,

    Rod McInnis 说:

    在固定通道模式下,您将在一个转换周期(1/数据速率)后看到/DRDY脉冲。 但是,这一数据尚未得到解决。
    在自动扫描模式下,ADS1258将“屏蔽”或隐藏/DRDY,直到完成5个转换周期为止(因此/DRDY在5/数据速率和数据稳定后变低)。

     

    如果我离开了断言的起点,并且能够以125 kSPS的速率传输所有数据,那么前四个样本之后的所有样本都是正确的吗? [/引述]

    假设您的输入信号不会突然变化,是的! 但是,如果输入发生步骤更改,您仍将看到SINC5过滤器的缓慢稳定响应(再次考虑移动平均过滤器,旧数据会使结果歪斜,直到所有样本都更新完毕)。 对于较慢的输入信号更改,它们将遵循滤波器的频率响应,如数据表中的图42所示。

     

    我怀疑为该设计选择此ADC的工程师没有考虑过滤器。 我们正在使用此ADC对模拟线路进行采样,该线路上会有一个短的钟形脉冲。 这个脉冲大约为100 us宽,我们需要确定峰值时间,最好在50 us以内。 现在我担心这种正在运行的筛选器会扭曲数据。[/QUOT]

    如果此相对低频信号(当您使其发出声音时为~200 us周期或~5 kHz基本频率),则仍有可能确定峰值;此峰值将仅被延迟,并通过滤波器的频率响应@ 125 kSPS略微衰减:

     

    此致,
    Chris