ntc温度传感器阻值公式(NTC负温度系数热敏电阻查表法)
文中我以MF58 玻壳测温型 NTC 热敏电阻器为例,测量范围为:-50度~250度; 因为项目原因,我的测温范围只需要从-20度~180度就可以了。
NTC 5K B值:3950
如果直接用拟合二次方程计算,就会有小数,乘法,除法,指数运算,对于单片机的话,就要花很多的时间去处理。 查表法则可以很好地提高处理效率。
电路非常简单,如果要实现多路温度检测,则单片机只需要增加多路模拟开关就好了。
根据对应型号的NTC的温度-阻表对照表(见本底)。 而我们只需要按每10度,取几个点。 我在程序中从-20度~180度,取了21个点。
再EXCEL里,拉个表,计算一下。 我使用的是MSP430F249,adc为12位,满度为:4096
计算公式为:=ROUND(B2*1000/(B2*1000 10000)*4096,0)
然后转为16进制,不转也成,16进制看着舒服。
转换公式为:="0x"&DEC2HEX(C2)&","
实际取值为:-20度至180度。
然后我们在程序里建一个表。我不需要小数,所以直接将最终结果转换成了整数。如果你需要小数位,就把程序适当地改一下。
查表算法非常简单,根据当前ADC读到的值对表里查找接近值,取得整数部分, 然后再把相差的值,去和 前后范围做比例计算。 这样就得到了后面的小数部分。
如果你采用PTC,也是基本同样的思路。比如电机测量常用的KTY84-130。 有时间下次再也出个PTC的。
//----------------------------------------------------------------------------//
//-20 ~ 180,adc raw vaule R2/(R1 R2)*4096 | R1=10000(ohm) on board
//MF58_B3950 1%
#define INVALID_TEMP (int)32767
#define MAX_NTC_TABLE_CT 21
const int Table_NTC[MAX_NTC_TABLE_CT]={//0xF21,0xE6D,
0xD52,0xBCF,0x9F7,
0x800,0x629,0x496,0x35A,0x26F,
0x1C5,0x14B,0x0F3,0x0B5,0x088,
0x068,0x050,0x03F,0x031,0x028,
0x020,0x01A,0x016,
};
//----------------------------------------------------------------------------//
// MF58 B3950 1% Table_NTC
//----------------------------------------------------------------------------//
int Temp_Convert_NTC_By_Table(uint16 adc_raw_value)
{
int i,tmp=INVALID_TEMP;
for(i=MAX_NTC_TABLE_CT-1;i>=0;i--)
{
if (adc_raw_value <= Table_NTC[i])
{
tmp=i*10-20;
//calculate decimal part
if ((i>=0)&&(i<MAX_NTC_TABLE_CT-1))
{
tmp=tmp (int)(((float)(Table_NTC[i]-adc_raw_value)/(float)(Table_NTC[i]-Table_NTC[i 1]))*10.0 0.5);
}
break;
}
}
return tmp;
}
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com