当前时间:
2014年2月7星期五下午9:10:34
当前位置:首页  ?  新闻中心
使用NTC-Steinhart-Hart公式测量温度
来源:本站  更新时间:2019-01-17 11:36:51  查看次数:

彩之家彩票 www.pmsx123.net      

  使用NTC-Steinhart-Hart公式测量温度,想要在一行上放置尽可能多的嵌套计算,是涉及实际计算的地方。本文解释了热敏电阻的使用,但添加了一些更明确的计算。
Arduino有几个ADC端口,我们可以用来读取电压,或者更确切地说是“ADC值”。如果模拟端口连接到Vcc,则读取的最大值为1023,当然接地时为0。
spanningsdeler现在,如果我们制作一个分压器,通常是Vcc和地之间串联的两个电阻器和中间的模拟端口,读数将取决于两个电阻器的比例:如果它们相等,读数将为512,一半到1023.如果其中一个电阻,即底部电阻为NTC,那么
模拟端口上的读数将随温度变化:如果温度下降,电阻值会增加,模拟端口上的读数也会增加。

假设我们有一个10k系列电阻器和一个NTC,现在我们称之为'R'。
然后可以在中间测量的电压是

Vo = R /(R + 10K)* Vcc

然而,analogPort读数不提供电压,而是可以轻松计算的
ADC值ADC值= Vo * 1023 / Vcc //例如,如果Vo = 4V,ADC = 818 

ADC值= 1023 *(Vo / Vcc) )

如果我们现在将这两个公式组合起来,或者在ADC的公式中称为“替代”Vo,我们得到以下结果:
ADC值=(R /(R + 10K))* Vcc * 1023 / Vcc 
我们乘以Vcc但是也可以除以Vcc,我们可以将其从等式中取出并以
ADC值=(R /(R + 10k))* 1023 
ADC值= 1023 * R /(10 + R)结束,
如果我们想得到的值R超出该等式,变为
R = 10k /(1023 / ADC-1)
如果这有点太快,这就是计算出的等式。因为有些人在理解PEMDAS / BODMAS 操作顺序时遇到问题,所以我更喜欢“在线”公式中的图片。

CodeCogsEqn(1)

这将 R Work -R 减去乘法因为我们对R感兴趣,用封闭的断裂将两边分开 '10'代表'10k' ,因为我们并不总是使用10k,我们只是让它更通用:因此,只要我们知道串联电阻的值,我们就可以根据测量的ADC值计算NTC的值。现在请记住,这是一个有效的上拉配置。如果是下拉配置,则ADC到电阻值的计算是反向的。
CodeCogsEqn(7)

CodeCogsEqn(2)
CodeCogsEqn(3)
CodeCogsEqn(4)
CodeCogsEqn(5)

CodeCogsEqn(6)

ntc = R 系列 *(1023 / ADC-1); //用于下拉
ntc = R 系列 /(1023 / ADC - 1)); //用于上拉配置

那么在一个程序中会是什么样子?

//测量NTC值
字节NTCPin = A0;
const int SERIESRESISTOR = 10000;
void setup()
{
	Serial.begin(9600);
}
void loop()
{
	浮动ADC值;
	浮动渎职;
	ADCvalue = analogRead(NTCPin);
	Serial.print(“模拟值”);
	Serial.print(ADCvalue);
	Serial.print(“=”);
//将值转换为阻值
	电阻=(1023 / ADC值) -  1;
	电阻= SERIESRESISTOR /电阻;
	Serial.print(电阻);
	Serial.println(“Ohm”);
	延迟(1000);
}
//结束程序

知道NTC的阻值是不错的,但它并没有告诉我们很多温度...或者它是什么?
很多NTC的标称值都是在25摄氏度下测量的,所以如果你有一个10k的NTC而你测得它是10k,那就意味着那时它是25度。当测量结果不同时,这对您没有多大帮助。
您可以保留一个表,其中每个电阻值代表温度。这些表非常准确,但需要大量的工作和内存空间。

然而,有一个公式,即Steinhart-Hart方程,可以很好地近似将NTC的电阻值转换为温度。它不像热敏电阻表那么精确(毕竟它是近似值),但它相当准确。

Steinhart-Hart方程看起来像这样:
CodeCogsEqn(8)这是一个相当复杂的方程式,需要几个参数(A,B,C),我们通常没有这些参数用于轧机NTC的运行。我们可以做两件事。我们可以在校准温度下读取3个读数,然后计算出A,B和C参数。

CodeCogsEqn

但幸运的是,这个公式有一个简化,称为B参数方程。那个看起来如下:To是标称温度,25°C开尔文(= 298.15 K)。B是热敏电阻的系数(3950是常用值)。Ro是NTC的标称电阻(因此为25度)。假设我们有一个10Kohm的NTC。我们只需要插入  R  (测量的电阻)来得到T  (温度以开尔文为单位),然后我们将其转换为°C。
CodeCogsEqn(9)

该计划如下:

// ---------------
字节NTCPin = A0;
#define SERIESRESISTOR 10000
#define NOMINAL_RESISTANCE 10000
#define NOMINAL_TEMPERATURE 25
#define BCOEFFICIENT 3950

void setup()
{
Serial.begin(9600);
}
void loop()
{
浮动ADC值;
浮动阻力;
ADCvalue = analogRead(NTCPin);
Serial.print(“模拟值”);
Serial.print(ADCvalue);
Serial.print(“=”);
//将值转换为阻力
电阻=(1023 / ADC值) -  1;
电阻= SERIESRESISTOR /电阻;
Serial.print(电阻);
Serial.println(“Ohm”);

漂浮斯坦哈特;
steinhart =抵抗/ NOMINAL_RESISTANCE; //(R / Ro)
steinhart = log(steinhart); //恩(R / Ro)
steinhart / = BCOEFFICIENT; // 1 / B * ln(R / Ro)
steinhart + = 1.0 /(NOMINAL_TEMPERATURE + 273.15); // +(1 / To)
steinhart = 1.0 / steinhart; //反转
steinhart  -  = 273.15; //转换为C.

Serial.print(“温度”);
Serial.print(斯坦哈特);
Serial.println(“oC”);
延迟(1000);
}
// -------------

这个课程不是一个理想的课程。取一些样品并对它们取平均值总是好的。
以下功能可以为您完成:

浮动样本(字节z)
/ *此函数将读取Pin'z'5次并取平均值。
 * /
{
	字节i;
	float sval = 0;
	for(i = 0; i <5; i ++)
	{
	sval = sval + analogRead(z); //模拟引脚'z'上的传感器
	}
	sval = sval / 5.0; // 平均
	返回sval;
}

可以从Arduino的5伏电源馈送串联电阻和NTC。为了精确测量,最好使用3.3Volt线作为模拟参考,为此,在设置中添加以下代码
 

Copyright?版权所有:深圳市富温传感技术有限公司 电话:0755-29402582  
全国免费电话:4009605108 邮箱:ntcfuwen@foxmail.www.pmsx123.net 地址:深圳市宝安区沙进街道万丰荣泰科技园B栋5楼 粤ICP备:13020894号