NTC热敏电阻计算方法

分享一下自用的一个算法,通过NTC阻值来计算温度之公式法。

实例:

//实际应用
int main(void)
{
  unsigned short t;
  ntc_typedef ntc;
  ntc.B = 3950;//NTC常数,NTC规格书里面有
  ntc.T0 = 47;//NTC常温下的阻值
  ntc.ad = 2048;//ADC采集的电压值
  
  t = calculate_ntc_temp(&ntc);//实际温度值需要除以100
}

下面是具体函数:

typedef struct
{
  unsigned short ad;//ADC通道采集回来的AD值
  unsigned short B;//B常数
  unsigned char T0;//25摄氏度的阻值(千欧)
	
}ntc_typedef;

定义一个结构体,这三个参数是必须要的,第一个是ADC NTC对应通道采集回来了的ADC值,第二个是B常数,NTC的规格书上面有,第三个就是标准温度下的NTC阻值,单位是千欧;

unsigned short calculate_ntc_temp(ntc_typedef *ntc)
{
  float Temp = 0;
	float n_log = 0;
	float r;
	unsigned short t;
	
  r = (((ntc->T0) * 4096) / (ntc->ad)) - (ntc->T0);
  Temp = 298.15 * (ntc->B);
  n_log = log(r) - log((ntc->T0));
  Temp = Temp / ((ntc->B) + 298.15 * n_log);
  Temp = Temp - 273.15;
  t = (unsigned short)(Temp * 100);
  return t;
}

这个函数返回的温度放大了100倍,精确到小数点后两位。(如果你的结果需要实际的温度,建议不放大加四舍五舍更准一点,或者放大64 、128、256这种倍数,之后在右移就好了)

20250317更新。。。。。。。。。。。。。。。。。。。。。

上面的代码是当时随手写给一个朋友的,后来自己用到了,发现并不实用,每次都需要配置结构体,属实麻烦,还因为结构体的操作增加了额外的开销。下面是新更新的代码,更加的简洁;

/****
  * @brief 计算实际温度
	*
	* @param[in]: 
	*  data :采集通道AD值
	*
	* @return: 实际电压
*****/
float calculate_actual_temp(unsigned int data)
{
	float n_log = 0;
	float r;
	float t = 0;
	float r0 = 47.0;
	unsigned short b0 = 3950;
	
	r = r0 * 4095 / data - r0 ;
	n_log = log(r) - log(r0);
	t = 298.15 * b0 / (b0 + 298.15 * n_log) - 273.15;
	
	return t;
}

对于这个函数的在不同的NTC电阻上的运用,我们只需要更改函数中的r0和b0,也就是在25℃环境中的阻值,单位是:千欧;以及NTC电阻的B常数;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值