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.

[参考译文] ADS1235:使用 ADS1235和 AD8557运算放大器测量称重传感器-充电时读数不稳定!

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1124699/ads1235-taring-a-load-cell-with-ads1235-and-ad8557-opamps---unstable-readings-when-taring

器件型号:ADS1235
主题中讨论的其他器件: ADS1260

你好。 我正在设计一个将 ADS1235用作 ADC 的称重传感器、其中预放大系统使用 AD8557作为运算放大器、并将 STM32F405RGT6用作该系统的 uC。

我可以使用 TI 为 ADS1235提供的固件库成功测量和更改增益设置。

对于我的应用、我需要通过测量2个单独通道(X 和 Y)中的力来计算角度、  为了确保零被正确找到并且在校准之前我没有任何通道上的预充电以成功找到负载系数、大胆的过程是非常关键的。

我设计了一个看起来像这样的函数:

皮重(浮点数据[]、long n_samples){
 long tarebufferX[n_samples]0};//用于存储 X 和 Y 通道值的数组
 long tarebufferY[n_samples]0};

 for (int i = 0i<n_samplesi++){//收集一些回收值以稳定读数
  tarebufferX[i]=数据[0]
  tarebufferY[i]=数据[1]
 }
 for (int i = 0i<n_samplesi++){//从每个通道收集值以查找中点并用作新的"zero"
  tarebufferX[i]=数据[0]
  tarebufferY[i]=数据[1]
 }

 Sort (tarebufferXsizeof (tarebufferX));//函数将数据从最小值排序到最大值、以便我可以访问中点并使用中值作为皮重的索引
 sort (tarebufferYsizeof (tarebufferY));
 
 x_tared = tarebufferX[n_samples/2];//使用中点表示 taring 值而不是平均值
 y_tared = tarebufferY[n_samples/2]
在此函数中、我使用"data[]"阵列、该阵列通过 DRDY 引脚使用 ADS1235硬件中断进行更新、如下所示:

void handleDRDY (){
 data[selectedChannel]= adc.ReadData()
 selectedChannel =!selectedChannel
 adc.setReference(selectedChannel);
 adc.setChannel(selectedChannel);
其中、我基本上会读取数据、将通道/基准 从0更改为1、将1更改为0、并在 DRDY 可用时再次读取数据。
然后输出从 t皮 重()中减去 x_tared 和 y_tared 值、如下所示:
DATA[0]= DATA[0]- x_tared;
DATA[1]= DATA[1]- y_tared;
我的信号以80Hz 的频率通过串行端口绘制、但数据[]数组以硬件中断的中断频率更新。  

在开始之前、ADC 增益设置为1且寄存器设置如下、我会得到类似的信号

其中 CHX =通道0、CHY =通道 Y

在我使用1000个样本作为输入执行皮重后、信号将执行以下操作:

其中、需要几秒钟的时间才能稳定下来、我得到大约-150个 ADC 值的读数。 有时会多一些、有时会少一些、但绝不会真正接近于零。 有时、CHX 的值会与 CHY 大不相同(例如:CHX 变为100、Chy 变为-400)、这会导致我的校准过程终止。 我在开始处理之前尝试分离中断、然后在函数执行后再次连接中断、但结果更糟。 在较高的增益设置中、与0的差值甚至更差(皮重后、我得到的基准值为2000或更高)。
当我们检查信号时、x 和 y 都是稳定 的、因此皮重 应该可以正常工作。

我是不是以错误的方式调用函数、这可能会破坏 ADC 的电气稳定性、因此在 tury()函数期间读数不准确? 我是否有任何不同的方法? 请稍候。

非常感谢您的支持、

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

    Joao Almeida、您好!

    您能否确认 VDD 电压为5V? 这是 MCU 上的 IO 电压、还是 ADC 和 MCU 之间有电平转换器?

    前置放大器的增益值是多少? 为什么不直接将信号馈入 ADC 的 PGA? ADC PGA 的噪声密度远低于您选择的放大器的噪声密度。 如果您希望 ADC 具有1至128的所有二进制增益、也可以考虑使用 ADS1260 (与 ADS1235不同、ADS1235不包含2、4、8、16和32的增益)。

    这是对传感器进行皮重的适当方法吗? 我的理解是、taring 是一个人工零点、它考虑了传感器上施加的一些负载。 例如、您可以将托盘放在秤重上以测量液体。 由于 您只想测量液体的重量、而不是托盘+液体的重量、因此您只需使用托盘的重量对刻度进行皮重。此测量值不为零(您似乎期望 ADC 的输出为零)、 即使它将刻度的"零点"设定在托盘的重量上、因此当您添加 液体时、刻度输出仅显示液体的重量。 在您的情况下、大胆尝试意味着您尝试从最终测量中移除的两个负载单元之间存在一些必要的非零角度。 您所描述的内容听起来更像是校准、虽然不是精确的、 但我对您尝试实现的目标有点困惑。  我还希望 Taring 使用多个样本的平均值、而不是中值。

    您可以查看我们的桥式测量基本指南、了解有关使用 ADC 测量称重传感器/电阻式桥的更多信息。 第5.5节讨论校准: https://www.ti.com/lit/sbaa532

    另一个小问题是:在下面的代码中、您选择 REFx0 (X 通道)作为模拟输入 AIN4和 AIN5 (Y 通道)的基准。 X 和 Y 通道上的比例基准输入看起来是相同的、因此这可能无关紧要。 不过、我只想指出一点、因为它与您构建原理图的方式并不完全一致。

    布莱恩