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.

[参考译文] ADS1263:Raspberry Pi 4型号 B 上的高采样频率

Guru**** 2390755 points
Other Parts Discussed in Thread: ADS1263

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1040224/ads1263-high-sampling-frequency-on-raspberry-pi-4-model-b

器件型号:ADS1263

下午好!

我在使用电子器件进行编程和测量方面只有几个月的经验。 我最近购买了 RPi hat ADS1263 (https://www.waveshare.com/18983.htm)。 我的目标是使用 Raspberry Pi 测量约14k SPS 的加速度、并将这些加速度记录到 csv 文件中以供进一步分析。 问题是我目前卡在600SPS 左右(不稳定)。

我深入研究了数据表和 python 库,除了通过更改数据速率之外,找不到任何会产生影响的参数;即使选择了1200SPS 或更高的数据速率,我的数据速率仍低于600SPS。

我想问题来自我的代码、但我在互联网上找不到任何代码或指示。 那么、这里是我的问题:我应该在 python 库中修改哪些参数、我应该使用什么代码结构?

我怀疑问题是我将读取函数放入一个循环中,实现循环的频率取决于 RPi,而不是 ADC;但是我不知道我还应该如何读取和记录这些值。

目前、我的代码结构如下:

模块初始化(函数 adc.ADS1263_init())

而(持续时间< 5s):

   读取函数(ADC.ADS1263_GetChannalValue)

   添加到数组的值

数组到 csv 文件

模块退出(adc.ADS1263_Exit())

如果有人有一条代码、或者至少有具体的指示、说明如何实现14k SPS 测量、我将不胜感激。

非常感谢

Thomas

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

    尊敬的 Thomas:

    您有一些问题:

    1. 您为您的应用选择了什么数据速率和滤波器选项?
    2. 您使用的是连续转换模式还是脉冲转换模式?
    3. 您是通过通道进行多路复用还是连续测量一个通道?

    对于第一次转换、ADC 转换延迟通常不是1/ODR、其中 ODR =输出数据速率。 请参阅 ADS1263数据表中的表9-13。 例如、如果您选择1200SPS 和 Sinc4滤波器、则第一个转换结果将在3.758ms 内可用。 该值等于~266SPS、考虑了数字滤波器趋稳以及开始转换所需的一些内部开销时间。 在连续转换模式下(但不是脉冲转换模式)、第二次和后续转换会到达1/ODR。 因此、根据您的采样方式、您不一定会期望1/ODR 的转换延迟

    我还想说的是、TI 不生产您使用的 Waveshare 电路板、因此我们对此电路板的支持有限。 我们可以尝试帮助诊断任何 ADC 问题、尽管这些问题可能很难与电路板设计分离。

    布莱恩

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

    您好 Bryan、非常感谢您的回复。

    1.对于数据速率,我选择了1200SPS。 至于滤波器、我在数据表中看到默认选择滤波器 FIR (在20SPS 以上不相关)、甚至深入研究了库、我找不到针对 Sinc4进行更改的方法、例如... 实际上、找到如何更改滤波器可能是这里的一个关键因素。

    我正在使用连续转换模式、因为它是默认配置的模式、与滤波器相同、我找不到要更改的函数...

    3.我假设我正在连续测量一个通道,因为我使用的是函数"GetChannelValue(ChannelValue)",而不是也可用的函数"GetAllChannelValue"。

    我已经阅读过(我认为在这个论坛上)、第一次转换需要更多时间、对我来说这不是问题。

    您对我应该使用什么 python 函数来更改滤波器有什么想法吗? 在您看来、您是否认为这会解决我的问题?

    谢谢你

    Thomas

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

    作为补充、这里是 python 库代码的一部分:

    ADC、增益和数据速率的配置参数
    DEF ADS1263_ConfigADC (self、gain、drate):
     MODE2 = 0x80
     mode2 |=(增益<< 4)| drate
     self.ADS1263_WriteReg (ADS1263_REG[REG_MODE2"]、Mode2)
     if (self.ADS1263_ReadData (ADS1263_REG[REG_MODE2"])[0]= Mode2):
      打印("REG_Mode2成功")
     否则:
      打印("REG_mode2 unsume")

     REFMUX = 0x24
     self.ADS1263_WriteReg (ADS1263_REG[REG_REFMUX]、REFMUX)
     if (self.ADS1263_ReadData (ADS1263_REG[REG_REFMUX])[0]= REFMUX):
      打印("REG_REFMUX 成功")
     否则:
      打印("REG_REFMUX 未成功")

     MODE0 = ADS1263_DELAY['ADS1263_DELAY_0s"]
     self.ADS1263_WriteReg (ADS1263_REG[REG_MODE0"]、MODE0)
     if (self.ADS1263_ReadData (ADS1263_REG[REG_MODE0"])[0]= MODE0):
      打印("REG_MODE0成功")
     否则:
      打印("REG_MODE0未成功")

    ######

    我假设 MODE1的定义缺失、因为它似乎是定义滤波器的模式(数据表 https://www.waveshare.com/w/upload/2/2a/Ads1262.pdf 的第92页)。 但是我不知道如何定义 MODE1来选择滤波器...

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

    尊敬的 Thomas:

    我不知道 ADS1263的任何现有库(使用 python 或任何其他编码语言)。 由于此代码是第三方代码、因此我们通常仅提供有限的支持。 如果您确实需要有关为 Raspberry PI、Python 等编写特定函数的帮助、我建议您在 MCU 论坛中发帖。

    如果您能够开始写入新函数或修改现有函数、我将首先读回 ADC 寄存器、以查看初始化后存储在其中的值。 这将使我们很好地了解转换开始后 ADC 的工作方式、以及如何修改寄存器设置以获得所需的功能。

    它还有助于了解 MCU 如何启动 ADC 转换过程:使用 START 引脚、通过 START/STOP 命令等? 这是仅在转换过程开始时发生一次、还是 MCU 持续切换引脚或发送命令?

    然后、您应该了解 MCU 如何知道数据何时就绪以及如何从 ADC 请求数据:它们是使用 DRDY 引脚还是其他方法?

    回答其中的一些问题肯定有助于弄清此器件正在发生什么(如果有)。 如果您有一个逻辑分析仪、肯定有助于更快地诊断这些问题。

    布莱恩