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.

[参考译文] ADS124S08:ADS124S08 ~比预期慢 10 倍

Guru**** 2928790 points

Other Parts Discussed in Thread: ADS124S08

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1651243/ads124s08-ads124s08-10x-slower-settling-than-expected

器件型号: ADS124S08

您好:   

我们使用有线 ADS124S08 进行 RTD 测量、旨在与数据表中的应用图 2-9 和图 2-11 相匹配。    
  
我们遇到的 ADC 读数稳定时间需要超过 3 秒才能稳定。  滤波器选型似乎不会影响较长的稳定时间。    

我们的目标设置为 20SPS 内部滤波器(50ms 转换时间)、带有外部 40Hz 模拟滤波器 (Tau 4ms、24 位稳定时间~60ms)。    

因此、我们预计在几百毫秒内趋稳、但我们测量的趋稳时间约为 3 秒。  比预期差大约 10 倍。    

可能导致这种差异的任何常见缺陷?   

此致、   

-杰夫   

附件:    

使用固定 1k 电阻器代替实际 RTD 时的稳态输入稳定:    

image.png

构建的原理图片段(旨在与数据表中的图 2-9 和 2-11 匹配):    

image.png

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

    尊敬的 JSR:

    ADS124S08 数据表 中没有 图 2-9 和图 2-11。 我想您之前查看 过应用报告

    我有一些问题:

    1. 图中 y 轴的归一化值是多少?  ch0 55us 和 ch0 16ms 在配置和测试方面有何差异?
    2. 您是在指定的信道上进行测试、还是在每个信道上使用 1k Ω 电阻器切换了这些信道? 您是如何对它们进行布线的?

    建议:

    1. 确保 REFP0 缓冲器打开 、而 REFN0 缓冲器关闭(这些是默认设置)。 您还应  从电路中移除电容器 CPR 和 CNR、为 CDR 选择一个较小的电容值、并将电阻器 RNR 替换为 0 欧姆电阻器。  
    2. 按照指南选择差分输入电容器和共模输入电容器、1uF 电容器容值 较高、请参阅链接 【常见问题解答】Δ — Σ ADC 抗混叠滤波器元件选择中有关输入抗混叠滤波的详细信息。

    BR、

    Dale

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

    尊敬的 Dale:

    感谢您的及时回复。  您说的是对的、我看的是应用报告、而不是数据表;很抱歉。

    感谢常见问题解答链接:在其中、我注意到共模滤波电容器应至少小 5 倍。

    关于您的问题:

    1.检查...

    2.每个通道上都有一个专用的 1k 电阻器。  它的布线方式与 应用报告中的图 2-9 完全相同

    关于您的建议:我们会给这些尝试...

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

    尊敬的 JSR:

    根据我的建议修改电路并重新捕获数据后、请 尽可能共享您的原始数据和配置或软件代码。

    BR、

    Dale

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

    以下是测量之前的寄存器设置:  

    conv_delay: 14
    datarate:   0x15
    dev_id:     0x08
    fscal0:     0x00
    fscal1:     0x00
    fscal2:     0x40
    gpiocon:    0x00
    gpiodat:    0x00
    idacmag:    0x04
    idacmux:    0xf2
    idac_settling_time_ms: 0
    inpmux:     0x01
    ofcal0:     0x00
    ofcal1:     0x00
    ofcal2:     0x00
    pga:        0x08
    ref:        0x12
    settling_time_ms: 10
    status:     0x80
    sys:        0x10
    vbias:      0x00

    转换代码为:  

    static int ads124s_do_conversion(struct iio_dev *indio_dev,
    				 const struct iio_chan_spec *chan, int *raw)
    {
    	struct ads124s_private *priv = iio_priv(indio_dev);
    	int ret;
    
    	dev_dbg(&priv->spi->dev, "%s\n", __func__);
    	if (priv->meas_type == MEAS_TYPE_THREE_WIRE) {
    		const struct ads124s_rtd_mux *m = &ads124s_rtd_mux_tbl[chan->channel];
    
    		ret = ads124s_write_reg(indio_dev, ADS124S08_INPUT_MUX,
    					(m->ain_p << ADS124S08_POS_MUX_SHIFT) | m->ain_n);
    		
    		ret = ads124s_write_reg(indio_dev, ADS124S08_IDACMUX,
    					(ADS124S08_IDACMUX_OFF << ADS124S08_IDACMUX_I2MUX_SHIFT) |
    					m->ain_idac);
    		if (ret) {
    			dev_err(&priv->spi->dev, "Set IDACMUX failed\n");
    			return ret;
    		}
    		if (priv->idac_settling_time_ms)
    			msleep(priv->idac_settling_time_ms);
    	} else {
    		ret = ads124s_write_reg(indio_dev, ADS124S08_INPUT_MUX,
    					(chan->channel << ADS124S08_POS_MUX_SHIFT) |
    					ADS124S08_AINCOM);
    	}
    	if (ret) {
    		dev_err(&priv->spi->dev, "Set ADC CH failed\n");
    		return ret;
    	}
    		if (priv->settling_time_ms)
    			msleep(priv->settling_time_ms);
    		
    
    	dev_dbg(&priv->spi->dev, "Set ADC Channel\n");
    	
    
    	ret = ads124s_write_cmd(indio_dev, ADS124S08_CMD_START);
    	if (ret) {
    		dev_err(&priv->spi->dev, "Start conversions failed\n");
    		return ret;
    	}
    	dev_dbg(&priv->spi->dev, "conversion started ch%d\n", chan->channel);
    
    	msleep(priv->conversion_time_ms);
    
    	ret = ads124s_read(indio_dev, chan->channel, raw);
    	if (ret < 0) {
    		dev_err(&priv->spi->dev, "Read ADC failed\n");
    		return ret;
    	}
    
    	ret = ads124s_write_cmd(indio_dev, ADS124S08_CMD_STOP);
    	if (ret)
    		dev_err(&priv->spi->dev, "Stop conversions failed\n");
    
    	return ret;
    }

    器件配置为“三线“测量类型。  

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

    尊敬的 JSR:

    感谢您分享寄存器配置。 您正在为每个 RTD 使用 3 个模拟输入通道(1 个 IDAC+ 2 输入)、但 连接实际上是 2 线 RTD 测量。 期待您的新原始数据。

    BR、

    Dale

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

    尊敬的 Dale:  

    完全同意。 名为“type_thre_wire“的 meas_type 枚举是一种传统的错误命名方式、我们一直认为这是要纠正的。  

    或者您指的是其他东西吗?  对于两线测量、寄存器配置是否错误?

    谢谢、

    Sam

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

    我们从电路中移除了 CPR 和 CNR、将 CDR 从 1uF 降低到 100 pF。 附上生成的图。 该视频比较了修改后的 SPI3.7 器件中未经修改的 SPI3.6 器件。  奇怪的是、只有通道 0 上的测量值发生了变化。  其他部分保持不变。  

    该图显示了每个通道的 10 次测量序列。 Y 轴为 “Value/Last (value)- 1“

       for dev in devices:
            for ch, color in zip(channels, colors):
                t, v = read_channel(dev, f'in_temp{ch}_raw', args.n)

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

    数据表在 10.1.6 中包含用于对单个通道进行多次测量的伪代码。  
    是否有 在每个通道上进行单次测量循环使用多个通道的应用手册或示例?

    第二个 — 我们无法访问 DRDY 引脚以用作触发中断。  目前、我们依靠开环时序 (msleep) 来等待转换完成。  是否有更好的方法来确定转换是否完成?  

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

    您好、Sam、

    我想您正与 Jeff 在同一个团队合作。

    我认为您的寄存器配置看起来不错。 您的数据速率配置为 50SPS、使用低延迟和连续触发模式、因此  使用内部 4.096MHz 振荡器时、第一次数据转换应花费 5160*tmod、即 20.156ms、第二次及后续转换应花费 5120*tmod、 使用 内部 4.096MHz 振荡器时、这应为 20ms。  您 在进行测试时是否使用 0 欧姆电阻器替换了电阻器 RNR?

    您可以在此 链接中找到代码示例

    链接中包含所有应用手册

    您是否在检查 DOUT/DRDY 引脚 12 上的数据是否就绪?

    BR、

    Dale