手把手教你使用热敏电阻NTC,产品级精度±0.1℃以内,简单明了,内附源码详解,方便移植

您所在的位置:网站首页 NTC特性曲线是什么曲线 手把手教你使用热敏电阻NTC,产品级精度±0.1℃以内,简单明了,内附源码详解,方便移植

手把手教你使用热敏电阻NTC,产品级精度±0.1℃以内,简单明了,内附源码详解,方便移植

2024-07-06 22:43| 来源: 网络整理| 查看: 265

NTC

Author:家有仙妻谢掌柜 Date:2021/1/19

一、背景

前一段疫情期间,就考虑到用NTC来做测温功能,写在这里记录自己的成长历程,也分享出去供大家参考!

NTC(Negative Temperature Coefficient)是指随温度上升电阻呈指数关系减小、具有负温度系数的热敏电阻现象和材料。(与此相反的有PTC)

与温度相关的大部分开发均可使用NTC,现在市面上的电子体温计多数用到的就是NTC,额温枪内部热电堆传感器就包含了一个NTC来做采集环境温度的功能,市面上不少智能手环为了降低成本也采用NTC,更不必论温控加热水壶,环境温度检测仪等等。NTC在生活中的应用不胜枚举。那么我们这次就来使用NTC测温度,这里用了黑体恒温水槽来检验精度。实验表明精度可以达到±0.1℃以内。

二、实验原理

本次实验采用了国产的BLE芯片,具体型号这里不公布,看官佬爷只需关心实现原理即可,与实验相关的ADC是10bit精度,无论是使用哪一款MCU都可以参考本例程。

首先必须大胆的明白热敏电阻就是电阻。所以它符合电阻的物理特性。

这里P上接线图: 在这里插入图片描述 通过上图,我们可以知道电阻NTC所分得的电压Vntc即为:Vntc = Vcc * ( Rntc / (Rntc + Rm) ),于是有了Vntc去换算出ADCntc是轻而易举的。只是换算的时候需要关注MCU内部ADC的参考电压是多少? 因为我这里使用的是10bit的ADC,该ADC引脚内部参考电压为3.6V,因此ADCntc = ( Vntc / 3.6 ) * 1024。

①:Vntc = Vcc * ( Rntc / (Rntc + Rm) ) ②:ADCntc = ( Vntc / 3.6 ) * 1024 这里需要知道的是:ADCntc是ADC引脚采集到的数值,Vcc和Rm是已知量,只有Rntc是未知量。 故由式①②求得Rntc,然后拿着Rntc去查表,查什么表呢?

三、表的制作

这里附上产品规格,这个RT表是开发NTC过程中一定要使用的,问厂家或者客服索要。不同NTC的数据是存在差异的。 在这里插入图片描述 通过表格可以知道我选用的NTC的规格:R(37℃)= 30Kohm,也就是讲当温度在37℃的时候,该热敏电阻NTC阻值在30K,故而分压电阻也选为30K,以提高精度。 需要仔细阅读表格发现其中的规律,这里的规律就是 1.温度范围为0 - 60℃; 2.温度从0到 60℃,总共有251个数据,按照次序编一个序号从0到250,该序号将会作为数组的下标; 3.温度范围在[32℃,42℃]内,序号每增加1,温度就增加0.05℃; 温度范围在[0℃,32℃]和[42℃,60℃],序号每增加1,温度就增加1℃;

四、代码的实现

1.制作表格 我们要做的把上面的表格数据复制到编译器中,做成一维数组。

/************************************************* NTC的R值数据表 表的数值随序号的增加而减小 *************************************************/ #define NTCTABNum 251 static float NTCTAB[NTCTABNum]={ 163.3,155.2,147.5,140.3,133.4,127.0,120.9,115.1,109.6,104.4,99.48,94.83,90.42,86.24,82.28, 78.52,74.96,71.57,68.36,65.31,62.41,59.66,57.04,54.56,52.19,49.94,47.80,45.76,43.82,41.98, 40.22,38.54,36.94,36.86,36.79,36.71,36.63,36.56,36.48,36.40,36.32,36.25,36.17,36.10,36.02, 35.94,35.87,35.79,35.72,35.64,35.57,35.49,35.42,35.35,35.27,35.20,35.12,35.05,34.98,34.90, 34.83,34.76,34.69,34.61,34.54,34.47,34.40,34.32,34.25,34.18,34.11,34.04,33.97,33.90,33.83, 33.76,33.68,33.61,33.54,33.48,33.41,33.34,33.27,33.20,33.13,33.06,32.99,32.92,32.85,32.79, 32.72,32.65,32.58,32.51,32.45,32.38,32.31,32.25,32.18,32.11,32.05,31.98,31.91,31.85,31.78, 31.72,31.65,31.59,31.52,31.46,31.39,31.33,31.26,31.20,31.13,31.07,31.00,30.94,30.88,30.81, 30.75,30.69,30.62,30.56,30.50,30.43,30.37,30.31,30.25,30.19,30.12,30.06,30.00,29.94,29.88, 29.82,29.76,29.69,29.63,29.57,29.51,29.45,29.39,29.33,29.27,29.21,29.15,29.09,29.03,28.97, 28.91,28.86,28.80,28.74,28.68,28.62,28.56,28.50,28.45,28.39,28.33,28.27,28.22,28.16,28.10, 28.04,27.99,27.93,27.87,27.82,27.76,27.70,27.65,27.59,27.54,27.48,27.42,27.37,27.31,27.26, 27.20,27.15,27.09,27.04,26.98,26.93,26.87,26.82,26.77,26.71,26.66,26.60,26.55,26.50,26.44, 26.39,26.34,26.28,26.23,26.18,26.13,26.07,26.02,25.97,25.92,25.86,25.81,25.76,25.71,25.66, 25.61,25.55,25.50,25.45,25.40,25.35,25.30,25.25,25.20,25.15,25.10,25.05,25.00,24.95,24.90, 24.85,24.80,24.75,24.70,24.65,24.60,24.55,24.50,23.54,22.63,21.76,20.92,20.12,19.35,18.62, 17.92,17.25,16.61,15.99,15.40,14.84,14.30,13.78,13.28,12.80,12.34}; /* 接下来的处理就是围绕着计算出来的Rntc去查表格。 */

2.写查表函数

/*================================================================================ *Function Name :LookupTable *Description :查表函数 *parameter :1.*p :表头,即表的首地址 * 2.tableNum :表格的元素的个数 * 3.data :该变量在这里传入的是当前温度下NTC的阻值 *Return :当前NTC阻值对应在表中的位置 ================================================================================*/ //这里提供两种较易理解的查表方法 #if 1 //第一种方法 uint8_t LookupTable(float *p , uint8_t tableNum , float data) { uint16_t begin = 0; uint16_t end = 0; uint16_t middle = 0; uint8_t i = 0; end = tableNum-1; if(data >= p[begin]) return begin; else if(data tableNum) break; } if(begin > end) return 0; return middle; } #else //第二种方法 uint8_t LookupTable(float *p,uint8_t tableNum,float data) { uint8_t i,index = 0; for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3