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:线性校准问题

Guru**** 1131400 points
Other Parts Discussed in Thread: ADS1232, ADS1232REF
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/600840/ads1232-linearity-calibration-issue

部件号:ADS1232

您好,

在我的项目中使用ADS1232 接口与PIC 18F4520。  我使用的是数据表中图42的示意图。DVDD中的3V是5V,而不是3V。 不使用Crystal。

负荷传感器:5kg

灵敏度:2mV / V

我得到的是: 103.2607万

重量为3891克: 409.223万

重量为2004克: 313.7156万

我使用的是ADS1232Ref中的公式。

M = 3891 / (409.223万 - 103.2607万) 305.9623万
M = 0001271725
Wzs =-0.0.01271725亿 * 103.2607万
WZ =-1 31.3192万
W = 0001271725 * 313.7156万 -1 31.3192万  
W = 2676,40 g (非2004 g)
代码为:

长ler_ADC (无效)

int i=23;
int j = 1;
长距离= 0;
char txtexp[30];


while (sdi = 1)

}

对于(i=23;i>=0;i--)

  SCK=1;

  IF (SDI = 1)
           { valor1[i]='1';}

否则
      {valor1[i]='0';}

}


SCK=1;
DELAY _Us (10);
SCK=0;

//二进制到十进制

rawadc = 0;
用于(j=0;j<24;j++)

IF (valor1[j]='1')

TEste = 0;
tebe = ldexp (1,j);
rawadc = rawadc + tebe;
}
否则{}
}
UART1_Write_Text("");
LongToStr (rawadc,txtexp);
UART1_Write_Text (txtexp);

}

SCK = SCLK
SDI = DRDY/DOUT
我做错了什么?

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

    您好,Caio:

    欢迎参加论坛! 至于您要处理的问题,我会先查看初始数据结果 ,然后再进行校准,以确定其是否合理。  您的零值似乎很高,约为2mV,约为称重传感器满刻度输出的1/5。  我会确保您正确地解释该值。  ADS1232以二进制2的补码输出转换结果。  我会将  您在C代码中看到的结果与在范围或逻辑分析器上返回的数据进行验证,以确保它们匹配。

    您还应该在开始之前通过发出26个SCLK来执行自偏移校准。  最后,您需要尝试了解零代码显示 的值远高于零的原因。  

    通过计算而不进行校准,您应该会看到接近预期结果的结果。  如果不是,则您收集数据的方式很可能有一些错误。  无负载结果代码应限制为ADS1232器件 偏移(可 使用自偏移校准进行校准) 和称重组件本身的任何初始偏移。  偏移可以是正或负。  

    如果一个代码表示大约2.33nV,则可以计算每克的预期代码。  如果5 kg 负载的刻度输出最大值为10mV,则10mV/2.33nV/5000应提供代码数/g (858代码/g)。

    3891 g应为333.8478万,2004 g应为171.9432万代码。  重量差异为1887克,或约161.9046万代码。  返回的代码中没有一个接近,因此我会验证我的结果,以确保您的C 代码中获得正确的值。

    此致,

    Bob B

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

    感谢您的快速回复。

    我更换了称重传感器。

    现在我有这些数据:

    零(错误,我不知道为什么)- 1677.0047万
    16G - 4739
    4005g - 365.4655万
    2004年g - 181.7965万

    我现在差不多快到了,但我不知道如何用零质量获得正确的代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Caio:

    您需要对值进行正确签名。   从0xFFFFFF返回到0x80万的代码是负代码。  将24位值移动到32位时,必须正确扩展值的符号。 1677.0047万是十六进制0xFFE3FF,实际上是二进制2补码中的负值。  有多种方法可以正确地进行签名扩展。  我做了几个方法。  一种方法是检查最重要的位,如果它是'1',则可以或数字的值为0xFF0万。  另一种方法是左移(<8),然后右移(>>8)以强制正确 的符号。

    此致,

    Bob B

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

    我仍然无法解决问题

    现在:

    零= 3.7295万
    2470g = 216.0095万
    1000G = 102.9872万
    4005g = 373.8095万

    你有什么想法吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    零(约50克)= 3.7295万 = 0伏
    2470g = 216.0095万 = 4.7mV
    1000G = 102.9872万 = 1,8mV
    4005g = 373.8095万 = 77mV
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Caio:

    我认为您的0读数仍然很高。  运行自偏移校准后,您应该在几百个代码范围内,最坏的情况为0。  也许这座桥'0'离得太远了。

    我对您的设置了解甚少。  您说过您正在关注数据表的图42。  遗憾的是,该图未显示任何输入筛选。  您确实应该有一些模拟输入滤波(RC) ,以防止混叠并帮助滤除EMI/RFI。  您可以尝试在输入端使用1k系列电阻和0.1uF电容。  您还应该在参考输入之间至少有一个电容器(0.1uF)。

    主板的布局非常重要。  如果您使用的原型板带有一束连接各种设备的电线,则很难获得良好的性能。

    为了进一步诊断此问题,请向我发送有关系统如何 连接,精确原理图,布局等的更多信息。  此外,尚不清楚您是采用单个测量点,还是采用多个测量点并对其进行平均处理。 将每个重量的大量样本(至少256到1024)作为连续数据(连续ADC的转换结果)将会更有帮助。

    此致,

    Bob B

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

    输入中的150欧姆电阻器系列解决了问题。
    我的零度仍然很高(4.9105万)。但至少现在是在工作。

    谢谢你Bob。