使用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;
我得到的电压都是相同的。 不知道我在哪里做错了,希望有人指引我在正确的方向
你的代码看起来是正确的,我怀疑硬件问题可能是罪魁祸首。
您可能无意中在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欧姆上拉电阻。如果这是问题,请移除两个电阻中的一个,并且您应该看到正确的行为。
你是对的!我很不小心(现在把我的头撞在墙上)。 ADC引脚具有3.3V基准,不知何故,我错过了这一点。我所需要的只是连接热敏电阻。非常感谢。 – Cedric
在'sprintf(ui,“Temp is%.2f deg”,Ref);',它不应该是'tempa'而不是'Ref'吗? –
@Drueger - 我的坏,我正在尝试别的。即使有'tempa'我也没有得到正确的结果。 – Cedric
您读取的电压是多少?您的软件在该电压下计算的值是多少? – sifferman