NTC温度计算

NTC温度计算


根据NTC阻值查表计算NTC温度


1.得到NTC阻值

在这里插入图片描述
根据电阻分压关系,假设基准电压为5V,基准电阻为10欧,此时测得NTC电压为2v,则有
在这里插入图片描述
根据NTC手册查表,6.667欧属于(6.702, 6.471],所以NTC温度为36°
在这里插入图片描述

2.具体算法实现

#include "math.h"

static const u16   Rref = 10; 	//基准电阻
static const float kd = 1; 		//系数

/*=============================
NTC电阻温度查找表
RS[0] 代表 温度为-40° 对应 电阻值为 192.6
RS[1] 代表 温度为-39° 对应 电阻值为 182.4
......
RS[40] 代表 温度为0°   对应 电阻值为 27.37
......
RS[160] 代表 温度为120°   对应 电阻值为 0.5975
=============================*/
float RS[161]={192.6,182.4,172.8,163.7,155.1,147.1,139.5,132.3,125.6,119.2,113.2,107.5,
			102.2,97.09,92.3,87.77,83.49,79.45,75.62,71.99,68.56,65.32,62.24,59.33,
			56.56,53.95,51.46,49.11,46.87,44.75,42.74,40.83,39.01,37.29,35.65,34.09,
			32.61,31.2,29.86,28.59,27.37,26.22,25.12,24.07,23.07,22.12,21.21,20.35,
			19.52,18.73,17.98,17.26,16.58,15.93,15.3,14.7,14.13,13.59,13.07,12.57,
			12.09,11.64,11.2,10.78,10.38,10,9.633,9.282,8.945,8.622,8.312,8.015,
			7.731,7.457,7.195,6.944,6.702,6.471,6.248,6.034,5.829,5.631,5.441,5.259,
			5.084,4.915,4.753,4.597,4.446,4.302,4.163,4.029,3.9,3.776,3.656,3.541,
			3.429,3.322,3.219,3.12,3.024,2.931,2.842,2.755,2.672,2.592,2.515,2.44,
			2.367,2.298,2.23,2.165,2.102,2.042,1.983,1.926,1.871,1.818,1.767,1.717,
			1.669,1.623,1.578,1.534,1.492,1.451,1.412,1.374,1.337,1.301,1.266,1.233,
			1.2,1.168,1.138,1.108,1.079,1.052,1.025,0.9985,0.9731,0.9485,0.9246,0.9014,
			0.879,0.8572,0.836,0.8155,0.7956,0.7763,0.7575,0.7393,0.7216,0.7045,0.6878,
			0.6716,0.6559,0.6407,0.6258,0.6114,0.5975};

/*==========================================
函数描述:获取NTC温度
函数输入:uiTempValue:NTC电压值,uiVrefValue:基准电阻电压值
函数输出:
==========================================*/
s8 APP_GetTemp(u16 uiTempValue,u16 uiVrefValue)
{
	float Vsub,Rvalue;
	u8 ucCountf,i;
	
	//计算NTC电阻值
	if(uiVrefValue>uiTempValue)
	{
		//基准电阻电压
		Vsub = uiVrefValue*kd-uiTempValue;
		//计算NTC阻值
		Rvalue = (float)((uiTempValue/Vsub)*Rref);	
	}
	else
	{
	    return (s8)(TEMP_ERROR_VALUE); // 设置异常情况下温度为196度
	}
		
	//查找温度
	//温度超过下限
    if(Rvalue >= RS[0])
    {
		return (s8)(TEMP_ERROR_VALUE); // 设置异常情况下温度为196度
    }
	
	//温度超过上限
    if (Rvalue <= RS[160])
    {
		return (s8)(TEMP_ERROR_VALUE); // 设置异常情况下温度为196度
    }	
	
	//按照数组查找温度
    ucCountf = 0;
    for(i=0;i<160;i++)
    {        
        if(Rvalue<RS[i+1])
        {
            ucCountf++;
        }
    }

    return (s8)(((s8)ucCountf)-40);
}

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值