主题中讨论的其他器件: MSP430F5529
您好!
我在 ADS1231的输出代码方面遇到了一些问题。 根据 ADS1231的数据表中的表3、当量程上没有权重时、我应该会收到0x00的代码。 随着重量的增加、代码也应相应增加。 但是、根据我获得的结果(见下文)、 输出代码不能按预期工作。 用户指定的校准重量为216克、我手动输入到代码中。 从结果中可以看到、一旦此权重被添加到刻度上、输出代码只会从零代码变为校准代码时改变0x14。 ~、每个输出代码之间的步进分辨率相当大(因为0x14 = 20、216/20 μ s =每步进10克)、导致体重秤不精确。 当我向刻度添加更多重量时、代码开始按预期增加、直到达到大约500克的阈值。 但是、一旦达到此权重、代码将减少相对较大的量(由于输出代码现在小于零代码、因此权重变为负值)、尽管它应随着权重的增加而不断增加。 在刻度上施加足够的力时、代码再次开始增加。
为了总结我的问题、我如何访问更广泛的 ADC 输出代码、以便每个数字输出之间的分辨率更精确? 它是否与重量计平台/称重传感器的灵敏度有关? 此外、为什么输出代码在达到特定阈值时开始减小、即使它们应随着重量的增加而持续增加? 最后、为什么零代码不是0x00?
我已经附加了轮询代码以及校准过程。 我们非常感谢您的任何帮助。

if ((P1IN & 0x08) == 0)
{
while (!(UCB0IFG & UCTXIFG));
UCB0TXBUF = 0x21;
while (!UCRXIFG); // if RX operation is not complete
data1_z = UCB0RXBUF;
while (!(UCB0IFG & UCTXIFG));
UCB0TXBUF = 0x22;
while (!UCRXIFG);
data2_z = UCB0RXBUF;
while (!(UCB0IFG & UCTXIFG));
UCB0TXBUF = 0x23;
while (!UCRXIFG);
data3_z = UCB0RXBUF;
while(!(UCB0IFG & UCTXIFG));
UCB0TXBUF = 0x24;
code_z = (data1_z << 16) + (data2_z << 8) + data3_z + 0x800000;
code_z &= 0x00ffffff;
printf("The zero code is %lx\n", code_z);
}m = weight_c / (code_c - code_z); weight_z = -1 * m * code_z; weight = (m * code) + weight_z;



