【问题标题】:Reading incorrect temperature value from thermistor using EVK1100使用 EVK1100 从热敏电阻读取错误的温度值
【发布时间】:2015-12-21 08:50:59
【问题描述】:

我想从热敏电阻中获取温度,所以我制作了一个分压器(3.3V 到 10k 电阻,接地之间有一个 10k 热敏电阻)我读取了 10k 电阻和热敏电阻之间的 ADC。 BCOEFFICIENT 是 3977,标称温度是 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;

两者的电压相同。 不知道我在哪里做错了,希望有人指导我正确的方向

【问题讨论】:

  • sprintf(ui, "Temp is %.2f deg", Ref);中,不应该是tempa而不是Ref吗?
  • @DKrueger - 我的错,我在尝试别的东西。即使使用tempa,我也没有得到正确的结果。
  • 您读取的电压是多少,您的软件在该电压下计算出什么值?
  • @sifferman - 当我将 ADC 引脚连接到电路并在室温 (24C) 下读取时,我在软件中得到 2.17V,在万用表中读取相同的电压。然而,当我断开 ADC 线与 EVK1100 板的连接时,我在电路中读取到 1.64V。我之前没有注意到这个电压差,所以我将电路的输入电压从 3.3v 设置为 1.7v。(这样当我将 ADC 引脚连接到电路时,我得到 1.64v)现在我得到了正确的温度值。

标签: embedded avr32


【解决方案1】:

您的代码在我看来是正确的,我怀疑硬件问题可能是罪魁祸首。

您可能无意中在 ADC 输入和 +3.3V 参考之间连接了两个 10K-ohm 上拉电阻:可能一个已安装在 EVK1100 板上,而您添加了另一个外部连接到热敏电阻.这相当于将两个 10K-ohm 电阻相互并联,这相当于将一个 5K-ohm 电阻与热敏电阻串联。在 25°C 时,热敏电阻 Rt 的读数为 10K 欧姆,这将产生以下电压:

+3.3V * (Rt / (Rt + 5K))

= 2.20V

而不是正确的 +1.65V。这个数字与您看到的结果非常接近(+2.17V @ 24°C)。

您可以通过查看 EVK1100 的原理图和/或 PCB 来验证此假设,以查看 10K 欧姆上拉电阻是否从 ADC 输入连接到 +3.3V。如果这是问题所在,请移除两个电阻器之一,您应该会看到正确的行为。

【讨论】:

  • 你是对的!我很粗心(现在我的头撞在墙上)。 ADC 引脚有 3.3V 参考电压,不知何故我错过了。我所需要的只是连接热敏电阻。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 2015-08-26
  • 1970-01-01
相关资源
最近更新 更多