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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9890|回復: 8
收起左側

單片機NTC測溫曲線擬合算法源碼

  [復制鏈接]
ID:306924 發表于 2018-4-12 21:03 | 顯示全部樓層 |閱讀模式
分享一個NTC熱敏電阻測溫曲線擬合算法!

單片機源程序如下:
  1. #include "ntc.h"
  2. #include "stdio.h"
  3. #include "service.h"
  4. #include "datastorage.h"
  5. #include "math.h"
  6. #include "adc.h"
  7. #include "Battery.h"

  8. float        ResCalibValue = 0.0;//校準后的電阻值
  9. float        Value_Res = 0.0;//電阻值,單位為KΩ

  10. float const R[]=                                                                 //NTC碼表
  11. {
  12.         177.00,166.40,156.60,147.20,138.50,130.40,122.90,115.80,109.10,102.90,
  13.         97.120,91.660,86.540,81.720,77.220,72.980,69.000,65.260,61.760,58.460,
  14.         55.340,52.420,49.660,47.080,44.640,42.340,40.160,38.120,36.200,34.380,
  15.         32.660,31.040,29.500,28.060,26.680,25.400,24.180,23.020,21.920,20.880,
  16.         19.900,18.970,18.290,17.260,16.460,15.710,15.000,14.320,13.680,13.070,
  17.         12.490,11.940,11.420,10.920,10.450,10.000,9.574, 9.166, 8.778, 8.480,
  18.         8.058, 7.724, 7.404, 7.098, 6.808, 6.532, 6.268, 6.015, 5.776, 5.546,
  19.         5.326, 5.118, 4.918, 4.726, 4.544, 4.368, 4.202, 4.042, 3.888, 3.742,
  20.         3.602, 3.468, 3.340, 3.216, 3.098, 2.986, 2.878, 2.774, 2.674, 2.580,
  21.         2.488, 2.400, 2.316, 2.234, 2.158, 2.082, 2.012, 1.942, 1.876, 1.813,
  22.         1.751, 1.693, 1.637, 1.582, 1.530, 1.480, 1.432, 1.385, 1.341, 1.298,
  23.         1.256, 1.216, 1.178, 1.141, 1.105, 1.071, 1.038, 1.006, 0.975, 0.945,
  24.         0.916, 0.888, 0.862, 0.836, 0.811, 0.787, 0.764, 0.741, 0.720, 0.699,
  25.         0.679, 0.659, 0.640, 0.622, 0.605, 0.588, 0.571, 0.556, 0.540, 0.525,
  26.         0.511, 0.497, 0.483, 0.470, 0.457, 0.445, 0.433, 0.422, 0.411, 0.400,
  27.         0.389, 0.379, 0.369, 0.360, 0.351, 0.342, 0.333, 0.324, 0.316, 0.308,
  28.         0.300, 0.293, 0.286
  29. };

  30. //***********************************************
  31. //函數功能:求電阻值函數
  32. //入口參數:無
  33. //出口參數:無
  34. //備    注:
  35. //************************************************
  36. void ResCalculate(void)
  37. {
  38.         u16                 i;
  39.         u32                ResSumCode = 0;
  40.         float        AverageCode = 0;

  41.         for(i=0;i<2000;i++)
  42.                 ResSumCode=ResSumCode+ADC_Buff[i][2];

  43.         AverageCode = ResSumCode/2000.0;

  44.         if(AverageCode < 4095.0) //防止死機
  45.                 Value_Res = 15.0*AverageCode/(4095.0-AverageCode);           //換算電阻值,限流電阻15K       
  46.         else
  47.                 Value_Res = 260.0;       
  48.         if(Value_Res>260.0)
  49.                 Value_Res = 260.0;         
  50. }         
  51. //***********************************************
  52. //函數功能:求溫度值函數
  53. //入口參數:無
  54. //出口參數:無
  55. //備    注:
  56. //************************************************
  57. void TempCalculate(void)
  58. {
  59.         float        TempValue,NTC_add;

  60.         ResCalculate();//求電阻值函數       
  61.        
  62.         if(SysData.Flag_Adj == 0xAA55)//校準調試模式
  63.                 ResCalibValue = Value_Res;
  64.         else
  65.                 ResCalibValue = ( Value_Res - SysData.ResZero/1000.0) * SysData.ResGain/1000.0;//電阻值零點和增益補償

  66.         if(ResCalibValue < 0.0)ResCalibValue = 0.0;
  67.         SysData.ResValue = (u32)(ResCalibValue * 100); //電阻值,歐姆

  68.        
  69.         if(ResCalibValue >250.0)//斷線
  70.         {
  71.                 TempValue= -30.0;//斷線上報最小溫度
  72.         }
  73.         else if(ResCalibValue < 2.4)//短路,測溫范圍-30~60℃
  74.         {
  75.                 TempValue= 60.0;//斷線上報最大溫度
  76.         }
  77.         else
  78.         {
  79.                 if((ResCalibValue>R[2])&&(ResCalibValue<=R[0])) //溫度修正
  80.                         NTC_add = 2.1;
  81.                 else if((ResCalibValue>R[4])&&(ResCalibValue<=R[2]))        
  82.                         NTC_add = 2.0;                                                                          
  83.                 else if((ResCalibValue>R[6])&&(ResCalibValue<=R[4]))                         
  84.                         NTC_add = 1.9;                                                                          
  85.                 else if((ResCalibValue>R[8])&&(ResCalibValue<=R[6]))                       
  86.                         NTC_add = 1.8;                                                               
  87.                 else if((ResCalibValue>R[10])&&(ResCalibValue<=R[8]))                         
  88.                         NTC_add = 1.7;                                                                 
  89.                 else if((ResCalibValue>R[12])&&(ResCalibValue<=R[10]))                       
  90.                         NTC_add = 1.6;                         
  91.                 else if((ResCalibValue>R[14])&&(ResCalibValue<=R[12]))                       
  92.                         NTC_add = 1.5;                                                         
  93.                 else if((ResCalibValue>R[16])&&(ResCalibValue<=R[14]))                        
  94.                         NTC_add = 1.4;                                                                                                                                 
  95.                 else if((ResCalibValue>R[18])&&(ResCalibValue<=R[16]))               
  96.                         NTC_add = 1.3;                                                                       
  97.                 else if((ResCalibValue>R[20])&&(ResCalibValue<=R[18]))                       
  98.                         NTC_add = 1.2;                                                                 
  99.                 else if((ResCalibValue>R[22])&&(ResCalibValue<=R[20]))                       
  100.                         NTC_add = 1.1;                                               
  101.                 else if((ResCalibValue>R[24])&&(ResCalibValue<=R[22]))               
  102.                         NTC_add = 1.0;                                
  103.                 else if((ResCalibValue>R[26])&&(ResCalibValue<=R[24]))               
  104.                         NTC_add = 0.9;                                       
  105.                 else if((ResCalibValue>R[28])&&(ResCalibValue<=R[26]))                        
  106.                         NTC_add = 0.8;                 
  107.                 else if((ResCalibValue>R[31])&&(ResCalibValue<=R[28]))                       
  108.                         NTC_add = 0.7;                          
  109.                 else if((ResCalibValue>R[35])&&(ResCalibValue<=R[31]))               
  110.                         NTC_add = 0.6;                               
  111.                 else if((ResCalibValue>R[39])&&(ResCalibValue<=R[35]))                       
  112.                         NTC_add = 0.5;                                         
  113.                 else if((ResCalibValue>R[42])&&(ResCalibValue<=R[39]))               
  114.                         NTC_add = 0.4;                               
  115.                 else if((ResCalibValue>R[48])&&(ResCalibValue<=R[42]))               
  116.                         NTC_add = 0.2;                                 
  117.                 else if((ResCalibValue>R[52])&&(ResCalibValue<=R[48]))               
  118.                         NTC_add = 0.1;                                  
  119.                 else if((ResCalibValue>R[59])&&(ResCalibValue<=R[52]))               
  120.                         NTC_add = 0.0;                                  
  121.                 else if((ResCalibValue>R[109])&&(ResCalibValue<=R[59]))                       
  122.                         NTC_add = -0.2;                                 
  123.                 else if((ResCalibValue>R[115])&&(ResCalibValue<=R[109]))               
  124.                         NTC_add = -0.1;                                               
  125.                 else if((ResCalibValue>R[120])&&(ResCalibValue<=R[115]))               
  126.                         NTC_add = 0.0;                                
  127.                 else if((ResCalibValue>R[124])&&(ResCalibValue<=R[120]))               
  128.                         NTC_add = 0.1;                       
  129.                 else if((ResCalibValue>R[129])&&(ResCalibValue<=R[124]))               
  130.                         NTC_add = 0.2;                       
  131.                 else if((ResCalibValue>R[132])&&(ResCalibValue<=R[129]))               
  132.                         NTC_add = 0.3;                               
  133.                 else if((ResCalibValue>R[137])&&(ResCalibValue<=R[132]))               
  134.                         NTC_add = 0.4;                                  
  135.                 else if((ResCalibValue>R[141])&&(ResCalibValue<=R[137]))               
  136.                         NTC_add = 0.5;                                                         
  137.                 else if((ResCalibValue>R[144])&&(ResCalibValue<=R[141]))               
  138.                         NTC_add = 0.6;                                                                 
  139.                 else if((ResCalibValue>R[147])&&(ResCalibValue<=R[144]))               
  140.                         NTC_add = 0.7;                                                
  141.                 else if((ResCalibValue>R[150])&&(ResCalibValue<=R[147]))               
  142.                         NTC_add = 0.8;                                                                
  143.                 else if((ResCalibValue>R[153])&&(ResCalibValue<=R[150]))               
  144.                         NTC_add = 0.9;                                               
  145.                 else if((ResCalibValue>R[156])&&(ResCalibValue<=R[153]))               
  146.                         NTC_add = 1.0;                                                          
  147.                 else if((ResCalibValue>R[158])&&(ResCalibValue<=R[156]))               
  148.                         NTC_add = 1.1;                                                  
  149.                 else if((ResCalibValue>R[160])&&(ResCalibValue<=R[158]))               
  150.                         NTC_add = 1.2;                                                
  151.                 else if((ResCalibValue>R[162])&&(ResCalibValue<=R[160]))               
  152.                         NTC_add = 1.3;
  153.                
  154.                 TempValue = B*logexp*T25/(T25*log10(ResCalibValue)+B*logexp-T25)-T0-NTC_add;          //溫度換算                                    
  155.         }
  156.         UserData.Temp = TempValue;//換算成0.1℃的整形
  157.         SysData.fTemperValue = 100*TempValue ;
  158. }          
復制代碼

0.jpg

所有資料51hei提供下載:
NTC測溫算法.rar (2.13 KB, 下載次數: 200)
回復

使用道具 舉報

ID:388074 發表于 2018-8-22 14:52 | 顯示全部樓層
NTC熱敏電阻測溫曲線擬合算法
回復

使用道具 舉報

ID:15104 發表于 2018-8-22 16:13 | 顯示全部樓層
謝謝大神分享!!!
回復

使用道具 舉報

ID:395399 發表于 2018-9-8 16:42 | 顯示全部樓層
很好 下載試試
回復

使用道具 舉報

ID:395399 發表于 2018-9-8 16:42 | 顯示全部樓層
很好 需下載 看看 效果如何
回復

使用道具 舉報

ID:403859 發表于 2018-9-29 00:22 | 顯示全部樓層
謝謝,有線路原理試試嗎。
回復

使用道具 舉報

ID:403859 發表于 2018-9-29 00:25 | 顯示全部樓層
謝謝,有線路原理試試嗎。NTC非線性按公式直接計數誤差大,離散也大。
回復

使用道具 舉報

ID:483837 發表于 2019-3-13 20:03 | 顯示全部樓層
沒有效果圖嗎
回復

使用道具 舉報

ID:50527 發表于 2019-6-28 16:57 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲精品精品国产亚洲综合 | 亚洲不卡在线视频 | 精品一区二区久久久久久久网站 | 中文字幕在线播放第一页 | 极品电影院| 色www精品视频在线观看 | a级毛片毛片免费观看久潮喷 | 91人人视频在线观看 | 国产午夜精品一区二区三区四区 | 精品国产一区二区三区久久影院 | 在线视频一区二区 | 一区二区在线 | 亚洲一区在线观看视频 | 欧美日韩国产在线观看 | 国产午夜精品一区二区三区四区 | 作爱视频免费看 | 欧美一级黄色片免费观看 | 国产福利视频 | 国产高清一区二区 | 精品国产乱码久久久久久牛牛 | 国产激情一区二区三区 | 福利国产 | 91成人免费 | 久久毛片| 久久久高清| 欧美在线一区二区三区 | 亚洲国产欧美日韩 | 欧美久久影院 | 亚洲精品在线观看视频 | 欧美一区二区三区日韩 | 欧美高清dvd | 日韩一区二区三区精品 | 免费黄色录像片 | 插插宗合网 | 亚洲精彩免费视频 | 国产精品一区二区久久久久 | 亚洲福利 | 国产精品久久久亚洲 | 在线视频中文字幕 | 日韩欧美国产精品一区二区 | 97精品国产 |