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.

[参考译文] ADS1299:读取前增加延迟时数据损坏/出现尖峰

Guru**** 2543210 points
Other Parts Discussed in Thread: ADS1299

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1199616/ads1299-data-corrupted-spikes-when-adding-delay-before-reading

器件型号:ADS1299

您好!  

我的定制板有一个非常奇怪的问题(ADS1299 + Atmel SAMD21G18A):有时 ADS1299会从一个通道 或多个通道提供损坏的数据。

我的 ADS1299在单次模式下工作、具有2.048MHz 内部时钟。 微控制器以2000Hz 的频率发送启动命令、等待 ADS1299 DRDY 中断、然后读取 ADS1299缓冲器。 ADS1299通过 SPI 将数据发送到微控制器(SPI 波特率4M、ADS1299 SPS = 16k)。  ADS1299通道1 -用于 EEG 数据采集的通道4、通道5 -通道8关闭。  

我应该说明的是、ADS1299 DRDY 与微控制器读取开始之间在代码中存在微小的延迟(~3us)。  

下面显示了一个示例。 由于没有连接电极、我应该始终获得7FFFFFh。 但是、正如您从屏幕截图中看到的、有些数据损坏了。  

我将逻辑分析仪连接到了 ADS1299 SPI 引脚、这可以在数据发送到 SPI 线路之前确认数据是否损坏。 下面显示了一个示例(此处通道1数据已损坏):

奇怪的是、当我删除延迟(这意味着微控制器无限等待 DRDY 信号、并在 ADS1299数据就绪时立即启动读取操作)时、这个错误似乎消失了、我获得了稳定的数据。  

我用 ADS1299内部测试信号(方波)进行了测试、我改变了 SPI 速度、同样的问题。  

我在这里找到了一个类似的帖子: https://openbci.com/forum/index.php?p=/discussion/423/ads1299-with-arduino-due-sampling-problem

有人能解释一下我做错了什么吗?  

非常感谢。

此致  

XIN

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

    您好!

    我会尽量在3/3之前回复您。

    谢谢

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

    您好!

    您碰巧有 ADS1299评估套件/板(EVM)吗?

    由于您有逻辑分析仪、因此 可以探测 EVM 和电路板上的信号、并进行并排比较。

    -------------------------------------------------------

    说明"微控制器以2000Hz 的频率发送启动命令"

    这话具体是什么意思?  MCU 是否每秒发送2000次启动命令?

    为什么 要每秒发送启动命令2000次,并使用停止命令?

    '当 START 命令被发送到器件中时、在发出 STOP 命令前将 START 引脚保持在低电平。'

    例如、查看 9.4.1.1稳定时间和 图40。 系统稳定时间

    '请注意、当 START 保持高电平并且输入信号发生阶跃变化时、滤波器需要3×TDR 才能稳定到新值。 可在第四个 DRDY 脉冲提供稳定的数据。"

    TDR 表示输出数据时间段

    输出数据速率 DR[2]设置是什么?

    是否发送 RDATA 命令?

    您多久看到一次/DRDY?   

    请查看 ADS1299数据表 9.5.3.9 RDATA:读取数据和  图47。 RDATA 用法。

    并确保 SCLK 速率符合 ADS1299的第39页-"对于 RDATA 命令、如果必须在两个连续 DRDY 信号之间读取数据、则限制适用。"

    和第40页

    "系统命令和 RDATA 命令在第七个 SCLK 下降沿由器件解码。"

    '发出命令后、将 CS 拉为高电平时、请务必遵循 SPI 时序要求。'

    -------------------------------------------------------

    对于"ADS1299 DRDY 与微控制器读取开始之间在代码中存在小延迟(~3us)"、  

    "微控制器开始读取"这句话是什么意思? 可以通过任何信号边沿或命令来表示这一点?

    该延迟是否仍满足 ADS1299的时序要求

    例如、ADS1299 数据表9.4.4.1数据就绪(DRDY)和 图41。 有数据检索时的 DRDY (CS = 0)

    -------------------------------------------------------

    关于您的 OpenBCI 帖子的问题-

    原始帖子回复-"感谢您的评论。 我能够解决这个问题。。。 这是因为从芯片读取数据时存在小幅延迟。"

    因此、您可能还需要在 MCU 代码/端仔细检查。

    -------------------------------------------------------

    仅供参考、ADS1299是8通道器件、因此它将始终输出8个数据通道。

    谢谢

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

    尊敬的 Chien-Chun:

    非常感谢您的详细回复、很抱歉这么晚才回复。  

    很遗憾、我没有 EVM、我会尝试获取一个以进行进一步开发。  

    对于定制电路板、START 引脚接地、因此始终为低电平。  

    微控制器发送一条 START 命令、等待 DRDY 下降沿出现、然后发送 RDATA 命令、然后从 ADS1299缓冲器读取27个字节的数据。 整个过程以2000Hz 的频率重复。  

    由于 ADS1299在单次模式下工作、因此我不使用 STOP 命令。  

    我的代码中的数据速率[DR2:0]是000 -> 16kSPS。  

    延迟(~3us)位于 DRDY 下降沿到达和发送 RDATA 命令之间。  

    希望这一点现在已经清楚了。

    问题是:当我删除此延迟时(意味着微控制器在 DRDY 下降沿触发时立即读取 ADS1299缓冲器)、尖峰(数据损坏)似乎消失了、我获得了稳定的数据。

    openbci 后文说"由于 从芯片读取数据的过程中存在小延迟"、而如果可以更清楚一些、可以将我的问题描述为"由于从芯片读取数据之前存在小延迟"。  

    当然、我不确定 问题是否是由于此延迟造成的、或许我在 SPI 时序或其他方面做了一些事情。 如果您能给我一些建议或灵感、那将非常有帮助。  

    此致

    XIN

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

    您好!

    表示  

    "当我删除该延迟后(即微控制器在 DRDY 下降沿触发时立即读取 ADS1299缓冲器)、尖峰(数据损坏)似乎消失了、我获得了稳定的数据。"

    如果您想深入了解更多详细信息、则需要在没有延迟且没有延迟的情况下探测并比较信号波形、并从二者中进行比较、与  ADS1299的时序要求进行比较

    例如、ADS1299 数据表9.4.4.1数据就绪(DRDY)和 图41。 发生数据检索时的 DRDY (CS = 0)以及 图47。 RDATA 用法

    数据表第42页9.5.3.9 RDATA:读取数据

    "要在发出 RDATA 命令后从器件检索数据、请确保 START 引脚处于高电平或发出 START 命令。"

    那么、您是如何连接 START 引脚的?

    您认为您是否可以在  图47中确定/定位/指出该延迟发生的位置。 RDATA 用法?

    -------------------------------------------------------

    是的、建议使用一个用于信号波形基准和比较器的 EVM。

    谢谢