大家好、
我目前正在开发一个 MSP430F5529芯片上的应用、以实现 Steinhart-Hart 方程、从而根据热敏电阻的电阻读数计算温度。 由于该项目处于开发阶段的早期、我将使用预定义电阻值及其对应温度的查找表来测试 Steinhart-Hart 方程的精度、而不是使用 ADC 将处理器直接连接到热敏电阻。
我知道 MSP 系列不支持浮点算术(或不支持我希望的空间/时间要求、无论如何)、因此我决定改用 Qmath 和 IQmath 库来实现定点方案。 但是、即使在阅读了库中的指南之后、我也会遇到一些问题、无法使内容正常工作。 当我调试应用程序时、我使用 _IQtoF 函数将 IQ 值转换为浮点值、以便它出现在我的变量框中。 在首次使用此函数时、我获得了一个非常精确的计算、并使用计算器进行了双倍检查。 但是、在第二次使用此函数时、该值会略有变化、并抛出以下所有计算。 例如:
_iq ln_r_therm = _IQlog(r_therm); // r_therm = 49670 test = _IQtoF(ln_r_therm); // this would return 10.8131409 _iq shhe_equation_part_2 = _IQmpy(shhe_coeff_b, ln_r_therm); // shhe_coeff_b = 0.234283447 test = _IQtoF(shhe_equation_part_2); // should return ~2.5333, but instead returns 2.6448 _iq ln_r_therm_cubed = _IQpow(ln_r_therm, 3); test = _IQtoF(ln_r_therm_cubed); // should return ~1264.3052, but instead returns 1438.7345
然后、我意识 到在我的后续计算中、r_them 使用的值为11.2891235、而不是最初计算的10.81。 即使是~0.4的微小变化也会导致雪球后续计算中出现误差。
我的问题是、导致这种行为的原因是什么、如果这是预期的、我会错过什么? 我如何纠正这种不精确的情况? 我是否应该对 Steinhart-Hart 等式采取不同的方法?
提前感谢大家的帮助!
