简易的NTC-10K-3950测温


文章目录

  • 简易的NTC-10K-3950测温
  • 前言
  • 一、概述
  • 二、电路和原理
    • 1.电路图
    • 2.原理概述
  • 三、程序设计
    • 1.程序代码
    • 2.程序简述
  • 四、总结
  • 五、下载地址

前言

温度是一个非常重要的物理量, 无论是生活还是工业上都离不开它, 我们可通过温度传感器测量被测物体的温度来获取物体的冷热程序。温度传感器有非常多的种类, 而NTC类无疑是应用最广泛的, 它具有易制造、成本低、精度好和稳定性好等优点。NTC是负温度热敏电阻, 我们只需要简单的电路, 通过MCU的ADC采集电压再换算成温度便可得到被测物体的温度。


一、概述

正是NTC温度传感器这些优势使它应用于各行各业中, 比如家用电饭煲、饮水机、冰箱、热水器和空调等家用电器, 因此学习电子技术是必须要掌握的。下图是一个外接式NTC-10K-3950温度传感器。

二、电路和原理

1.电路图

2.原理概述

上图是一个简单的测温电路, 只需要NTC串接一个10K电阻并在电源两端, MCU的ADC采集RT_INT上电压再经过欧姆定律求出NTC的阻值, 通过温度表或公式就可求出温度值, 如果是通过公式计算是比较麻烦的且误差比查表大, 因此查表是一个不错的实现方式, 虽然会占用MCU的flash较多, 但以目前的MCU来说是九牛一毛。为什么先前说它精度和稳定性好, 主要它每摄氏度之间相差在几百Ω的距离, 因此外延线可较长, 不易受干扰。如果是PT100温度传感器, 每摄氏度之间相差不到1Ω, 易受电路和延长线干扰。

同时, 采集的温度精度还取决于MCU的ADC, 主要包括ADC的分辨率和参考电压, 每款MCU的ADC精度是不一样的, 具体精度误差需要查看手册看是否满足自己的需求, 如下图是灵动微MM32F0130系列的ADC精度表, 单位LSB指的一个12位分辨率的ADC共有4096数字位(2的12次幂等于4096)的其中一位。如综合误差在3.4LSB, 在3.3V参考电压下, 该误差电压是3.3V / 4096 * 3.4LSB ≈ 3mV, 再通过NTC温度表逆推看是否可忽略该误差。

下图是NTC温度表其中的一段表值, 假如取39°C和40°C两个中间值变化对比, 在3.3V情况下, 39°C的ADC采样电压=3.3V * 5.531K / (10K + 5.531K) ≈ 1.1752V, 40°C的ADC采样电压=3.3V * 5.311K / (10K + 5.311K) ≈ 1.1447V, 两相减约得30mV是满足总误差3mV。假设最糟糕的情况下, 39°C的最小值与40°C的最大值两值的电压距离, 通过计算约得15mV, 也是足够的。如果还不能满足要求请校准ADC, 同时给ADC参考电压提供稳定和精度好的电压源, 可用专用的参考电压IC, 通常用TL431可调稳压管可节省成本。

三、程序设计

1.程序代码

#include "ntc_rv_table.h"
#include "adcx.h"#define TABLE_SIZE           181
#define ADC1_CONVDATA_SIZE      8//NTC-10K-3950-B值
//-55~125°C对应的电阻阻值表(单位: Ω)
//阻值~温度换算: 数组下标索引减去55即为温度值
const u32 g_rvTable[TABLE_SIZE] = {1034600, 959006, 889452, 825419, 766434,                                            //-55~-51712066, 661926, 615656, 572934, 533466, 496983, 463240, 432015, 403104, 376320,    //-50~-41351495, 328472, 307110, 287279, 268859, 251741, 235826, 221021, 207242, 194412,    //-40~-31182460, 171320, 160932, 151241, 142196, 133750, 125859, 118485, 111589, 105139,    //-30~-2199102, 93450, 88156, 83195, 78544, 74183, 70091, 66250, 66643, 59255,              //-20~-1156071, 53078, 50263, 47614, 45121, 42774, 40563, 38480, 36517, 34665,              //-10~-132919,                                                                              //031270, 29715, 28246, 26858, 25547, 24307, 23135, 22026, 20977, 19987,                //1~1019044, 18154, 17310, 16510, 15752, 15034, 14352, 13705, 13090, 12507,                 //11~2011953, 11427, 10927, 10452, 10000, 9570, 9161, 8771, 8401, 8048,                     //21~307712, 7391, 7086, 6795, 6518, 6254, 6001, 5761, 5531, 5311,                      //31~405102, 4902, 4710, 4528, 4353, 4186, 4026, 3874, 3728, 3588,                      //41~503454, 3326, 3203, 3085, 2973, 2865, 2761, 2662, 2567, 2476,                      //51~602388, 2304, 2223, 2146, 2072, 2000, 1932, 1866, 1803, 1742,                      //61~701684, 1627, 1573, 1521, 1471, 1423, 1377, 1332, 1289, 1248,                      //71~801208, 1170, 1133, 1097, 1063, 1030, 998, 968, 938, 909,                          //81~90882, 855, 829, 805, 781, 758, 735, 714, 693, 673,                                    //91~100653, 635, 616, 599, 582, 565, 550, 534, 519, 505,                                   //101~110491, 478, 465, 452, 440, 428, 416, 405, 395, 384,                                  //111~120374, 364, 355, 345, 337                                                                //121~125
};/*** @brief 中值滤波* @param collection: 元素集合* @param size: 集合大小* @retval 中值*/
u16 mid_filter(u16 *collection, u16 size)
{u16 e;u16 i, j;u8 sorted;i = 0;while(i < size - 1){//冒泡的趟数sorted = 1;j = 0;while(j < size - 1 - i){//一趟冒的次数if(collection[j] > collection[j + 1]){e = collection[j];collection[j] = collection[j + 1];collection[j + 1] = e;sorted = 0;}j++;}if(sorted) break;i++;}return collection[size / 2];
}s8 ntc_get_temp(void)
{s16 i;u32 adcValue;float rValue;s8 temperature;u16 adc_buffer[ADC1_CONVDATA_SIZE];for(i = 0; i < ADC1_CONVDATA_SIZE; i++)adc_buffer[i] = GetAdcAverage(5);adcValue = mid_filter(adc_buffer, ADC1_CONVDATA_SIZE);rValue = 4095000.0;rValue = rValue / adcValue - 1000;adcValue = 10000000.0 / rValue;for(i = 0; i < TABLE_SIZE; i++) {if(adcValue > g_rvTable[i]) {temperature = i - 55;break;}}       return temperature;
}

2.程序简述

调用ntc_get_temp()函数可获取温度值, GetAdcAverage()函数是ADC采集的数字量电压, 之后通过mid_filter()滤波。

rValue = 4095000.0;
rValue = rValue / adcValue - 1000;
adcValue = 10000000.0 / rValue;

上面 三条语句是获取NTC阻值的换算公式, 为何要这么写呢?这是推算的结果, 假设NTC通过10K电阻并在电源上的电压与ADC参考电压一致, 都是3.3V, 即 VCC = ADC_REF = 3.3V, 则ADC采集电压(电路图中RT_INT的网络号)ADC_V = VCC * RT / (10K + RT)。已知MCU的ADC分辨率是12BIT, 即最大数字量是4095, 则ADC_V = ADC_REF * ADC_DATA / 4095, ADC_DATA为ADC获取的数字量电压。将这两公式进行合并解方程求出RT阻值, VCC * RT / (10K + RT) = VCC * ADC_DATA / 4095, 最后公式得出RT = 10000000 / (4095000 / ADC_DATA - 1000), 简化出结果只受一个变量影响, 排除了电源电压相关变量, 精度更好了, 详细公式计算如下图。

四、总结

该电路简单有效, 只要配合少量代码便能准确读出被测物体的温度值, 在通常应用中是够用的, 如需精度更准, 应用环境恶劣要求稳定性更好, 可加运放和做温度补偿, 但一般这些情况下用数字温度传感器会更好。

五、下载地址

https://github.com/chengzidun/blog.git
https://download.csdn.net/download/chengzidun/21732373


免责申明: 作者难免技术水平有限,如有错误拒不承认,本文技术资料只适于学习和参考,不可商用,若要商用,不必告知我,跟我没一毛关系。

简易的NTC-10K-3950测温相关推荐

  1. stm32 adc测NTC 100K 3950或者NTC 10K 3950 技术要点

    NTC 100K 3950 // NTC 标准热敏电阻 25℃时的电压, 热敏电阻的阻值 100 000 // NTC NTC 10K 3950 // NTC 标准热敏电阻 25℃时的电压, 热敏电阻 ...

  2. 【原创】ESP32+NTC热敏电阻测温SD卡采集OLED显示,Begabung_TC250

    摘要 利用ESP32设计一款八通道热敏电阻采集方案,并使用SD卡采集及OLED显示,通过Arduino_IDE编写.本产品在淘宝店Begabung发售,型号:TC250. 内容         零件准 ...

  3. 外设驱动库开发笔记36:NTC负温度系数热电阻测温驱动

      在嵌入式产品中,温度检测非常常见.在成本比较敏感而精度要求较低时,NTC电阻是个不错的选择.在这一篇中,我们将讨论如何和设计并实现一个通用的NTC驱动,以便在后续的项目中更方便的复用. 1.功能概 ...

  4. STM32 ADC NTC热敏电阻二分(折半)查表法实现测温功能

    本文主要描述 - STM32 ADC NTC热敏电阻二分(折半)查表法测温功能的思路和代码实现 NTC的相关属性:R25=10K±3% B25/50=4100K±3% 10K上拉 STM32 ADC实 ...

  5. 简易测温电路课程设计报告

    "模电"课程设计任务书 简易测温电路 2018 年 01 月 15日 目录 1. 设计任务描述  ------------------- - 1 - 1.1 设计任务 ------ ...

  6. Arduino 负温度系数热敏电阻(NTC)测温

    一直都用NTC作为温度传感器来测温,采用Arduino没有现成的例子用NTC测温的,LM35D温度传感器,这款传感器能够测量0-100摄氏度的温度,并以电压的数值输出.从0度开始温度每升高1度输出电压 ...

  7. NTC温度传感器MF53 503-3950F-1500L(铜鼻头) 安科瑞NTC测温曲线

    NTC温度传感器MF53 503-3950F-1500L(铜鼻头) 安科瑞NTC测温曲线 温度对应电阻值如下 以电阻为横坐标,温度为纵坐标,matlab拟合公式与曲线如下: 电阻为50K,温度为25. ...

  8. 基于STM32的智能篮球测温记分记时系统

    1.项目概述(20分) 1.1项目简介(5分) 进入21世纪,伴随着电子信息通信技术的应用与普及开发,人们对电子技术的要也越来越高.篮球作为一种体育运动进入了人们的生活.为对比赛进行规范化管理,研究一 ...

  9. 巧用Excel求解NTC 10K 温度传感器 (含程序)(区间线性回归)

    @请叫我常思聪 NTC 10K 温度传感器快速读取(C程序)区间线性回归 (升级版已经发布↓) 巧用Excel求解NTC 10K 温度传感器 (含程序)(区间线性回归)(升级版) 一.温度传感器 原本 ...

  10. STM32实现PT100测温系统设计报告(OLED屏显示)

        本项目设计内容涉及:传感器.嵌入式系统应用.模拟电子技术.   课程:<智能传感技术>   指导老师:覃园芳老师 项目报告目录: 一.任务要求 二.硬件设计 1.分析所要使用的PT ...

最新文章

  1. C++实现 找出10000以内的完数
  2. 微信门店小程序怎样创建 门店小程序创建方法简介
  3. 中文URL是否有利于网站SEO
  4. 09_ClickHouse,ReplacingMergeTree,案例,根据排序键去重,使用版本参数的去重(学习笔记)
  5. dncnn图像去噪_一种基于DnCNNs改进的图像降噪方法与流程
  6. 2016-2017-2 20155322 实验五 网络编程与安全
  7. 10月15日发布!谷歌Pixel 4系列或将全系支持5G
  8. 定时任务发展史(二)
  9. 区块链 分片技术和闪电网络区别
  10. 电商后台设计:基本功能架构
  11. iOS测试——ios未受信任的企业级开发者怎么解决?
  12. MTK手机官方ROM提取教程
  13. Lattice LSTM
  14. 做为软件测试的前辈,你能不能给我一点建议?
  15. 智能家居--domoticz配置和风天气 HTTP/HTTPS poller 的使用以及domoticz_updateDevice的介绍
  16. swift转场动画_Swift游乐场的演变
  17. 获取企业微信授权code
  18. 陈梓立tison:投身开源,需要持之以恒的热爱与贡献
  19. 2020基础会计继续教育网上考试答案
  20. iOS地图定位系统语言为英文时,返回中文位置信息

热门文章

  1. 利用postman测试post请求
  2. 汽车HUD抬头显示全产业链深度解析报告
  3. java计数器_Java高效计数器
  4. 【期末复习】微机原理与接口技术
  5. 微型计算机原理与接口技术课后答案,微机原理与接口技术-课后习题答案
  6. 信息学奥赛c++ 初学保姆级教程
  7. WebRTC源码架构浅析
  8. java date类赋值日期_Java中Date时间类
  9. 《出版专业基础(初级)》2020版学习笔记2~8章
  10. ubuntu 16.04 镜像下载