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:ADS1256数据转换

Guru**** 2510135 points
Other Parts Discussed in Thread: ADS1256, INA333

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1132828/ads1256-ads1256-data-conversion

器件型号:ADS1256
主题中讨论的其他器件: INA333

您好!

我使用 ADS1256读取压力传感器数据、这里我的 ADC 在0-5V 电位计下工作正常。 现在、我想在差分输入中使用压力传感器进行测试、但我需要将最大电压映射到104.32mV、以便在其0-5V 之前将其映射到0-104.32mV、因此对于固件侧、我将基准电压更改为0.05321V =104.32/2*1000使用此计算,但我无法获得此类的正确原始计数

例如、0-5V 它0-8388607、我希望0-104.32mV 相同、但当我输入0.1V 时、我的意思是100mV 、它 仅提供1962161、因此我如何同时映射原始计数和最终输出电压。?

请帮助我解决此问题。

谢谢你。

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

    您好、sagar m、

    ADC 代码映射到 ADC 满量程范围(FSR)、即2*±VREF/增益。 假设 VREF = 2.5V、下表显示了 ADS1256中所有可用增益的 FSR 电压。

    如果最大输入信号为100mV、则需要选择32的增益。 这意味着当您的差分输入信号为156.25mV 时、将实现最大正代码(8388607)。 如果您的最大输入信号仅为100mV,则您的最大 ADC 输出代码为(100mV/156.25mV )*8388607=536708

    这是您可以使用 ADS1256集成 PGA 和 FSR 实现的最佳选择。 您始终可以降低基准电压以降低 FSR、但我认为在噪声性能等方面不会对您的系统产生太大的帮助 另一种选择是使用增益为50 的外部增益级、这将为您提供2*±2.5/50 =±100mV 的 FSR。 如果您选择此选项、则可能会考虑在输入信号超过100mV 时为系统添加一些余量。

    布莱恩

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

    您好、Bryan 感谢您的回复、是的、当 增益从0-150.25mV 变为32时、它仍然有效

    是否可以准确映射 到104.32mV??

    2.我可以对不同的通道使用不同的增益吗??

    3.我是否可以同时使用差分和单端两种方式  

    4.根据我的知识,如果我们使用差分,则原始计数在-8388608 至8388607之间变化,对于单端,它应该在0-16777215之间变化,对吧?

    但是、当我使用5V 电位计时、它仅显示0-8388607个单端计数是正确的还是需要任何更改。?

    如 需更多信息、请告诉我。

    谢谢你。

      

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

    您好、sagar m、

    您的问题答案如下:

    [引用 userid="500152" URL"~/support/data-converters-group/data-converters/f/data-converters-forum/1132828/ads1256-ads1256-data-conversion/4206295 #4206295"]我能否准确地映射 到104.32mV??

    正如我在上一篇文章中提到的、您始终可以降低基准电压以降低 FSR、但我不知道您为什么要这样做。 衰减基准电压可能会增加噪声和误差、因此这通常会使您的系统性能变差。 另一种选择是使用增益为50 的外部增益级、这将为您提供2*±2.5/50 =±100mV 的 FSR。 如果您选择此选项、则可能会考虑在输入信号超过100mV 时为系统添加一些余量。

    [引用 userid="500152" URL"~/support/data-converters-group/data-converters/f/data-converters-forum/1132828/ads1256-ads1256-data-conversion/4206295 #4206295"]我是否可以为不同的信道使用不同的增益??

    是的、只需确保使用的增益设置不会将输入信号增加到 ADC 的满量程范围之外。  写入 ADCON 寄存器来改变 ADS1256增益

    [报价 userid="500152" URL"~/support/data-converters-group/data-converters/f/data-converters-forum/1132828/ads1256-ads1256-data-conversion/4206295 #4206295"]我是否可以同时使用差分和单端报价[/报价]

    ADS1256是一款多路复用 ADC、因此您无法同时测量两个通道。 但是、您可以混合使用单端信号和差分信号、ADC 可以根据需要进行测量。 ADC 始终测量您为 PSEL 选择的模拟输入与为 NSEL 选择的模拟输入之间的差分电压(请参阅 MUX 寄存器)。 如果 NSEL 上的电压= 0V、这是单端测量

    [引用 userid="500152" URL"~/support/data-converters-group/data-converters/f/data-converters-forum/1132828/ads1256-ads1256-data-conversion/4206295 #4206295"]根据我的了解,如果我们使用差分,则原始计数在-8388608 至8388607之间变化,单端的原始计数在0-16777215之间变化右侧?

    这是不正确的。 ADS1256具有二进制补码方案。 正差分电压将为您提供介于0至8388607之间的代码、而负差分电压将为您提供介于-8388608至0之间的代码。 没有将代码范围从二进制补码更改为单极的选项

    布莱恩

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="204916" URL"~/support/data-converters-group/data-converters/f/data-converters-forum/1132828/ads1256-ads1256-data-conversion/4206883 #4206883">另一种选择是使用增益为50的外部增益级,这将为您提供2*±2.5/50= ±100mV 的 FSR。 如果您选择此选项、您可能会考虑在输入信号超过100mV 时为系统添加一些余量。[/QUERP]

    您好 Bryan、感谢您的回复、

    如果您不介意、可以深入地解释一下我如何使用 外部增益、比如我需要添加一些额外的硬件电路或其他电路。

    [引用 userid="204916" URL"~/support/data-converters-group/data-converters/f/data-converters-forum/1132828/ads1256-ads1256-data-conversion/4206883 #4206883"]

    这是不正确的。 ADS1256具有二进制补码方案。 正差分电压将为您提供介于0至8388607之间的代码、而负差分电压将为您提供介于-8388608至0之间的代码。 没有将代码范围从二进制补码更改为单极的选项

    布莱恩

    [/报价]

    好的。 实际上、我将解释具体的应用可能是您提供解决方案的简单方法。 在我的项目中、我希望读取压差传感器和压力传感器的数据、因为我已经为压差传感器 A0和 A1使用了压差通道读数。 两个压力传感器作为一个单端传感器、因此对于差分、其范围为0-8388607 (正满量程)和-8388608 (负)至0。它运行良好、但我需要单端的原始计数为0-16777215、这是可行的。

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

    您好、sagar m、

    是的、您需要设计具有所需增益的外部放大器级。 基本器件类似于 INA333仪表放大器(您也可以使用分立式放大器构建仪表放大器)。 德州仪器(TI)有许多其他放大器可供选择,因此我建议您在 TI.com 上查看可用的器件,以查找符合您要求的器件。

    INA 输出通常为伪差动。 换句话说、VOUT 引脚上的电压以 REF 引脚为基准。 REF 引脚上的电压可以接地或其他电压为基准。 在您的情况下、假设您不会使用 ADS1256内部缓冲器、我建议使用2.5V 电压。 连接图与我在下面绘制的图像类似

    您的差分输入信号将应用于 IN+/IN-处的 INA。 INA 将增益差分输入信号并在 VOUT 上输出相对于 REF 上电压的放大信号。 如果 VOUT 处的电压大于 REF,ADC 将测量正差分输入。 如果 VOUT 处的电压为<REF, the ADC will measure a negative differential input. 这就是您能够更接近使用全范围 ADC 代码的方式。

    您还可以使用伪差分测量来允许单端信号使用整个 ADC 代码范围(±FS)。 请注意、AINN 上的电压可能需要有所不同、具体取决于传感器的单端输出。 但我要让您弄清这一点、因为它与 INA 的工作原理相同、如下图所示

    布莱恩

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

    非常感谢 Bryan、我将尝试使用它来获得不同的增益、实际上、今天我通过将 A0连接到 ADC 来尝试使用5V POT 进行单端测试 、这里是用于原始计数数据读取的代码和  

    static int32_t ads1256_read_result(void)
    {
        int32_t read = 0;
        uint8_t buf[3];
    
        ads1256_write_cmd(CMD_RDATA);	/* read ADC command  */
    
        ads1256_delay_us(10);	/*delay time  */
    
        /*Read the sample results 24bit*/
        while( HAL_SPI_Receive(&hspi2, buf, sizeof(buf), SPI2_HANDLE_TIMEOUT) != HAL_OK );
        read = ((uint32_t)buf[0] << 16) & 0x00FF0000;
        read |= ((uint32_t)buf[1] << 8) & 0x0000FF00;; /* Pay attention to It is wrong   read |= (buf[1] << 8) */
        read |= buf[2];
    
        /* Extend a signed number*/
    
    //    read|=0x800000;
    //      if(read > 0x800000)
    //      {
    //      	read-=16777215-read;
    //      }
        printf("before_raw:%ld\t",read);
        read|=0x800000;
        if(read > 0x800000)
        {
        	read-=16777215-read;
        }
    	printf("raw_data:%ld\t",read );
    
        return (int32_t)read;
    
    }

    这用于电压转换  

    static int32_t ads1256_conv2uv(int32_t adc_result)
    {
        /* Vin = ( (2*Vr) / G ) * ( x / (2^23 -1)) */
    	int gain=0;
        float voltage_uv =  ((float)adc_result)*ADS125X_VREF_VOLTAGE/8388607.0;
        printf("gain:%d\t",(ads125x_conf.gain));
        if((ads125x_conf.gain) == 0)
        {
        	gain=1;
        }
        else if((ads125x_conf.gain) == 1)
        {
        	gain=2;
        }
    	else if((ads125x_conf.gain) == 2)
    	{
    		gain=4;
    	}
    	else if((ads125x_conf.gain) == 3)
    	{
    		gain=8;
    	}
    	else if((ads125x_conf.gain) == 4)
    	{
    		gain=16;
    	}
    	else if((ads125x_conf.gain) == 5)
    	{
    		gain=32;
    	}
    	else if((ads125x_conf.gain) == 6)
    	{
    		gain=64;
    	}
    	else
    	{
    		gain=1;
    	}
        voltage_uv /=gain;
        voltage_uv *= 1000000;
        return (int32_t)voltage_uv;
    }

    我的输出范围为0-5V、原始计数为0-16762165、因此 我感到困惑的是、这是否正确??

    我在 TI 论坛上得到了一些答案,例如负满量程需要增加800000h,它给出0000h 0加800000h, 然后给出800000h,正量程需要增加800000h,然后给出 FFFFFFh,这样它就像变化0-16777215。

    因此、请您对此表示最后的怀疑、我希望您了解我的情况  

    谢谢你。

     

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

    您好、sagar m、

    下表显示了如何将输入电压映射到 ADS1256的 ADC 输出代码。 如数据表所述、这些值使用二进制补码方案进行编码。 因此、如果将这些代码值从十六进制转换为十进制、您会看到:

    • 7FFFFFh = 8388607
    • 000001h = 1
    • 000000h = 0
    • FFFFFFh =-1
    • 800000h =-8388607

    因此、当 ADC 输出 FFFFFFh 时、ADC 的输入电压是非常小的差分负电压。 它是16777215。 因此、您必须在软件中执行符号扩展、以确保正确解读数据、即确保读取负差分电压为负。

    如果还有其他问题不清楚、请告诉我。

    布莱恩

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

    非常感谢 Bryan、他明确了不同的增益变化。

    对于差分、范围为 -8388608至0 (-ve 满量程)和0-8388608 (+ve 满量程)。

    对于单端,如果我使用0-5V 电位计,则电位计的范围为0-8388608,如果输入为负,则我们可以通过完全正确的有符号转换对其进行转换

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

    您好、sagar m、

    您对差分范围正确无误。

    对于单端输入(其中 ADC AINP 引脚连接到某个正电压、ADC AINN 引脚接地)、不应存在负电压。 测量负差分电压的唯一情况是使用伪差分输入、其中 AINN 引脚连接到某些固定电压、例如2.5V。

    此外、在这两种情况下、您都需要对差分或单端输出进行符号扩展

    布莱恩

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="204916" URL"~/support/data-converters-group/data-converters/f/data-converters-forum/1132828/ads1256-ads1256-data-conversion/4208396 #4208396"]对于单端输入(其中 ADC AINP 引脚连接到某些正电压、ADC AINN 引脚接地)、不应存在负电压。

    好的、如果我使用单端0-5V 电位 计抽头引脚连接 AINP 和 AINN id GND、那么原始计数是多少??   

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

    您好、sagar m、

    您将能够使用1/2的代码范围或 0-8388608、如之前所述。

    当传感器输出为单端时、使用完整代码范围的唯一方法是将 ADC 输入更改为伪差分测量。 我在上一篇有关 INA 的文章中对此进行了介绍。

    布莱恩