这是用户在 2025-6-26 11:38 为 https://blog.csdn.net/BadBoyHolly/article/details/108948128 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?

【STM32F042】使用NTC热敏电阻实现温度测量

1.NTC介绍

NTC是负温度系数的简写,全称是Negative temperature coefficient.意思是随着温度的升高,电阻值呈现下降趋势。常用作温度传感器。这里有一个式子表示负温度系数的电阻值:

                                                                        RT=R0*exp(B (1/T-1/T0))

RT为周围温度为T (K) 时的电阻值,R0是周围温度为T0 (K) 时的电阻值,注意这里的温度是开尔文温度B为B常数. 请记住这个B常数,它也是材料常数,一般在25摄氏度下测得。B值和电阻的温度系数正相关,也就是B值越大,电阻的温度系数越高。而温度系数是指每增加1℃,电阻值的变化率。也就是说,B值越大,电阻值的变化随着温度的增加越多,灵敏度越高.

阻温度特性
标题

 


2.温度测量常用电路

 如下图所示,温度测量常用电阻串联分压,ADC采集的方式进行。根据热敏电阻的特性,理想情况下,设VCC=3.3V,在25℃时,Rt = 10KΩ,此时ADC采集到的电压值为3.3V/2 = 1.65V.

3.温度转换

关于ADC的采集,我这里就不多讲了,我这里主要讲得到ADC转换值以后,如何得到温度值。

第一步是找到自己的热敏电阻的数据手册,查找B值和查看 它的温度-阻值曲线图,我使用的一款热敏电阻是SDNT1608,阻值10KΩ,精度±1%,B值为3450K(25°C~50°C).数据手册中的温度-阻值特性曲线如下图所示:

下面介绍两种温度转换的方法:计算法查表法


计算法

首先看计算法 ,回到我们的公式  RT=R0*exp(B*(1/T-1/T0)),这里R=10K,开氏度 = 摄氏度+273.15,所以T0 = 273.15+25 ,这里的exp()指的是e^(),所以我们可以反求出当前温度:

                                                                         T = 1 / [ln (RT/R0) / B + 1/T0]

那么我们唯一需要知道的就是Rt的值,回到上面的测电路,由电阻分压,设热敏电阻两端电压为VRt,固定10K电阻两端电压为VR,可以知道VR/VRt = R/Rt,从而:

                                                                              Rt = R*(3.3-VR)/VR

而我们实际得到的VR是转换后的ADC值,即VR = 3.3*ADC_Value/4096,把上面的式子整理一下,代码如下,需要注意的是计算出来的温度是开尔文温度,因此需要减去K值。最后的0.5是修正值。有条件的情况下,与标准仪器相比,来得到这个值。 

  1. //温度转换
  2. //参数:ADC转换值
  3. float temp_trans(u16 ADC_value)
  4. {
  5. //数据进入前,可先做滤波处理
  6. float Rt=0; //NTC电阻
  7. float R=10000; //10K固定阻值电阻
  8. float T0=273.15+25;//转换为开尔文温度
  9. float B=3450; //B值
  10. float Ka=273.15; //K值
  11. float VR=0;//电压值
  12. VR=(float) (ADC_value/4096*3.3); //转换成电压值
  13. Rt=(3.3-VR)*10000/VR;//计算Rt
  14. temp=1/(1/T0+log(Rt/R)/B)-Ka+0.5; //计算温度
  15. return temp;
  16. }
cpp
运行

查表法 

一般而言,厂家会提供NTC电阻的温度与电阻表,如下图所示,基于这个表,我们只需要计算出当前热敏电阻的阻值Rt,然后查照此表,得到最接近的温度值即可。实际使用中,我们根据使用环境,摘出一部分表,比如我这里需要监控MOS的温度,所以我只需要25℃-100℃附近的值。。

例子:厂家给出的温度阻值表

我们定义一个数组来存放这些值,为了方便,我们直接存放ADC转换的值,可以做一个表格,计算出温度对应的ADC的值。请注意我这里只做了整数倍的表格,如果需要用到小数点后面的温度,正确的方法是使用公式RT=R0*exp(B (1/T-1/T0))在excel中计算得到步进值为0.1℃的温度表。我这里就不举例了。

已知等式关系:

                                                                        Rt = R*(3.3-VR)/VR          (1)

                                                                VR = 3.3*ADC_Value/4096      (2)

整理两式:                     

                                         ADC_Value = VR*4096/3.3 =3.3*R/(Rt+R)*4096/3.3 = R/(Rt+R)*4096

                                                                                                           


显示推荐内容

评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
  • dbxzjq
    VR = 3.3*ADC_Value/4096,ADC最大值只能是4095吧?3.3*4095/4096,这样无法得到最大值3.3了,是这样吗?是不是应该VR = 3.3*ADC_Value/4095才正确?
  • qq_41809823
    怎么我的是反过来的,外部越热,数值越低
    • ros118
      ros118 回复 Yegege4182023.07.07
      1
      你是吧nct接到接地一边了吧,和图里的10K位置上下相反了
  • liuyoushuai
    不是ln吗,怎么代码变成log了
    • liuyoushuai
      @lhy 回复 Vicssic2023.01.05
      1
      懂了表情包表情包
    • BadBoyHolly
      Vicssic作者 回复 @lhy2022.12.01
      1
      double __cdecl log(double _X);
      double __cdecl log10(double _X);
      请参阅标准c下math.h定义。其中log代表ln(即loge)。
      log10顾名思义就是lg。表情包
    • 查看全部 2 条回复
  • weixin_44744080
    你计算Rt那里是不是错了几位啊,我根据NTC公式算出来的是Rt=Vntc*R/(3.3-Vntc)
    • dbxzjq
      dbxzjq 回复 七牲2024.06.02
      NTC接VCC Rt = R*(VCC-VR)/VR
      NTC接GND Rt = R*VR/(VCC-VR)
    • weixin_45223275
      weixin_45223275 回复 七牲2022.12.01
      这个NTC电阻位置不一样
    • believe_in_
      believe_in_ 回复 七牲2022.08.08
      1
      首先,他这计算是没错的,其次,如果你的的Vntc是指的Rt两端电压的话 你的也没错 只是表达式取的电压不一样,你取的是上面热敏电阻的电压值,他的是取下面固定电阻的电压值
    • 查看全部 3 条回复
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vicssic

创作不易,感谢您的鼓励和支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

举报

选择你想要举报的内容(必选)
  • 内容涉黄
  • 政治相关
  • 内容抄袭
  • 涉嫌广告
  • 内容侵权
  • 侮辱谩骂
  • 样式问题
  • 其他
点击体验
DeepSeekR1满血版
隐藏侧栏
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

返回顶部