简易的NTC-10K-3950测温
简易的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测温相关推荐
- stm32 adc测NTC 100K 3950或者NTC 10K 3950 技术要点
NTC 100K 3950 // NTC 标准热敏电阻 25℃时的电压, 热敏电阻的阻值 100 000 // NTC NTC 10K 3950 // NTC 标准热敏电阻 25℃时的电压, 热敏电阻 ...
- 【原创】ESP32+NTC热敏电阻测温SD卡采集OLED显示,Begabung_TC250
摘要 利用ESP32设计一款八通道热敏电阻采集方案,并使用SD卡采集及OLED显示,通过Arduino_IDE编写.本产品在淘宝店Begabung发售,型号:TC250. 内容 零件准 ...
- 外设驱动库开发笔记36:NTC负温度系数热电阻测温驱动
在嵌入式产品中,温度检测非常常见.在成本比较敏感而精度要求较低时,NTC电阻是个不错的选择.在这一篇中,我们将讨论如何和设计并实现一个通用的NTC驱动,以便在后续的项目中更方便的复用. 1.功能概 ...
- STM32 ADC NTC热敏电阻二分(折半)查表法实现测温功能
本文主要描述 - STM32 ADC NTC热敏电阻二分(折半)查表法测温功能的思路和代码实现 NTC的相关属性:R25=10K±3% B25/50=4100K±3% 10K上拉 STM32 ADC实 ...
- 简易测温电路课程设计报告
"模电"课程设计任务书 简易测温电路 2018 年 01 月 15日 目录 1. 设计任务描述 ------------------- - 1 - 1.1 设计任务 ------ ...
- Arduino 负温度系数热敏电阻(NTC)测温
一直都用NTC作为温度传感器来测温,采用Arduino没有现成的例子用NTC测温的,LM35D温度传感器,这款传感器能够测量0-100摄氏度的温度,并以电压的数值输出.从0度开始温度每升高1度输出电压 ...
- NTC温度传感器MF53 503-3950F-1500L(铜鼻头) 安科瑞NTC测温曲线
NTC温度传感器MF53 503-3950F-1500L(铜鼻头) 安科瑞NTC测温曲线 温度对应电阻值如下 以电阻为横坐标,温度为纵坐标,matlab拟合公式与曲线如下: 电阻为50K,温度为25. ...
- 基于STM32的智能篮球测温记分记时系统
1.项目概述(20分) 1.1项目简介(5分) 进入21世纪,伴随着电子信息通信技术的应用与普及开发,人们对电子技术的要也越来越高.篮球作为一种体育运动进入了人们的生活.为对比赛进行规范化管理,研究一 ...
- 巧用Excel求解NTC 10K 温度传感器 (含程序)(区间线性回归)
@请叫我常思聪 NTC 10K 温度传感器快速读取(C程序)区间线性回归 (升级版已经发布↓) 巧用Excel求解NTC 10K 温度传感器 (含程序)(区间线性回归)(升级版) 一.温度传感器 原本 ...
- STM32实现PT100测温系统设计报告(OLED屏显示)
本项目设计内容涉及:传感器.嵌入式系统应用.模拟电子技术. 课程:<智能传感技术> 指导老师:覃园芳老师 项目报告目录: 一.任务要求 二.硬件设计 1.分析所要使用的PT ...
最新文章
- C++实现 找出10000以内的完数
- 微信门店小程序怎样创建 门店小程序创建方法简介
- 中文URL是否有利于网站SEO
- 09_ClickHouse,ReplacingMergeTree,案例,根据排序键去重,使用版本参数的去重(学习笔记)
- dncnn图像去噪_一种基于DnCNNs改进的图像降噪方法与流程
- 2016-2017-2 20155322 实验五 网络编程与安全
- 10月15日发布!谷歌Pixel 4系列或将全系支持5G
- 定时任务发展史(二)
- 区块链 分片技术和闪电网络区别
- 电商后台设计:基本功能架构
- iOS测试——ios未受信任的企业级开发者怎么解决?
- MTK手机官方ROM提取教程
- Lattice LSTM
- 做为软件测试的前辈,你能不能给我一点建议?
- 智能家居--domoticz配置和风天气 HTTP/HTTPS poller 的使用以及domoticz_updateDevice的介绍
- swift转场动画_Swift游乐场的演变
- 获取企业微信授权code
- 陈梓立tison:投身开源,需要持之以恒的热爱与贡献
- 2020基础会计继续教育网上考试答案
- iOS地图定位系统语言为英文时,返回中文位置信息