C语言 我怎样才能修正下面的公式,以便读出准确的温度?

62o28rlo  于 2023-05-06  发布在  其他
关注(0)|答案(1)|浏览(83)

目前,我正在使用MSP-EXP 430 F5529 LP微控制器和LM 35,因为我需要建立一个温度计。结果将显示在7段4位显示器上。我使用以下转换,以摄氏度显示温度:

voltage = (conversion * 3.3)/ 4095;
celsius = (((voltage - 0.5) * 100) / 10);

问题是我自己的温度计的阅读是27°C左右,而我在显示器上得到的读数是53.4°C左右。我检查了LM 35周围的电压,阅读似乎在270 mV左右,所以我不知道代码有什么问题。
我还尝试了以下公式:

temp = (conversion*8.05); // 3.3/4096 it's around 8.05
tempC = (temp/10);

前一个在环境温度下会给予一个精确的阅读,但是当我试图用冰把它放下时,它不会下来。

xytpbqjk

xytpbqjk1#

从LM 35的datasheet来看,它似乎输出的电压为每摄氏度10 mV。
VOUT = 1500 mV(150°C)VOUT = 250 mV(25°C)VOUT = -550 mV(-55 ° C)
这包括如果温度低于0 C则输出负电压。我假设你不关心这个问题,因为我确信你的微处理器上的ADC不能测量负电压。
我还假设微处理器上的ADC具有12位分辨率,基于您尝试除以4095。因此,我猜测ADC引脚上的3300 mV输入电压将读取为4095,输入上的0 V将读取为0。
因此,您需要的公式为:

celsius = ((conversion * 3300) / 4095) / 10;

这可以通过将/ 10吸收到乘法中并除以4096来简化,这在大多数CPU上只是一个移位。这给出:

celsius = (conversion * 330) / 4096;

请注意,如果您不希望得到小数结果,则可以使用整数运算来完成所有这些操作。

相关问题