主题中讨论的其他器件: 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;