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**** 2441870 points
Other Parts Discussed in Thread: ADS1299

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1430264/ads1299-collecting-small-signals-with-correct-amplitude-but-incorrect-frequency

器件型号:ADS1299

工具与软件:

我买了一个可以生成低频小信号的 EEG 信号发生器、并且我想验证我的采集板是否正确。 信号发生器设置为输出振幅为50uV、频率为10Hz 的正弦信号。 然后我的采集板开始收集并显示波形。 振幅是正确的、但存在偏移。 频率不正确、大约为20Hz。 然后、我尝试频率为4Hz 的正弦信号、并收集频率为9Hz 的结果。 请问原因是什么? 我的 ADS1299的采样率设置为250Hz、增益为24。 我将通道1的数据保存为 CSV 文件、然后使用 Python 对其进行处理。 下面是我的代码:

 pandas 导入 PD 
NumPy 导入 NP
导入 matplotlib.pyplot 为 plt

数据= PD.READ_csv (r'C:\Users\sun\Desktop\250-4.csv')

电压= data['Voltage'].values


Fs = 250
N = len (电压)
T = np.arange (n)/fs


FFT_RESULT = NP.FFT.FFT (电压)
FFT_freq = np.fftfreq (n1/fs)


positive _freqs = FFT_freq[n//2]
position_FFT = np.abs (FFT_Result[n//2])*(2/n)#归一化


PLT.Figure (图大小=(105))
plt.subplot (21、1)
plt.plot(t电压)
PLT.TITLE ("原始电压波形")
plt.xlabel ("时间(s)")
plt.ylabel ('电压(V)')
plt.grid ()

plt.subplot (21、2)
plt.plot(positive_freqspositional_FFT)
plt.title ("FFT of the Voltage Signal")
plt.xlabel ('频率(Hz)')
PLT.ylabel ("振幅")
PLT.xlim (0Fs/2)
plt.grid ()

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

    您好、Di、

    您能否将 CSV 文件与原始数据共享? 您是否已使用示波器验证信号发生器正在输出预期的波形? 您可能必须增加振幅才能在示波器上清楚地看到它、但至少您可以验证正弦波频率。

    此致、

    Ryan

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

    首先、非常感谢您的答复。 我会分几个部分回复你。
        首先、我的 CSV 文件包含转换后的实际电压值、这些值放在表的一列中。 第一行名为 Voltage、我将复制其中的一部分以供稍后显示。
        其次、我这边的示波器设备有点过时、尚未进行适当的测试。 信号发生器是从其他人购买的产品、因此一般来说、没有问题。 我将尽快确认信号发生器的波形。
         另外、我想再问几个问题。
    问题1:在读取寄存器时、通常读取27个字节。 前三个字节是状态位、后24个字节是来自八个通道的数据。 处理数据时、我将三个字节组合在一起、并根据 LSB、MSB 和公式将其转换为实际电压值。 也就是说、数据点由三个字节组成。 当 ADS1299的采样率设置为250Hz 时、相当于每秒收集250个点。 不过、由于一个点由三个字节组成、因此在处理用于 FFT 转换的数据时、上述代码中的 FS 设置为250或250/3。
    问题2:我已将 ADS1299收集的实际电压值传输到串行调试助手、但当修改 ADS1299的采样率时、发现串行调试助手上没有太多数据。 也就是说、提高采样率不会导致显著的变化。 简单地说、修改 ADS1299采样率未生效。

    下面是我的 CSV 文件之一、采样率为250Hz、收集的信号为4Hz、50uV:

    电压
    0.000019
    0.000021
    0.000022
    0.00002
    0.000016
    0.000011
    0.000004
    -0.000003.
    -0.00001
    -0.000017
    -0.000022
    -0.000025
    -0.000027
    -0.000025
    -0.000023
    -0.000018
    -0.000011
    -0.000004.
    0.000003
    0.00001
    0.000015
    0.000019
    0.000022
    0.000022
    0.000019
    0.000015
    0.000009
    0.000002
    -0.000005
    -0.000013
    -0.000018
    -0.000023
    -0.000026
    -0.000027
    -0.000026
    -0.000022
    -0.000017
    -0.00001
    -0.000003.
    0.000004
    0.00001
    0.000016
    0.00002
    0.000021
    0.00002
    0.000018
    0.000013
    0.000007
    0
    -0.000007
    -0.000014
    -0.00002
    -0.000024
    -0.000027
    -0.000027
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Di、

    ADS1299在所有8个通道上的采样率均为250SPS。 数据由24位或3个字节表示、但这对采样率没有影响。 您的 FFT 应在0到 fs/2或125Hz 之间绘制。  

    更改数据速率时、必须在地址01h 中写入新的 DR[2:0]配置。 您是否正在读回寄存器值以确认新配置已正确写入? 如果新寄存器值不匹配、您可能需要确认器件未在 RDATAC 模式下运行。 您必须在 RREG/WREG 之前发送 SDATAC 命令(11h)。

    此致、

    Ryan

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

    我可以问我用于处理上述数据的代码是否有任何问题、应该为 FS 设置什么值吗? 我测试了内部方波信号、发现采集期间的波形幅度是正确的、而波形也是方波信号。 但是、运行上述数据处理代码时、频率也不正确。 我修改了 Fs 的值、频率也发生变化。 不过、通过在数据处理期间使 FS 保持不变以及更改信号发生器生成的信号频率、可以观察到频率变化。 所以、我认为采样率或我的数据处理方法应该会有问题。

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

    尊敬的 Di:

    请在示波器上探测 ADS1299的 nDRDY 引脚。 连续下降沿之间的周期应与您配置的数据速率周期完全匹配。 否则、时钟或寄存器设置有问题。

    此致、

    Ryan

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

    您好、Ryan

    我分别将 ADS1299的采样率设置为250Hz 和500Hz、然后使用示波器观察 DRDY 引脚的波形。 获得的结果如下图所示。

                         图1 250Hz

                          图2 500Hz

    我想问一下、与这两个采样率相对应的 DRDY 引脚波形是否有任何问题。 所有波形都在数据传输期间测量。 但我的电流收集波形仍然具有正确的振幅。 如果我们根据 fs=250Hz 来计算频谱。 光谱图仍然存在问题、因为频率不对应。 我想问是否有其他可能的原因。 我的 FTT 计算代码已经在上面。 如何解决频率不正确的问题。

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

    尊敬的 Di:

    请测量寄存器配置之后连续下降沿之间没有任何 SPI 通信的 nDRDY 周期。 将 Δt 光标放置在示波器上、让我知道 μ C。 根据波形中的时间刻度、周期大于10ms、相当于< 100Hz。

    此致、

    Ryan

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

    我不知道为什么不使用 SPI 通信来测量 DRDY 信号。 我刚刚在代码的 main 函数中注释掉了读取数据的代码、这可能会阻止 SPI 通信。 然后、当我将 ADS1299采样率设置为250Hz 时、测得的 DRDY 信号如图1所示、当采样率为500Hz 时、DRDY 信号如图2所示。 在图中、M1.00ms 表示每节电芯1.00ms、因此在250Hz 图中、两个下降沿之间的距离为4节电芯、即4ms。 图2也是如此。

                        图1.

                       图2.


    然后、当我启用 SPI 通信时、我设置250Hz 和500Hz、就像我上次发送给您的两张图片一样。 当启用 SPI 通信时、250Hz 和500Hz 的 DRDY 信号周期为12ms、频率为83.3Hz。 问题在哪里。 如此、当我处理收集到的数据并执行 FFT 变换时、需要将采样率 fs 设置为83以获得正确的信号频率。 但这只能正确处理 Fs/2范围内的信号、即83/2。 采样率与 DRDY 频率相关、因此我认为应该是 DRDY 造成的。 但是、如果没有 SPI 通信、我认为测试 DRDY 信号不是问题。

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

    我的主循环代码显示在代码中、它通过检查标志位来检测 DRDY 信号和数据是否就绪。 然后读取和处理数据、并通过串行端口传输数据。 但当我注释掉数据处理和串行端口传输的代码时、我测量了 DRDY 信号、如图2所示。 可以看出 SPI 通信期间 DRDY 信号的频率和采样率一致在500Hz。 但是、SPI 通信之前500Hz 采样率下的 DRDY 信号波形并不完全相同。 您可以比较它。
    那么、从上述情况来看、原因是什么? 是因为我的数据处理和串行端口传输浪费了时间并影响了 DRDY 信号吗?

    代码:

    while (1)

    if (drdy_flag)

    ADS_READ (ADS_Data);
    SendFirstChannelData (ADS_Data);
    drdy_flag = 0;
    }
    }

                        图2.

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

    ?μ A

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

    嗨 Di -那么你是比较下面这两张图片吗?:

    1 -在 SPI 之前:

    2 -在 SPI 之后:

    我想知道这是否是 MCU 配置连接到 ADS1299 /DRDY 的引脚的方式导致的。 似乎正在加载引脚并将其拉高。 如前所述、如果未从器件读取任何数据、/DRDY 引脚应空闲为低电平。 否则、如果 SCLK 上有活动、第一个 SCLK 下降沿将清除 ADS1299上的/DRDY 中断、使其返回高电平并等待新的转换。

    此致、

    Ryan

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

    您好、  Ryan G ö、

    我目前面临的主要问题是采样率只有83.3Hz、DRDY 频率为83.3Hz。 我想问一下、在 SPI 通信期间 DRDY 信号的频率是否与 ADS1299采样率保持一致? 然后、当未执行 SPI 通信时、基本上处于低电平、如图1所示:

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

    您好、Ryan G ö、

    我将向您展示逻辑分析仪测量 SPI 通信的结果。 如图1所示、在读取通道数据之前、DRDY 信号保持低电平、似乎有脉冲信号。 开始读取时、DRDY 变为高电平。 后面还有一些有关放大的详细图片。 请检查 SPI 通信是否存在任何问题。

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

    尊敬的 Di:  

    是的、在 SPI 通信期间、数据速率周期保持不变。 但是、出于调试目的、在没有活动 SPI 通信的情况下最容易在示波器上观察/DRDY 波形。 如前所述、第一个 SCLK 下降沿清除中断、因此这会产生不同的/SCLK DRDY=LOW 脉冲宽度。 在这种情况下、下降沿到下降沿仍将保持一致。

    上图适用于@ 500SPS 但不读取数据的/DRDY 中断。

    此致、

    Ryan

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

    尊敬的 Di:

    在/DRDY 下降沿之后、您需要等待大约4ms 来响应和读取数据。 但您配置的数据速率具有2ms 的周期。  

    1.减少从/DRDY 下降沿到数据采集的延迟

    2. 在整个27字节帧中保持/CS 为低电平。 您可能需要在 MCU 中使用专用 GPIO、而不是本机 SPI_CS 信号。

    此致、

    Ryan