使用EVK1100从热敏电阻中读取不正确的温度值

问题描述:

我想从热敏电阻中获取温度,所以我制作了一个分压器(3.3V至10k电阻和10k热敏电阻接地),我读取了10k电阻和热敏电阻。 BCOEFFICIENT是3977,名义温度是25C,我使用简单的B参数方程。我不确定我在做什么错误,我把室温记录为10.5C,这个温度应该在24℃左右。以下是我用于温度传感器(AVR工作室开发)的程序的一部分,使用EVK1100从热敏电阻中读取不正确的温度值

#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; 

我得到的电压都是相同的。 不知道我在哪里做错了,希望有人指引我在正确的方向

+0

在'sprintf(ui,“Temp is%.2f deg”,Ref);',它不应该是'tempa'而不是'Ref'吗? –

+0

@Drueger - 我的坏,我正在尝试别的。即使有'tempa'我也没有得到正确的结果。 – Cedric

+0

您读取的电压是多少?您的软件在该电压下计算的值是多少? – sifferman

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

您可能无意中在ADC输入和+ 3.3V基准电压之间连接了两个10K欧姆上拉电阻:或许EVK1100板上已经安装了一个10K欧姆上拉电阻,并且您已经添加了另一个外部连接到您的热敏电阻。这相当于将两个10K欧姆电阻相互并联,这相当于与热敏电阻串联的5K欧姆电阻。在25℃时,热敏电阻的阻值会Rt读10K欧姆,这将产生的电压:

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

= 2.20V 

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

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

+0

你是对的!我很不小心(现在把我的头撞在墙上)。 ADC引脚具有3.3V基准,不知何故,我错过了这一点。我所需要的只是连接热敏电阻。非常感谢。 – Cedric