久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 78800|回復: 187
收起左側

開源4個元件打造NTC10K溫度計

  [復制鏈接]
回帖獎勵 9 黑幣 回復本帖可獲得 3 黑幣獎勵! 每人限 1 次(中獎概率 80%)
ID:123732 發表于 2016-10-25 19:32 | 顯示全部樓層 |閱讀模式
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度
NTC10K溫度計03.png

下圖為數碼管正放時的顯示,實際使用時要旋轉180度放
(這樣就可以顯示溫度符號℃)
NTC10K溫度計01.png

下圖為原理圖截圖(源文件見附件PADS layout)
NTC10K溫度計原理圖截圖.png

下圖為買熱敏電阻時賣家提供的阻值與溫度對應關系表
NTC10K.jpg

NTC10.jpg

請評分支持一下謝謝
  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

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 贊一個!

查看全部評分

回復

使用道具 舉報

ID:46999 發表于 2016-10-26 08:59 | 顯示全部樓層
很好的一個學習例程。
回復

使用道具 舉報

ID:96682 發表于 2016-10-26 16:24 | 顯示全部樓層

回帖獎勵 +3 黑幣

用四位數碼管測溫范圍會更寬
回復

使用道具 舉報

ID:123732 發表于 2016-10-26 16:50 | 顯示全部樓層
wc86110 發表于 2016-10-26 16:24
用四位數碼管測溫范圍會更寬

此制作僅為拋磚引玉,壇友可以加入更好的創意進去。
回復

使用道具 舉報

ID:143848 發表于 2016-10-27 12:57 來自手機 | 顯示全部樓層

回帖獎勵 +3 黑幣

請問按照你的原理,因為你的單片機里已經包含了AD轉換模塊,若必須分離出來那么這樣行嗎?NTC 10k熱敏電阻和10k精密電阻串聯,然后將它接入A/D轉換器,例如ADC0804然后通過DB1~DB2將數字信號送入單片機,而這個數就是NTC的分壓值,之后由再計算那個NTC的電阻,再查表求溫度,可以不?
回復

使用道具 舉報

ID:123732 發表于 2016-10-27 13:56 | 顯示全部樓層
七顆星星 發表于 2016-10-27 12:57
請問按照你的原理,因為你的單片機里已經包含了AD轉換模塊,若必須分離出來那么這樣行嗎?NTC 10k熱敏電阻 ...

可以的
回復

使用道具 舉報

ID:143848 發表于 2016-10-27 14:21 來自手機 | 顯示全部樓層
劉海龍 發表于 2016-10-27 13:56
可以的

那這個程序應該怎么寫呀,我只會寫簡單的,這個我不太會,還有今天課間問了老師這個電路,老師說按原理可以實現,要我仿真看看,他說加到AD的電路的電壓前面靈敏度會不夠,可能要加一個電壓放大器,這應該怎么連接呢
回復

使用道具 舉報

ID:85925 發表于 2016-10-27 15:13 | 顯示全部樓層
可以直接用EXCEL 做個溫度表  5v  =1024   2.5v=512 然后查表來做溫度變換 這樣來更快。
/*************************************************************
*        NTC=3950   10K                                 
*        取樣電阻   R=10K
*      
*************************************************************/
const unsigned char temp_table[ ]=
{
   //60
     60,63,65,67,70,72,75,78,80,83,                 //0-9
     85,88,91,94,97,100,102,105,108,111,         //10-19
     114,117,120,122,125,128,131,134,136,139,    //20-29
     142,145,147,150,152,155,157,160,162,165,    //30-39
     167,170,172,174,176,178,180,183,185,186,    //40-49
     188,190,192,194,196,197,199,201,202,204,    //50-59
     205,207,208,209,211,212,213,214,216,217,    //60-69
     218,219,220,221,222,223,224,225,226,227,    //70-79
     227,228,229,230,231,231,232,233,233,234,    //80-89
     234,235,236,237,237,238,238,239,239,240,240     //90-99              
};   

//===================================================
//   NTC  AD 采樣
//
//
//===================================================
void  ntc_ad(void)
{
  uchar i,j;
  DISI();
  AISR=0x08;                                    //P53 IS AD INPUT
  ADCON=0x0B;                                        //VREFS=VDD,CKR1/CKR0=00,ADPD=1,ADIS1/ADIS0=P53
  ADRUN=1;
  for(count=0;count<9;count++)
   {
     while(ADRUN)                        //WAIT ADC END
            {
                 WDTC();
                }
          ad_val[count]=ADDATA;          
          ADRUN=1;
   }          
   
//========================冒泡======================================  
    count=9;
         for(i=0;i<count;i++)
          {
           for(j=0;j<(count-i);j++)
            {
            if (ad_val[j]>ad_val[j+1])
              {
                        temp=ad_val[j+1];
                        ad_val[j+1]=ad_val[j];
                        ad_val[j]=temp;
               }
             }
           }
           if(ad_val[4]<=60)   
            {
               tt_new=0;
               return;
            }        
           if(ad_val[4]>=240)
            {
               tt_new=99;
               return;
            }  
            
           tt_2=temp_table[tt_new+1];
       tt_1=temp_table[tt_new-1];     
       if((ad_val[4]<=tt_1)||(ad_val[4]>=tt_2))
        {
          count1++;
          if(count1>5)
            {
              count1=0;
              tt_new=0;
                  do                                
                {
                  if(temp_table[tt_new]>=ad_val[4])
                   {
                     break;
                   }
                  tt_new++;     
                }while(tt_new<100);
            }
        }
      else
        {
            count1=0;
        }
    ENI();
}

我用的是義隆的芯片  AD 是8位

評分

參與人數 1黑幣 +15 收起 理由
GUOXUAN + 15 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:123732 發表于 2016-10-27 21:52 | 顯示全部樓層
七顆星星 發表于 2016-10-27 14:21
那這個程序應該怎么寫呀,我只會寫簡單的,這個我不太會,還有今天課間問了老師這個電路,老師說按原理可 ...

根據這個程序的思路自己改改
回復

使用道具 舉報

ID:41090 發表于 2016-11-21 11:01 | 顯示全部樓層
不錯,謝謝分享
回復

使用道具 舉報

ID:146834 發表于 2016-11-22 09:16 | 顯示全部樓層
這個要看看。0度一下不顯?
回復

使用道具 舉報

ID:149399 發表于 2016-11-22 10:54 | 顯示全部樓層
很有用
回復

使用道具 舉報

ID:90816 發表于 2016-11-23 14:57 | 顯示全部樓層
非常實用!感謝分享學習中!
回復

使用道具 舉報

ID:152422 發表于 2016-12-5 21:49 | 顯示全部樓層
真的值得學習,,,!!
回復

使用道具 舉報

ID:152839 發表于 2016-12-8 15:57 | 顯示全部樓層

回帖獎勵 +3 黑幣

不錯 不錯 不錯的
回復

使用道具 舉報

ID:91691 發表于 2016-12-9 06:10 | 顯示全部樓層
真的值得學習!謝謝分享
回復

使用道具 舉報

ID:154362 發表于 2016-12-13 11:11 | 顯示全部樓層

 很好的一個學習例程。
回復

使用道具 舉報

ID:151661 發表于 2016-12-13 19:54 | 顯示全部樓層

 很好的一個學習例程。
回復

使用道具 舉報

ID:24486 發表于 2016-12-14 20:22 | 顯示全部樓層
不錯,謝謝分享。
回復

使用道具 舉報

ID:155151 發表于 2016-12-15 22:59 | 顯示全部樓層
不錯,謝謝
回復

使用道具 舉報

ID:98767 發表于 2016-12-18 22:39 | 顯示全部樓層
負溫如何顯示呢?
回復

使用道具 舉報

ID:79034 發表于 2016-12-19 08:43 | 顯示全部樓層
參考學習下
回復

使用道具 舉報

ID:123732 發表于 2016-12-20 13:19 | 顯示全部樓層
kkfy888 發表于 2016-12-18 22:39
負溫如何顯示呢?

數碼管換成4位的,程序改改。
回復

使用道具 舉報

ID:151661 發表于 2016-12-20 15:20 | 顯示全部樓層

回帖獎勵 +3 黑幣

回帖有錢
回復

使用道具 舉報

ID:158407 發表于 2017-2-7 18:45 | 顯示全部樓層

回帖獎勵 +3 黑幣

請問讀取一次溫度值大約需要多長時間?
回復

使用道具 舉報

ID:123732 發表于 2017-2-7 20:14 | 顯示全部樓層
bpdy168 發表于 2017-2-7 18:45
請問讀取一次溫度值大約需要多長時間?

讀取一次1秒內
回復

使用道具 舉報

ID:158248 發表于 2017-2-8 08:42 | 顯示全部樓層
不錯不錯
回復

使用道具 舉報

ID:157063 發表于 2017-2-9 15:59 | 顯示全部樓層
贊一個!
回復

使用道具 舉報

ID:157063 發表于 2017-2-9 16:01 | 顯示全部樓層
很好的一個學習例程。
回復

使用道具 舉報

ID:165174 發表于 2017-2-17 21:07 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:166817 發表于 2017-2-27 00:04 | 顯示全部樓層
樓主太棒了,謝謝分享
回復

使用道具 舉報

ID:82421 發表于 2017-2-27 10:05 | 顯示全部樓層
6666666666666  等一下試一下
回復

使用道具 舉報

ID:167292 發表于 2017-3-1 10:10 | 顯示全部樓層
謝謝樓主!
回復

使用道具 舉報

ID:21740 發表于 2017-3-7 21:50 | 顯示全部樓層
程序這個好!學習了。謝謝分享!!!!!!!!!!!!
回復

使用道具 舉報

ID:165046 發表于 2017-3-7 22:22 | 顯示全部樓層

回帖獎勵 +3 黑幣

這個貌似需要AD/DA轉換吧,單片機自帶功能嗎?
回復

使用道具 舉報

ID:151348 發表于 2017-3-8 11:15 | 顯示全部樓層
不錯的制作,存這么多數據有些耗內存
回復

使用道具 舉報

ID:123732 發表于 2017-3-9 03:12 | 顯示全部樓層
zhaok2013 發表于 2017-3-7 22:22
這個貌似需要AD/DA轉換吧,單片機自帶功能嗎?

這塊單片機自帶ADC
回復

使用道具 舉報

ID:114207 發表于 2017-3-9 07:56 | 顯示全部樓層
真心是好文章!
回復

使用道具 舉報

ID:99130 發表于 2017-3-10 17:37 | 顯示全部樓層
為毛我的做出來顯示亂碼
回復

使用道具 舉報

ID:123732 發表于 2017-3-11 20:51 | 顯示全部樓層
越快樂越墮落 發表于 2017-3-10 17:37
為毛我的做出來顯示亂碼

把數碼管倒過來看
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91亚洲国产成人久久精品网站 | 亚洲一区二区三区免费观看 | 一级片av | 精品自拍视频在线观看 | 国产精品成人69xxx免费视频 | 中国黄色在线视频 | 日韩影院在线 | 国产视频久| 欧美一级免费 | 久久亚洲精品久久国产一区二区 | 久热久热 | 久久久久久久久91 | 欧美成人h版在线观看 | 罗宾被扒开腿做同人网站 | 亚洲欧美日韩精品久久亚洲区 | 麻豆av电影网| 日韩欧美在线视频观看 | 91性高湖久久久久久久久_久久99 | 91精品国产一二三 | 91精品久久久久久久久中文字幕 | 成人在线一区二区三区 | 久久久蜜桃| 亚洲精品一 | 欧美精品福利视频 | 国产色视频网站 | 中文字幕精品一区久久久久 | 请别相信他免费喜剧电影在线观看 | 欧美大片一区 | 黄色亚洲| 自拍偷拍中文字幕 | 亚洲成人av一区二区 | 亚洲a网 | 亚洲国产小视频 | 欧美色性 | 欧州一区二区三区 | 国产一区二区三区在线 | 亚洲免费成人 | 亚洲欧美精品在线观看 | 免费视频99 | 国产精品毛片一区二区三区 | www.亚洲一区 |