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.

[参考译文] ADS1271EVM:ADS1271EVM

Guru**** 2538960 points
Other Parts Discussed in Thread: ADS1271

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/724566/ads1271evm-ads1271evm

器件型号:ADS1271EVM
主题中讨论的其他器件: ADS1271ADS1271EVM时钟和数据速率
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的社区用户:

    首先,请抱歉我的英语不好。 我对 ADS1271EVM 的数据速率(!DRDY 信号)有疑问。 在开始之前、请让我解释一下我的硬件设置:

    我尝试创建数据采集系统、为此、我将 ADS1271EVM 与 Arduino Due 结合使用。 主时钟由 Arduino 通过占空比为50%的 PWM 生成。 这种方法允许我轻松更改主时钟、从而更改 ADS1271的数据速率/采样率。 此外、ADS1271EVM 由外部 SCLK 源在高速模式下驱动。 顺便说一下:EVM 板上只有一个 ADS1271处于活动状态。 数据通过 Arduino 通过 SPI 读出、因为 Arduino 通常工作正常。 在测试中、我对幅值为1V 的100Hz Sinus 信号进行了采样、该信号由高质量声卡生成。 在附件中、可以看到使用 ADS1271EVM 采样的正弦值。 信号非常清晰! 当我计算 FFT 时、我真的"震惊"看到采样率比估计值低两倍。

     在附件中、您可以看到两个图:一个图仅显示当 SCLK 为低电平时的!DRDY 脉冲、以检查采样率。 您可以看到、在这种情况下、采样率等于估计值20.4Khz@ CLK=10.4MHz。 第二个图显示了通过 SPI 读取数据时的信号。 该图由 CLK=27mH (Fs=52.6kHz)获得。 我们可以估计52.6kHz 的采样率、但您可以看到数据以大约26.3kHz 的频率进行采样。 此外、您还可以看到!DRDY 信号的一种"预脉冲"信号... 在数据表中、SPI 时序要求图中没有"预脉冲"。 这种预脉冲是正常行为还是有错误?

    我读取样本的过程:

    /

    void loop(){
    if (DATAREADY)
    {
    //这是为了避免两次中断,因为当发生预脉冲时,!DRDY 再次变为高电平!
    PIOD->PIO_IDR = DRDY; //禁用!DRDY 引脚上的中断
    
    adc_val 高字节= spi.transfer (0x00);
    adc_val 中间字节= spi.transfer (0x00);
    adc_val_low_Byte=spi.transfer (0x00);
    
    
    //这是为了避免两次中断,因为当发生预脉冲时,!DRDY 再次变为高电平!
    while (digitalRead (12)=高电平){
    PIOD->PIO_IER = DRDY; //再次在!DRY PIN 上启用中断
    }
    DATAREADY=0; 

    } //这是!DRDY 中断引脚的 ISR。 当 PIN 状态升高时、它会升高! void ADS1271_DATAREADY() { DATAREADY=1; }

    注意:这种行为不取决于 CLK... 我不得不对不同 CLK 的图表示歉意。 它们不是在同一个 CLK 上获取的、但我可以确保行为相同。

    非常感谢您的每一个提示!

    此致、
    图格鲁尔

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

    感谢您的发帖、很抱歉耽误您的时间!

    今天我没有机会来看看这个、但明天我会回来的!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Tubrul:

    感谢您提供详细信息!

    由于您看到这种"预脉冲"、因此我认为器件以某种方式"被保持"。

    根据用户指南:"应用程序将自动将数据速率降低到所选模式允许的最大值。"

    仔细检查您的跳线和开关以确保一切井然有序、有时很容易意外地移动开关或跳线而不会意识到它的脱落。

    接下来、尝试跟踪从 Arduino 到调制器和输出数据速率的时钟信号、以确保其中没有额外的/2。 有很多不同的配置模式可以解释为什么您看到的 ODR 是您所期望的一半。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alexander、

    感谢您的快速回复。 我已经尝试在具有轮询功能的主 while 环路中等待!DRDY 信号,现在!DRDY 信号看起来“正常”,所以我得到估计的采样率! 我不确定, 但中断例程或处于中断模式的 GPIO 可能会导致该信号错误.... 正如大家看到的、我使用的是"Arduino-C-Code 而不是"low-leve-C-Code"、因此我不知道"简单"命令背后到底是什么代码...  

    我的硬件设置实际上是实验性的、这意味着 ADS1271EVM 通过"跳线"与 Arduino 到期板相连。 由于缺少50欧姆电阻器、信号线路上可能会有一些反射、但在轮询方法中、我从未经历过任何反射(请参阅 Sinus 示例图!)。  

    第二个问题是:振幅不准确:示例 sinus 具有0.5V (P2P:1V)、但采样的 sinus 显示:0.9V 至-0.6V...  

    原因是什么?

    1) ADS1271输入(AINP 和 AINN)与信号源之间缺少 ADC 缓冲器?

    2) 我用于将24位值转换为电压的代码缺点:

    adc_val 高字节= spi.transfer (0x00);
    adc_val 中间字节= spi.transfer (0x00);
    adc_val_low_Byte=spi.transfer (0x00);
    
    ADC_val =(ADC_val 高字节<16)|(ADC_val 中位字节<8)|(ADC_val 低字节);
    
    如果(ADC_val > 0x7fff){//if MSB = 1
    ADC_val = ADC_val - 16777216;
    }
    
    电压= acc_v/((2^23-1)/v_ref);//v_ref=2.5V 

    谢谢!

    最好的雷加尔

    图格鲁尔

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

    很高兴听到第一个问题得到解决!

    您是否在正弦波上设置共模?
    即正弦波1Vpp 是以 GND 为中心还是2.5V 为中心?

    如果您查看数据表的模拟输入部分、您将看到输入的限制。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alexander、

    Sinus 没有共模、因此没有直流失调电压。

    据我了解、我可以连接到 AINP 和 AINN、信号可以在0V 电平附近摆动、这意味着正负振幅。 对于 ADS1271 +-VREF (2、5V)。

    我可以交替连接到 AINP 和 GND 引脚、但幅值限制为:GND 到 AVDD+0、1V 或具有完全负信号的信号(具有负直流偏移):

    -AVDD-0、1V 至 GND。

    我的描述是否正确,或者我是否走错了路;-)

    此致、

    图格鲁尔

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

    很抱歉耽误你的答复。

    我认为没有缓冲区是个问题。

    ACC_val 是另一个变量、还是应该在代码中成为 ADC_val?
    我使用电压=代码-1 x LSB/增益、其中 LSB =满量程范围/2^24