找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 106427|回复: 194
打印 上一主题 下一主题
收起左侧

开源4个元件打造NTC10K温度计

  [复制链接]
回帖奖励 9 黑币 回复本帖可获得 3 黑币奖励! 每人限 1 次(中奖概率 80%)
跳转到指定楼层
#
1.最近发现坛里对热敏电阻测温系统呼声很高,刚好我手里有个NTC10K的热敏电阻,于是乎我就打算做个热敏电阻温度计。
2.我首先了解了NTC热敏电阻的特性,阻值随温度的升高而减小。通过厂商提供的温度和电阻对应的关系表就可以知道阻值对应的温度,要想测温度就要测出热敏电阻的阻值,知道了原理就好办多了。


3.闭上眼开始思考测量电阻的方法,不可能直接拿万用表测吧,首先想到初中物理学到的R=U/I(电阻的阻值等于加在它两端的电压除以流过它的电流)。只要在热敏电阻上加上电,测出电压和电流就行了。


4.测量电压可以用ADC测量,可是电流怎么测量呢?于是想到串联电路电流相等,把一个已知阻值的精密电阻和热敏电阻串联,根据I=U/R测到已知电阻上分得的电压就可以知道电路中的电流了。


5.系统原理:NTC 10k热敏电阻和10k精密电阻串联接入VCC—GND,利用单片机内部的ADC模块测出NTC电阻上分的电压ADC_V以及系统的供电电压POWER_V,从而得到10k精密电阻上的电压R_V=(POWER_V-ADC_V),根据电阻串联电流相等可以知道NTC电阻中的电流I=R_V/10K,,再根据U=I*R可得到热敏电阻的阻值NTC_R=ADC_V/I,通过查表找出此阻值对应的温度。此系统由于使用了STC单片机内部的电压基准为参考,所以测温精度不受系统电压VCC的影响。


6.为了简化NTC10k测温系统的硬件制作难度,我尽量优化设计,只需NTC热敏电阻+10k精密电阻+STC单片机+数码管公4个元件。单片机依然采用STC15W408ASS,温度显示只有两位所以数码管采用3位共阴数码管(把数码管旋转180度颠倒过来使用,前两位显示温度第三位显示“℃”符号),10k电阻尽量选择精密一点的。
下图为测得的室温21度


下图为数码管正放时的显示,实际使用时要旋转180度放
(这样就可以显示温度符号℃)


下图为原理图截图(源文件见附件PADS layout)


下图为买热敏电阻时卖家提供的阻值与温度对应关系表




请评分支持一下谢谢
  1. /********************************************/
  2. //2016.10.24日编写完成
  3. //作者:刘海龙 (读单片机内部BandGap基准电压值参考的STC官网程序)
  4. //硬件:STC15W408AS+3位共阴数码管+1个10K的电阻(最好选用精密电阻)+NTC10K热敏电阻
  5. //晶振选12M或11.0952M
  6. /*原理:NTC 10k热敏电阻和10k精密电阻串联接入VCC—GND,利用单片机内部的ADC
  7. 模块测出NTC电阻上分的电压ADC_V以及系统的供电电压POWER_V,从而得到10k精密电阻上
  8. 的电压R_V=(POWER_V-ADC_V),根据电阻串联电流相等可以知道NTC电阻中的电流I=R_V/10K,
  9. ,再根据U=I*R可得到热敏电阻的阻值NTC_R=ADC_V/I,通过查表找出此阻值对应的温度。*/
  10. #include <STC15W.h>//STC15W408AS头文件
  11. #include <intrins.h>
  12. unsigned int NTC_R;//定义热敏电阻阻值变量
  13. unsigned char temperature;//定义温度存储变量
  14. unsigned int code Ttable[106][2]={//温度与电阻阻值对应关系表格
  15. 0,3274,//0度对应阻值32.74k
  16. 1,3111,//1度对应阻值31.11k
  17. 2,2957,//2度对应阻值29.57k
  18. 3,2812,//
  19. 4,2674,//
  20. 5,2545,
  21. 6,2422,
  22. 7,2306,
  23. 8,2196,
  24. 9,2092,
  25. 10,1993,
  26. 11,1900,
  27. 12,1811,
  28. 13,1728,
  29. 14,1648,
  30. 15,1573,
  31. 16,1501,
  32. 17,1433,
  33. 18,1369,
  34. 19,1308,
  35. 20,1250,
  36. 21,1194,
  37. 22,1142,
  38. 23,1092,
  39. 24,1045,
  40. 25,1000,//25度对应阻值10k               
  41. 26,957,//26度对应阻值9.57k
  42. 27,916,
  43. 28,877,
  44. 29,840,
  45. 30,805,
  46. 31,771,
  47. 32,739,
  48. 33,709,
  49. 34,679,
  50. 35,652,
  51. 36,625,
  52. 37,600,
  53. 38,576,
  54. 39,553,
  55. 40,531,
  56. 41,510,
  57. 42,490,
  58. 43,471,
  59. 44,453,
  60. 45,435,
  61. 46,418,
  62. 47,402,
  63. 48,387,
  64. 49,372,
  65. 50,358,
  66. 51,345,
  67. 52,332,
  68. 53,320,
  69. 54,308,
  70. 55,297,
  71. 56,286,
  72. 57,276,
  73. 58,266,
  74. 59,256,
  75. 60,247,
  76. 61,238,
  77. 62,230,
  78. 63,222,
  79. 64,214,
  80. 65,207,
  81. 66,199,
  82. 67,193,
  83. 68,186,
  84. 69,180,
  85. 70,174,
  86. 71,168,
  87. 72,162,
  88. 73,157,
  89. 74,        152,
  90. 75,        147,
  91. 76,        142,
  92. 77,        137,
  93. 78,        133,
  94. 79,        128,
  95. 80,        124,
  96. 81,        120,
  97. 82,        116,
  98. 83,        113,
  99. 84,        109,
  100. 85,        106,
  101. 86,        102,//86度对应阻值1.02k
  102. 87,        99,//87度对应阻值0.99k
  103. 88,        96,
  104. 89,        93,
  105. 90,        90,
  106. 91,        88,
  107. 92,        85,
  108. 93,        82,
  109. 94,        80,
  110. 95,        78,
  111. 96,        75,
  112. 97,        73,
  113. 98,        71,
  114. 99,        69,
  115. 100,67,
  116. 101,65,
  117. 102,63,
  118. 103,61,
  119. 104,59,
  120. 105,58//105度对应阻值0.58k
  121.          

  122. };        
  123. #include<4LED_YIN.H>//数码管驱动显示程序
  124. #include <BandGap.H>//包含读单片机内部BandGap基准电压值
  125. void T_dis(){//温度处理函数采集到的阻值与二维数组的阻值进行比较,从而获得相对应的温度值。
  126.          unsigned char i;
  127.          for(i=105;i<106;i--)  {
  128.                 if(NTC_R >= Ttable[i][1] && NTC_R < Ttable[i-1][1]){
  129.                    temperature=(Ttable[i][0]+1);
  130.                    break;
  131.                 }
  132.         }
  133. }
  134. /********************************/
  135. void main (void)
  136. {        Delay20ms();//待系统稳定
  137.     InitADC();//初始化ADC
  138.     P1M1=0X80;//P1.7高阻输入
  139.         init();//IO口设置初始化
  140.     while (1)
  141.     {
  142.         ShowResult(7);//测量NTC热敏电阻上的电压并根据电压计算出阻值
  143.                 T_dis();//测量到的阻值进行查表对比找到阻值对应的温度值
  144.                 disp();        //数码管显示温度值
  145.     }
  146. }
复制代码





NTC10K温度计02.png (757.21 KB, 下载次数: 414)

NTC10K温度计02.png

NTC10K温度计源程序 原理图.rar

2.34 MB, 下载次数: 1233, 下载积分: 黑币 -5

评分

参与人数 22黑币 +188 收起 理由
秦12315 + 11 很给力!
lzh1762 + 5 赞一个!
100860903 + 5 赞一个!
slhslhhao + 5 赞一个!
YJGG + 12 很给力!
凌净清河 + 16 非常精炼,看着舒服,感谢
zhanghoub + 5
h198513 + 5 赞一个!
天涯无芳 + 3 很给力!
sirf3 + 3
GUOXUAN + 15 绝世好帖!
lishiliang + 6 很给力!
brave_ruan + 10 很给力!
3760609865 + 12 很给力!
zhaok2013 + 5 赞一个!
nscj1998 + 5 赞一个!
davg1 + 35 共享资料的黑币奖励!
ssfc + 5 很给力!
随易而安 + 5 共享资料的黑币奖励!
titan90921 + 5 很给力!
滴~电子小白 + 5 赞一个!
维超 + 10 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏92 分享淘帖 顶顶21 踩踩
回复

使用道具 举报

194#
ID:149799 发表于 2026-10-12 12:06 | 只看该作者
对学习有帮助啊,谢谢楼主分享。
回复

使用道具 举报

193#
ID:17340 发表于 2026-10-12 11:18 | 只看该作者
精度还行,改进下做个低功耗就完美了,哪天也做一个来试试。
回复

使用道具 举报

192#
ID:1021614 发表于 2026-6-5 18:31 | 只看该作者
刚好有几块STC15W408AS,学习也做一个。
回复

使用道具 举报

191#
ID:149799 发表于 2026-5-29 10:00 | 只看该作者
谢谢楼主分享,对学习很有帮助。
回复

使用道具 举报

190#
ID:59341 发表于 2026-5-13 16:24 | 只看该作者
温度精准吗?和实际温度有多少误差?
回复

使用道具 举报

189#
ID:388550 发表于 2026-4-28 19:37 | 只看该作者
正需要这个,谢谢楼主
回复

使用道具 举报

188#
ID:352736 发表于 2025-12-31 20:45 来自触屏版 | 只看该作者
不能测负温
回复

使用道具 举报

187#
ID:81365 发表于 2022-1-14 23:50 | 只看该作者
不知道这么久了,还有没有积分
回复

使用道具 举报

186#
ID:661945 发表于 2022-1-13 17:02 | 只看该作者
思路很好,赞一个~~~
回复

使用道具 举报

185#
ID:399179 发表于 2021-12-4 19:57 来自触屏版 | 只看该作者
感谢楼主分享!学习了!
回复

使用道具 举报

184#
ID:374259 发表于 2021-9-19 11:35 | 只看该作者
 很好的一个学习例程。
回复

使用道具 举报

183#
ID:965189 发表于 2021-9-17 11:22 | 只看该作者
赞,适合初学者学习。
回复

使用道具 举报

182#
ID:966668 发表于 2021-9-17 08:33 | 只看该作者
看起来是不错的。
回复

使用道具 举报

181#
ID:966668 发表于 2021-9-17 08:32 | 只看该作者
不错,非常精炼,
回复

使用道具 举报

180#
ID:965189 发表于 2021-9-9 22:58 | 只看该作者
简洁明了,容易仿制。
回复

使用道具 举报

179#
ID:935302 发表于 2021-8-21 14:37 | 只看该作者
不错的学习资料
回复

使用道具 举报

178#
ID:543220 发表于 2021-8-17 11:58 | 只看该作者
你用P1.7口做AD 你小时点怎么弄呢
回复

使用道具 举报

177#
ID:543220 发表于 2021-8-17 11:58 | 只看该作者
你用1.7口做AD 那你小数点如何搞?
回复

使用道具 举报

176#
ID:507641 发表于 2021-8-12 22:27 | 只看该作者
有否用冰水混合的测过0度相差多少?
回复

使用道具 举报

175#
ID:584195 发表于 2021-8-6 21:25 | 只看该作者
楼主真是太有才了,很好的教学贴!
回复

使用道具 举报

174#
ID:70490 发表于 2021-8-4 20:44 | 只看该作者
不错的例程,下载看看!!
回复

使用道具 举报

173#
ID:353063 发表于 2021-5-30 09:35 | 只看该作者
这个很好,想下载可惜没分
回复

使用道具 举报

172#
ID:899081 发表于 2021-5-19 17:19 | 只看该作者
好顶起
回复

使用道具 举报

171#
ID:537743 发表于 2020-9-20 09:30 | 只看该作者
一直想做个简单的项目练一下,这个正好合适。楼主威武!
回复

使用道具 举报

170#
ID:14610 发表于 2020-9-19 12:46 | 只看该作者
siman275 发表于 2016-10-27 15:13
可以直接用EXCEL 做个温度表  5v  =1024   2.5v=512 然后查表来做温度变换 这样来更快。
/*************** ...

你还没有明白楼主的巧妙之处?用5V,有标准的5V吗?较准了没有,单片机内间隙电压是校准过的,这个作法就是不供电电压是4.7-5.3V都不会影响测试结果,你的5.05与5.0都相差几了;
回复

使用道具 举报

169#
ID:147204 发表于 2020-9-18 18:31 | 只看该作者
非常实用!感谢分享学习中!
回复

使用道具 举报

168#
ID:56960 发表于 2020-8-3 15:33 | 只看该作者
学习了,收藏了。
回复

使用道具 举报

167#
ID:546568 发表于 2020-5-17 22:21 | 只看该作者
感谢分享,学习一下
回复

使用道具 举报

166#
ID:189403 发表于 2020-5-15 15:55 | 只看该作者
个人觉得可以用B值来做运算,不用敲那么多代码做数组。
回复

使用道具 举报

165#
ID:444215 发表于 2020-5-12 09:05 | 只看该作者
非常不错不错
回复

使用道具 举报

164#
ID:444215 发表于 2020-5-12 08:58 | 只看该作者
值得学学
回复

使用道具 举报

163#
ID:444215 发表于 2020-5-12 08:58 | 只看该作者
不错不错
回复

使用道具 举报

162#
ID:712484 发表于 2020-4-23 23:20 | 只看该作者
非常实用!感谢分享学习中!
回复

使用道具 举报

161#
ID:59830 发表于 2020-4-18 00:54 | 只看该作者
NTC10K  电阻用上面的表吗.准确吗
回复

使用道具 举报

160#
ID:167296 发表于 2020-4-17 21:01 | 只看该作者

真心是好文章!
回复

使用道具 举报

159#
ID:629683 发表于 2020-4-17 17:46 | 只看该作者
下来试下
回复

使用道具 举报

158#
ID:377382 发表于 2020-4-5 12:05 | 只看该作者
很给力!
回复

使用道具 举报

157#
ID:377210 发表于 2020-3-19 17:57 | 只看该作者
学习了,感谢分享!
回复

使用道具 举报

156#
ID:404925 发表于 2020-3-18 12:10 | 只看该作者
谢谢分享
回复

使用道具 举报

155#
ID:697723 发表于 2020-2-28 16:34 来自触屏版 | 只看该作者
temperature=(Ttable[i][0]+1);这个加一应该不用吧,我改了一下,用两个10k的电阻,转过来也是26转过去也是26不加1就是25
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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