找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2354|回复: 25
收起左侧

Steinhart-hart方程ntc热敏电阻测温电阻计算公式

  [复制链接]
ID:333877 发表于 2022-6-8 18:05 来自手机 | 显示全部楼层 |阅读模式
50黑币
这是一段使用Steinhart-hart方程做ntc测温的代码。这个函数只需要ntc100度和ntc0度的固定值和一个现场测得的ad值就可以测出温度,其中是怎么利用ad值计算出当前温度的电阻值的,有没有大佬可以解答一下呢?
/*************************************************
函数名称:  NTC30K_function
函数功能:  NTC30K计算函数
函数形参:  
            advalue:adc值
            advalue_NT0:校正的0度ADC
            advalue_NT100:校正的100度ADC
            advalue_NTShort:校正的偏移ADC,NTC短路值
函数返回值:温度值
*************************************************/
FP32 NTC30K_function(FP32 advalue,FP32 advalue_NT0,FP32 advalue_NT100,FP32 advalue_NTShort)
{
  FP32 REF,VREF,Rt,LNR;
  REF=94980*2069*(advalue_NT0-advalue_NT100);
  REF=REF/(94980*(advalue_NT100-advalue_NTShort)-2069*(advalue_NT0-advalue_NTShort));
  VREF=(advalue_NT100-advalue_NTShort)*((2069+REF)/2069);
  advalue=advalue-advalue_NTShort;
  Rt=(advalue*REF)/(VREF-advalue);
  LNR=log(Rt);
  Rt=(1/(0.00093494+(0.0002211*LNR)+(0.0000001275*LNR*LNR*LNR)))-273.15;
  return(Rt);
}

回复

使用道具 举报

ID:333877 发表于 2022-6-8 18:07 来自手机 | 显示全部楼层
/*************************************************
函数名称:  NTC30K_function
函数功能:  NTC30K计算函数
函数形参:  
            advalue:adc值
            advalue_NT0:校正的0度ADC
            advalue_NT100:校正的100度ADC
            advalue_NTShort:校正的偏移ADC
函数返回值:温度值
*************************************************/
FP32 NTC30K_function(FP32 advalue,FP32 advalue_NT0,FP32 advalue_NT100,FP32 advalue_NTShort)
{
  FP32 REF,VREF,Rt,LNR;
  REF=94980*2069*(advalue_NT0-advalue_NT100);
  REF=REF/(94980*(advalue_NT100-advalue_NTShort)-2069*(advalue_NT0-advalue_NTShort));
  VREF=(advalue_NT100-advalue_NTShort)*((2069+REF)/2069);
  advalue=advalue-advalue_NTShort;
  Rt=(advalue*REF)/(VREF-advalue);
  LNR=log(Rt);
  Rt=(1/(0.00093494+(0.0002211*LNR)+(0.0000001275*LNR*LNR*LNR)))-273.15;
  return(Rt);
}
回复

使用道具 举报

ID:329625 发表于 2022-6-8 18:45 | 显示全部楼层
中间那一段代码就是对采集到的数据的转换,那就是计算的啊,你写成公式的形式就比较清晰了
回复

使用道具 举报

ID:333877 发表于 2022-6-8 18:53 来自手机 | 显示全部楼层
17337161031 发表于 2022-6-8 18:45
中间那一段代码就是对采集到的数据的转换,那就是计算的啊,你写成公式的形式就比较清晰了

电阻值具体是怎么从3个ad量算出来的呢?
回复

使用道具 举报

ID:333877 发表于 2022-6-8 18:56 来自手机 | 显示全部楼层
17337161031 发表于 2022-6-8 18:45
中间那一段代码就是对采集到的数据的转换,那就是计算的啊,你写成公式的形式就比较清晰了

94980和2069是0度和100度对应的阻值
回复

使用道具 举报

ID:883242 发表于 2022-6-8 18:57 | 显示全部楼层
你的问题跟硬件相关,没有电路图我们也不会算命。
回复

使用道具 举报

ID:333877 发表于 2022-6-8 19:02 来自手机 | 显示全部楼层
Hephaestus 发表于 2022-6-8 18:57
你的问题跟硬件相关,没有电路图我们也不会算命。

这是电路
1_070158.png
2_070200.png
回复

使用道具 举报

ID:883242 发表于 2022-6-8 19:07 | 显示全部楼层

这电路图画的只能说一个字:服!连NTC在哪里都可以看不到。
回复

使用道具 举报

ID:333877 发表于 2022-6-8 19:09 来自手机 | 显示全部楼层
Hephaestus 发表于 2022-6-8 19:07
这电路图画的只能说一个字:服!连NTC在哪里都可以看不到。

TP+是ntc
回复

使用道具 举报

ID:333877 发表于 2022-6-8 19:10 来自手机 | 显示全部楼层
Hephaestus 发表于 2022-6-8 19:07
这电路图画的只能说一个字:服!连NTC在哪里都可以看不到。

tp+是ntc
回复

使用道具 举报

ID:213173 发表于 2022-6-8 20:40 | 显示全部楼层
楼主所述NTC热敏电阻可能是PT100、PT1000等铂电阻。普通NTC热敏电阻几乎不可能通过公式计算获得较准确温度值。NTC热敏电阻不同厂家产品温阻曲线差异较大,同一厂家相同规格的产品电参数也有较大离散性。不适合用公式计算温度值。除非对精度要求很低。
回复

使用道具 举报

ID:333877 发表于 2022-6-8 21:08 来自手机 | 显示全部楼层
wulin 发表于 2022-6-8 20:40
楼主所述NTC热敏电阻可能是PT100、PT1000等铂电阻。普通NTC热敏电阻几乎不可能通过公式计算获得较准确温度 ...

实际情况是ntc测温的确用的公式计算的而且测温精度还很高,具体参考Steinhart-hart方程
回复

使用道具 举报

ID:883242 发表于 2022-6-8 21:10 | 显示全部楼层
wulin 发表于 2022-6-8 20:40
楼主所述NTC热敏电阻可能是PT100、PT1000等铂电阻。普通NTC热敏电阻几乎不可能通过公式计算获得较准确温度 ...

你看了代码再来发言好不好?什么都不懂就上来胡说很没有礼貌的。楼主明显是个30k的NTC,B值未知。而且标定了三个点,1)短路NTC测试放大以及ADC环节的误差;2)0度时NTC的值;3)100度时NTC的值。
回复

使用道具 举报

ID:401564 发表于 2022-6-8 21:46 | 显示全部楼层
如果不是内存实在不够用,NTC用查表是常用也是最实在的
至于这个方程的原理,它是两个老外一个叫Steinhart,一个叫Hart,合起来就是Steinhart-Hart,根据热敏电阻的特性研究出来的
个人感觉原理什么的并不重要,你上网也不一定能查得到,会用就行
电子编程这一块,那么多恐怖的公式,哪能个个都知道原理呀
回复

使用道具 举报

ID:333877 发表于 2022-6-8 22:19 来自手机 | 显示全部楼层
Y_G_G 发表于 2022-6-8 21:46
如果不是内存实在不够用,NTC用查表是常用也是最实在的
至于这个方程的原理,它是两个老外一个叫Steinhart, ...

知道原理才能改进提高啊,这个利用三个点校准也是为了提高测温的精度,而且这样测温精度高反应速度也快
回复

使用道具 举报

ID:883242 发表于 2022-6-8 22:21 | 显示全部楼层
Y_G_G 发表于 2022-6-8 21:46
如果不是内存实在不够用,NTC用查表是常用也是最实在的
至于这个方程的原理,它是两个老外一个叫Steinhart, ...

你错了,Steinhart-hart方程用这两句就解决完了,完全没有任何难度,不存在看不懂的地方。
  LNR=log(Rt);
  Rt=(1/(0.00093494+(0.0002211*LNR)+(0.0000001275*LNR*LNR*LNR)))-273.15;

楼主的问题是第一句的Rt是怎么来的,这个前面的代码也太复杂了,要动手算算。
回复

使用道具 举报

ID:213173 发表于 2022-6-9 07:29 | 显示全部楼层
Hephaestus 发表于 2022-6-8 21:10
你看了代码再来发言好不好?什么都不懂就上来胡说很没有礼貌的。楼主明显是个30k的NTC,B值未知。而且标 ...

楼主所列代码确实没看懂。只知道NTC是在25度条件下的标称精度,25~50度的标称B值。偏离标准温度越多,精度和B值误差越大。用固定公式计算,除非对NTC元件预选,否则很难批量生产。大佬如有自动纠偏的方法,还望分享。 中国NTC温度传感器150K B3950 ±1%.rar (28.31 KB, 下载次数: 17)
回复

使用道具 举报

ID:372579 发表于 2022-6-9 08:39 | 显示全部楼层
温度计算,Steinhart-Hart方程和B值法

使用Steinhart-Hart方程或者B值计算方法将热敏电阻的电阻值转换为温度读数。

  Steinhart-Hart方程计算法:

1/T = A + B*ln(R) + C*[ln(R)]

这里: T 为绝对温度K(开尔文温度),R 单位是欧姆

. 温度系数B值计算法:

Rt = R(25℃)*exp[B*(1/T - 1/298.15)]

这里:T 为绝对温度K(开尔文温度 = 273.15),R(25℃) 是热敏电阻在 25℃时的阻值 (单位为Ω),exp是e的n次方;

3. C语言实现的温度计算公式

Tsteinhart = 1/(A+B*log(Rth)+C*pow(log(Rth),3))-273.15;

Tbeta = 1/(1/(273.15+25)+1/Beta*log(Rth/R25))-273.15;


  ln、log、lg在数学公式中和c语言中的区别:

参考:cplusplus的"<cmath> (math.h) - C++ Reference"这篇文章

数学中log是对数符号,右边写真数和底数(上面是真数,下面是底数)lg是以10为底数(例lg100=2)(lg为常用对数)ln是以e为底数(lne2=2)(ln为自然对数 e=2.718281828459045...)

  c语言里面只有两个函数log和log10,其中函数 log(x) 表示是以e为底的自然对数,即 ln(x)函数。 log10(x) 以10为底的对数,即 lg(x)。以其它数为底的对数用换底公式来表示:loga(b)=ln(b)/ln(a),C语言表示成log(b)/log(a)。
回复

使用道具 举报

ID:401564 发表于 2022-6-9 13:31 | 显示全部楼层
路明非. 发表于 2022-6-8 22:19
知道原理才能改进提高啊,这个利用三个点校准也是为了提高测温的精度,而且这样测温精度高反应速度也快

想要精度高就查表
回复

使用道具 举报

ID:276685 发表于 2022-6-10 12:39 | 显示全部楼层
Y_G_G 发表于 2022-6-9 13:31
想要精度高就查表

我认为这个方程好像贝塞尔曲线通过控制点拟合的结果
回复

使用道具 举报

ID:333877 发表于 2022-7-13 21:48 来自手机 | 显示全部楼层
公式的推导过程
ntc.jpg
回复

使用道具 举报

ID:509605 发表于 2022-7-15 23:17 | 显示全部楼层
刚好也在研究一个仪器的NTC测温电路,界面显示是一个电压值多少mv,旁边一个温度值。能查到系统的a b c值,正在研究中,有什么进展大家共同分享
回复

使用道具 举报

ID:170800 发表于 2024-1-20 16:17 | 显示全部楼层
本帖最后由 hui7279 于 2024-1-20 17:03 编辑

REF=94980*2069*(advalue_NT0-advalue_NT100);
//将ADC值转换为校准的ADC值
REF=REF/(94980*(advalue_NT100-advalue_NTShort)-2069*(advalue_NT0-advalue_NTShort));
//将ADC值转换为硬件的实际电压值
VREF=(advalue_NT100-advalue_NTShort)*((2069+REF)/2069);
//将ADC值电压转换基准点,与硬件接高低位有关
advalue=advalue-advalue_NTShort;
//将电压值转换为电阻值
  Rt=(advalue*REF)/(VREF-advalue);
//据Steinhart-hart方程计算中间值ln(Rt)
  LNR=log(Rt);
//据Steinhart-hart方程计算温度值,RT最后转化为Tr,用同一个变量节约内存
  Rt=(1/(0.00093494+(0.0002211*LNR)+(0.0000001275*LNR*LNR*LNR)))-273.15;
/******************************************
Steinhart-Hart方程计算法:
1/T = A + B*ln(R) + C*[ln(R)]^3
由于:T值在公式中是用热力学温度单位K,摄氏度就要减273.15;
此公式中:A=0.0009349, B=0.0002211, C =0.0000001275
ABC值与硬件NTC有关,不同厂家的NTC表值需要用不同参数;
---------------------------------------------------
ABC值的计算方法:
具体可以将要用到的三个关键温度点值:T0、T1、T2、R0、R1、R2;
利用计算ln(R0)、ln(R1)、ln(R2);代入Steinhart-Hart方程(温度值要+273.15)
得到三元一次方程组,可以用矩阵法解方程法,具体查常用C算法函数;
也可用EXCEL的方法解三元一次方程组,具体可以百度
************************************************/
回复

使用道具 举报

ID:170800 发表于 2024-1-20 17:02 | 显示全部楼层
hui7279 发表于 2024-1-20 16:17
REF=94980*2069*(advalue_NT0-advalue_NT100);
//将ADC值转换为校准的ADC值
REF=REF/(94980*(advalue_N ...

//据Steinhart-hart方程计算温度值,RT可能用Tr表达会更准确:
//据Steinhart-hart方程计算温度值,是最后Rt值已转化为温度值Tr,用同一个变量减少内存消耗
回复

使用道具 举报

ID:420836 发表于 2024-1-21 08:55 | 显示全部楼层
这个问题的讨论对于我理解NTC的计算很有帮助。 谢谢你!
回复

使用道具 举报

ID:384109 发表于 2024-1-22 11:02 | 显示全部楼层
其实既然使用了能计算对数的单片机,那么是不是直接查表就好了,毕竟厂家提供的数据表也只是整数温度,那么计算出来的小数温度又是否能代表精度呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表