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.

[参考译文] 编译器/ads1232:ads1232输出稳定性

Guru**** 2579155 points
Other Parts Discussed in Thread: ADS1232

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/626246/compiler-ads1232-ads1232-output-stabilisation

部件号:ADS1232

工具/软件:TI C/C++编译器

实际上,我使用的是增益=128的ads1232

速度=10sps

当我读取ADC的输出时,其较低字节会发生波动,而中间字节和较高字节为okk。

这 是不是可能的,不管怎样,我可以完全稳定ADC的输出。在模拟输入上,我连接了一个10k的可变电位计

并与stm8s003k3微控制器连接。

正在等待回复。

索努  

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

    您好,Sonu:

    欢迎参加论坛!  遗憾的是,由于转换过程中存在固有的噪音,您将无法使所有位保持稳定。  也会有与电位计相关的噪音,也会有来自您的电源的噪音。  您可能会看到平均值的一些好处。

    在ADS1232数据表的第5页上,您将看到一些表格。  这是各种情况下的最佳噪声性能。  表1使用AVDD的5V显示了18.4 的无噪声位,这些位是增益为128的稳定位。  这意味着对于24位转换器,将切换更低的5到6位。

    我要提到的另一件事是,您使用电位计提供的输入电压不能用128的增益作为单端输入(AINN连接到AGND)进行测量。  数据表第3页给出了64和128增益的输入限制,其中绝对输入电压必须在ADS1232的共模输入范围内。  该电压必须大于AGND +1.5V且小于AVDD-1.5V。  使用1或2的增益可进行单端测量。

    此致,

    Bob B

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

    e2e.ti.com/.../8103.main.cthanks的回复,但我想问的另一件事是,您能否向我发送一个示例代码,以便我获得ads1232的线性和稳定输出

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

    您好,Sonu:

    ADS1232以二进制2的补码输出转换结果。  数据的格式已设置为24位的负值,因此您只需正确地对值进行符号-将值扩展为32位的符号值(长)。

    函数ADC_READ()返回一个无符号值。  这应该 是长整型,而不是无符号长整型。  此外,在第一个SCLK时钟转变为高时,您无法确定符号。  当 输入较低时,您正在设置值的高位也会出现如下所示的示例:

    如果(GPIO_ReadInputPin (DOUT)=0)
    {
    high _byte=high字节| y[m];
    } 

    对于ADC_READ函数,删除对号代码,将以上部分更改为= 1而不是0,并正确地进行符号扩展。  下面显示了一种方法:

    number=0;
    number=number|high字节;
    number=number<8|mid字节;
    number=number<8|low_byte;
    number=number<<8; //强制带符号的MSB进入长
    号=number>>>>8的MSB;//使用符号将值移回正确的值 

    在您的主函数中,您不断地将来自ADC_READ()的new_value等同起来,但您无法知道这是否是新数据。  您需要在main函数中轮询DOUT/DRDY,或者在ADC_READ中轮询,以等待新数据可用。  例如:

    whitle(GPIO_ReadInputPin (DOUT)!=0);

    如果您使用示波器或逻辑分析器,则可以检查所有计时。  首先,您需要检查并确保SCLK计时有效。  其次,您应该看到DOUT/DRDY以您选择的指定数据速率从高到低。  接下来,您应看到在范围内捕获的数据,并与程序中的数据进行比较。  在对平均算法进行操作之前,这一切都应该有效。

    此致,

    Bob B

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以提供一个示例代码来帮助我,以便我能够检查和比较这两个代码吗。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Sonu:

    我们拥有的ADS1232的唯一示例代码位于如下所示的位置。  由于此代码使用不同的处理器,实时操作系统和复杂的代码,我认为解决代码中的一些小问题会更容易,而不是被示例代码弄混淆。

    ftp://ftp.ti.com/pub/data_acquisition/ADS123xREF/ADS123x_CDROM/Firmware/Firmware_Source_Code/Source_for_123XREF_firmware-1.1.0d.zip

    祝您好运,

    Bob B

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因此,您是否可以在需要的地方编辑我的代码,并将其副本发送给我。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Sonu:

    很抱歉回复延迟。  我没有时间逐行浏览您的代码,但对于ADC部分,代码应该更像以下内容:

    签名长ADC_READ ()
    {
    字符m;
    CHAR ADC_SIGN=0;
    
    IF (GPIO _ReadInputPin (DOUT)==0) //已准备好黑客数据
    {
    高字节=0;
    mid_byte=0;
    low_byte=0;
    
    对于(m=0;m<8;m++)
    {
    GPIO写入低电平(SCLK);延迟(1);
    GPIO写入高电平(SCLK);延迟(1);
    GPIO写入低电平(SCLK);延迟(1);
    
    IF (GPIO _ReadInputPin (DOUT)!=0)
    {
    high _byte=high字节| y[m];
    						if (m==0) adc_sign=1;
    }
    };
    
    对于(m=0;m<8;m++)
    {
    GPIO写入低电平(SCLK);延迟(1);
    GPIO写入高电平(SCLK);延迟(1);
    GPIO写入低电平(SCLK);延迟(1);
    
    IF (GPIO _ReadInputPin (DOUT)!=0)
    mid_byte=mid_byte | y[m];
    };
    
    对于(m=0;m<8;m++)
    {
    GPIO写入低电平(SCLK);延迟(1);
    GPIO写入高电平(SCLK);延迟(1);
    GPIO写入低电平(SCLK);延迟(1);
    
    IF (GPIO _ReadInputPin (DOUT)!=0)
    low_byte=low_byte | y[m];
    
    };
    
    GPIO写入低电平(SCLK);延迟(1);// 25时钟
    GPIO写入高电平(SCLK);延迟(1);
    GPIO写入低电平(SCLK);延迟(1);
    number=0;
    number=number|high字节;
    number=number<8|mid_byte;
    number=number<<8|low_byte;
    						if(ADC_SIGD) number=number|0xFF0万;//值为负数
    
    }
    返回(数字);
    
    } 

    您还应在示波器或逻辑分析仪上验证通信。  这还包括SCLK计时,以确保时钟符合正确的高/低时间要求。  对于ADS1232,'delay(1)'的时间是否正确,我对此提出疑问。

    此致,

    Bob B

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这很好,但ADC输出的线性和稳定性有问题
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Sonu:

    我们回到了这条线的起点。  您不会显示原理图或说明ADS1232的增益引脚是如何连接的。  如果使用电位计施加电压,则只能使用1或2的增益。  如果电压源有噪音,或者电位计的连接中有噪音,您将在输出代码中看到噪音。  如果基准噪声较大,则会产生噪声代码。   如果您使用的电位计增益为64或128,您将看到线性问题,因为输入将超出ADS1232的共模输入范围。

    输出代码永远不会完全稳定。  页上的表1至表4显示了ADS1232在各种工作条件下的噪声性能。  尤其要注意无噪音位。

    当我回顾您的代码时,我不了解您的平均算法。  例如,'diff'是刚刚读取的值与平均计算值之间的差值。 您 使用的IF语句永远不会发生:

    IF (diff)

    ADS1232的最大正数代码为0x7FFFFFFF (小数为838.8607万)。  代码0xFFFFFF至0x80万是负代码(-1至-838.8608万)。  另外,我不理解您的两种不同平均方法。  合并时,您将看到不同的值,具体取决于比较结果,这将导致误差,并可能显示为线性误差。  在您知道您的数据有效之前,我不会使用平均算法。  噪音是可以预料的,但应首先减少所有外部噪音源。

    此致,

    Bob B

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

    e2e.ti.com/.../adc_2B00_stm_2B00_lcd.pdf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    以上是示意图,在AINP1,我连接了一个10 k电位计,以将输入提供给ADC
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外,还通过发现板编程器5V电压源为ADC提供电源
    增益=128
    速度=10 SPS
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Sonu:

    ADS1232在AINP和AINN之间进行差分测量。  增益为128时模拟输入的输入要求为AINN,AINP必须小于AVDD-1.5V和AGN+1.5V。  当增益为64或128时,您无法将AINN连接到AGND,并期望读数良好。

    如果您要使用电位计作为输入,您实际上需要使用其中的2 个(或至少其中一个用于一个输入,另一个用于分压器),因为两个输入都必须在正确的共模模式下才能实现设备操作。  您看到的线性误差很可能与您的输入电压有关。  另请记住,对于5V参考,电压差(AINP和AINN之间)必须限制为+/- 19.5mV。

    此致,

    Bob B

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是对您的请求
    如果您只需发送或编辑我的代码即可为我提供稳定的输出
    我将非常感谢您,也会给我发送一个非常兼容的原理图。