使用 EVK1100 从热敏电阻读取错误的温度值
Reading incorrect temperature value from thermistor using EVK1100
我想从热敏电阻获取温度,所以我做了一个分压器(3.3V 到 10k 电阻和一个 10k 热敏电阻接地之间)我读取 10k 电阻和热敏电阻之间的 ADC。
BCOEFFICIENT 是 3977,NOMINAL TEMPERATURE 是 25C,我使用简单的 B 参数方程。我不确定我在哪里做错了,我读到室温为 10.5C,应该是 24C 左右。以下是我使用温度传感器的部分程序(在AVR工作室开发),
#define TEMPERATURENOMINAL 25
#define TERMISTORNOMINAL 10000
#define BCOEFFICIENT 3977
#define SERIESRESISTOR 10000
{
float ke1,tempa,xin
ke1 = adc_get_value(peak_adc2,peak2);
xin=(1023/ke1)-1;
xin=SERIESRESISTOR/xin;
tempa=xin/TERMISTORNOMINAL;
tempa=log(tempa);
tempa/= BCOEFFICIENT;
tempa+=1.0/(TEMPERATURENOMINAL + 273.15);
tempa=1.0/tempa;
tempa-=273.15;
dip204_set_cursor_position(1,3);
//sprintf(ui, "Temp is %.2f deg", Ref);
sprintf(ui, "Temp is %.2f deg", tempa);
dip204_write_string(ui);
}
我使用万用表检查了电压,例如在热敏电阻和 10k 电阻之间以及在 EVK 1100 中使用以下行
ke1 = adc_get_value(peak_adc2,peak2)*3.3/1024;
两者的电压相同。
不确定我哪里做错了,希望有人指导我正确的方向
你的代码在我看来是正确的,我怀疑硬件问题可能是罪魁祸首。
您似乎无意中在 ADC 输入和 +3.3V 参考之间连接了两个 10K 欧姆的上拉电阻:也许一个已经安装在 EVK1100 板上,并且您添加了另一个外部连接到你的热敏电阻。这相当于将两个 10K 欧姆电阻器并联在一起,相当于将一个 5K 欧姆电阻器与热敏电阻串联。在 25°C 时,热敏电阻 Rt
的读数为 10K 欧姆,这会产生以下电压:
+3.3V * (Rt / (Rt + 5K))
= 2.20V
而不是正确的 +1.65V。这个数字非常接近您看到的结果 (+2.17V @ 24°C)。
您可以通过查看 EVK1100 的原理图 and/or PCB 查看 10K 欧姆的上拉电阻是否从 ADC 输入连接到 +3.3V 来验证这个假设。如果这是问题所在,请移除两个电阻器中的一个,您应该会看到正确的行为。
我想从热敏电阻获取温度,所以我做了一个分压器(3.3V 到 10k 电阻和一个 10k 热敏电阻接地之间)我读取 10k 电阻和热敏电阻之间的 ADC。 BCOEFFICIENT 是 3977,NOMINAL TEMPERATURE 是 25C,我使用简单的 B 参数方程。我不确定我在哪里做错了,我读到室温为 10.5C,应该是 24C 左右。以下是我使用温度传感器的部分程序(在AVR工作室开发),
#define TEMPERATURENOMINAL 25
#define TERMISTORNOMINAL 10000
#define BCOEFFICIENT 3977
#define SERIESRESISTOR 10000
{
float ke1,tempa,xin
ke1 = adc_get_value(peak_adc2,peak2);
xin=(1023/ke1)-1;
xin=SERIESRESISTOR/xin;
tempa=xin/TERMISTORNOMINAL;
tempa=log(tempa);
tempa/= BCOEFFICIENT;
tempa+=1.0/(TEMPERATURENOMINAL + 273.15);
tempa=1.0/tempa;
tempa-=273.15;
dip204_set_cursor_position(1,3);
//sprintf(ui, "Temp is %.2f deg", Ref);
sprintf(ui, "Temp is %.2f deg", tempa);
dip204_write_string(ui);
}
我使用万用表检查了电压,例如在热敏电阻和 10k 电阻之间以及在 EVK 1100 中使用以下行
ke1 = adc_get_value(peak_adc2,peak2)*3.3/1024;
两者的电压相同。 不确定我哪里做错了,希望有人指导我正确的方向
你的代码在我看来是正确的,我怀疑硬件问题可能是罪魁祸首。
您似乎无意中在 ADC 输入和 +3.3V 参考之间连接了两个 10K 欧姆的上拉电阻:也许一个已经安装在 EVK1100 板上,并且您添加了另一个外部连接到你的热敏电阻。这相当于将两个 10K 欧姆电阻器并联在一起,相当于将一个 5K 欧姆电阻器与热敏电阻串联。在 25°C 时,热敏电阻 Rt
的读数为 10K 欧姆,这会产生以下电压:
+3.3V * (Rt / (Rt + 5K))
= 2.20V
而不是正确的 +1.65V。这个数字非常接近您看到的结果 (+2.17V @ 24°C)。
您可以通过查看 EVK1100 的原理图 and/or PCB 查看 10K 欧姆的上拉电阻是否从 ADC 输入连接到 +3.3V 来验证这个假设。如果这是问题所在,请移除两个电阻器中的一个,您应该会看到正确的行为。