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.

[参考译文] ADS1256:ADC 通道间的噪声耦合

Guru**** 2540720 points
Other Parts Discussed in Thread: ADS1256

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/778525/ads1256-noise-coupling-between-adc-channels

器件型号:ADS1256

尊敬的 Chris:

我正在收集 ADS1256上2个 ADC 通道的数据。 下面是两个单独试验的图像

我将其接地的第一个通道、我将其连接到 PSU 的第二个通道、我更改其输出电压。 您可以看到、噪声在两个通道之间耦合。 该图显示、第一个通道(GND)的噪声振幅受第二个通道(PSU 电压)的曲线限制。

我想知道这一问题的原因可能是什么。

谢谢、

Khoi Ly

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

    您好、Khoi、

    在不深入了解您的输入电路的情况下、很难说出可能发生的情况。 如果您有原理图、您可以分享它会很有帮助。 很遗憾、我无法访问您在上一个主题中发布的 Google 驱动器链接。

    乍一看、它会不时出现串话或数据损坏。 可能的原因包括:

    • 数据格式化。 从0到满量程的跳变可能是将数据视为无符号数据。 ADS1256生成有符号数据、因此在0xFFFFFF(-1)、0x000000 (0)、0x000001 (1)周围查看数据是很常见的。 如果未转换为带符号的十进制值、则数据可能看起来像是在零和满量程之间跳跃。

    • 在转换完成之前读取数据。 如果在/DRDY 下降沿之前读取和重新读取数据、则可能会在两个通道上获得相同的重复转换结果。 由于 CH1和 CH2倾向于跳转到上一个通道的值、因此您可能会读取两次相同的数据。

    此外、当 CH2最大值超出 ADC 的输入范围时、我还稍微担心 CH2的输入电压实际上会达到多高。 请确保 PSU 电压和电流受到限制、以免损坏 ADC。 过压情况下、电流应限制为10mA。

    我建议尝试几个不同的测试以进行故障排除...

    • 尝试在不使用多路复用的情况下测量单个通道、并查看此行为是否仍在发生。 如果它消失、则很可能是数字问题。 如果不是、那么可能会有某种串扰或真正的模拟效果。
    • 尝试使用较慢的数据速率、并查看错误是否消失。 如果是、则可能与数据损坏有关。
    • 使 CH2上的电压保持恒定、并查看是否仅使用直流信号发生串扰。

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

    尊敬的 Chris:

    当我将采样率降低5倍时、两个通道之间的耦合信号消失。 我认为这是当时的数据损坏。

    对于(i=0;i<=5;i++){ //读取全部6个单端通道 AIN0、AIN1、AIN2、AIN3、AIN4、 AIN5
    while (GPIO_GET_LEVEL (PIN_NUM_DRDY)=1){};//等待直至数据读取拉低
    //通道寄存
    器之间切换 reg = 0x01;cmd = 0x00;data = mux[i];//第一个命令字节:0101 0001 0001 0001 =多路复用器寄存器地址01h
    
    ADS1256_REG (SPI、reg、Data);Data cmd://字节 xxxx 1000将数据字节写入寄存器
    
    //SYNC 命令1111 1100 (0xFC)
    cmd = 0xFC;
    ADS1256_cmd (SPI、cmd);
    
    //WAKEUP 0000
    cmd = 0x00;
    ADS1256_cmd (SPI、cmd);
    
    //读取数据
    cmd = 0x01;
    ADS1256_cmd (SPI、cmd);//读取数据0001 (0001);//读取数据0001 (0001) //******** 步骤3******
    
    adc_val[i]= ADS1256_read (SPI);
    adc_val[i]<= 8;//向左移动
    adc_val[i]|= ADS1256_read (SPI);
    adc_val[i]<= 8;
    adc_val[i]|= ADS1256_read (SPI); 

    我想知道上面的代码片段中有 DRDY 问题的位置吗? 我可以查看逻辑分析仪并适当设置延迟。

    谢谢、

    Khoi Ly

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

    我看不到代码本身存在什么"错误"。 可能只是 MCU 上轮询/DRDY 和读取数据的速度不够快、无法跟上 ADS1256的更高数据速率。

    您的 SPI SCLK 的速度有多快、您是否能够提高 SCLK 频率? 注意:SCLK 只能以 fCLK/4的速度运行(或者对于一个7.68MHz ADC 时钟为1.92MHz)。

    您是否能够使用/DRDY 中断读取 ADC 数据。 轮询 GPIO 引脚()硬件可能比轮询硬件中断期间设置的内部变量所花费的时间更长。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Chris:

    在上一个主题中、您提到 ADS1256最快的时钟速率是 Fclock/2、即~3.4MHz;在您的回复中、SCLK =1.92MHz 意味着什么?

    因此、我目前使用计时器中断将收集速率设置为500Hz、即使 DRDY 以30000个样本/秒的速率运行 如果我改为为 DRDY 引脚设置硬件触发中断、我想知道如何有选择地定期跳过几个 DRDY 拉低事件、以便我能够实现500Hz 采样率。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Khoi、

    不同 ADC 之间的最大 SCLK 频率不同、我可能已经将此要求与允许 fCLK/2的不同器件混合在一起。 抱歉。

    从 ADS1256数据表中、我可以在此处获得此要求:

    最小 SCLK 周期(T1)为 fCLKIN 周期(或 tCLKIN)的4倍。 因此、如果 fCLKIN = 7.68MHz、那么 SCLK 不应超过1.92MHz。 例如、如果您的 SCLK 频率为100kHz、那么将 SCLK 加速至1.5MHz 或1.9MHz 将使您能够以更快的速度读取数据、并帮助您的 MCU 跟上 ADC 的数据速率。

    [引用 USER="Khoi Ly10">...因此、我目前使用计时器中断将收集速率设置为500Hz、即使 DRDY 以30000个样本/秒的速率运行 如果我改为为 DRDY 引脚设置硬件触发中断、我想知道如何有选择地定期跳过几个 DRDY 拉低事件、以便我能够实现500Hz 采样率。[/QUERPLET]

    唯一的问题是您可能在/DRDY 下降沿期间读取数据(或发送 RDATA 命令)并获取损坏的数据。 为了避免这种情况、您可以做一些事情...

    • 等待1.96ms、然后在下一个/DRDY 下降沿之后读取数据。 这适用于单个通道、但对于多个通道、您可以在较小的延迟下进行编程、以接近所需的500SPS/通道。 其理念是、在/DRDY 下降沿之后、再使用 RDATA 命令开始读取数据(如果没有 RDATA 命令、则必须能够在转换周期内读取所有数据)。

    • 通过调整 ADC 的数据速率和主时钟频率(fCLKIN)、尝试近似为500SPS/通道。 数据速率将与主时钟线性调整、因此、如果您可以找到频率合适的时钟、则可以微调输出数据速率。

    • 仿真脉冲转换模式。 ADS1256没有脉冲转换模式、但您可以定时发送 WAKEUP 命令、以便 ADC 的转换在您希望获取数据时完成。

    无论您决定使用哪种方法、我都建议使用获得500SPS/通道所需的最慢数据速率。 如 表1所示、较慢的数据速率具有较低的噪声。