找回密码
 立即注册

QQ登录

只需一步,快速开始

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

C语言插值法计算NTC温度代码(精度0.01)注释详细

  [复制链接]
跳转到指定楼层
楼主
ID:254871 发表于 2020-2-22 09:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  1. /************************************************************
  2. * 函数名        :         Get_Temp()
  3. * 功能说明        :         获取NTC温度值
  4. *
  5. * 输入参数        :        无
  6. * 输出参数        :         uint16 温度值*100,单位摄氏度
  7. ************************************
  8. * 修改记录        :        
  9. * 历次作者        :        
  10. * 日期                :        
  11. ************************************
  12. * 修改记录        :        新增函数,第一次编辑
  13. * 历次作者        :        Huo_xp
  14. * 日期                :        2019/08/12
  15. *************************************************************/        

  16. uint16 Get_Temp(void)
  17. {
  18.     uint8 count = 0;
  19.     static uint8 adccount;
  20.     static uint8 Temp_Buf[AVE_N+1];
  21.     uint16 temp = 0;
  22.     uint16 sum = 0;

  23.     temp=(uint16)ADC_SAR_SEQ_GetResult16(HEAT_TEMP)*2; //Psoc ADC实际只有11Bit,所以*2,方便查表计算温度
  24.    
  25. //        Temp_Buf[AVE_N]=temp;//ADC_SAR_SEQ_GetResult16(HEAT_TEMP)*2;  //将ADC转换结果放数组最高位
  26. //        if( ++adccount < 8)      //采样初期不使用递推滤波算法
  27. //    {   
  28. //        for(count=0;count<8;count++)  //准备递推滤波算法的数据
  29. //                {
  30. //                    Temp_Buf[count]=Temp_Buf[count+1];//所有数据循环左移
  31. //                }
  32. //                temp=Temp_Buf[8];//采样初期使用当前采样值
  33. //        }
  34. //    else    //只有采样次数大于8次以后才使用递推滤波算法
  35. //    {
  36. //        adccount=8; //采样次数超过8次后,固定设置为8
  37. //        for(count=0;count<8;count++)  //递推滤波算法
  38. //        {
  39. //            Temp_Buf[count]=Temp_Buf[count+1];//所有数据循环左移
  40. //            sum += Temp_Buf[count];  //求和
  41. //        }
  42. //        temp=sum/8;        //求平均值      
  43. //    }   
  44. //    count=0;
  45.     while( temp < NTC_Table[count] ) //将当前温度值与温度表对比,得到所在位置
  46.     {   count++;   }

  47.     NTC_Temp = count*100 +(1-((temp - NTC_Table[count+1])*100 )/( NTC_Table[count] - NTC_Table[count+1]));
  48.    // 插值法计算温度,将数据全部扩大100倍,使小数变为整数,

  49. //    if(count >=39)    //温度高于0度
  50. //    {
  51. //        temp=NTC_Temp-3900;//修正温度,0~120
  52. //        sprintf(
  53. //            uartLine, "Heat temp is: %dC %d %d %d",
  54. //            (uint16) temp,ADC_SAR_SEQ_GetResult16(HEAT_TEMP),count,TIMER.mSec //ADCcount//
  55. //            );
  56. //
  57. //            UART_PutString(uartLine);
  58. //            UART_PutCRLF();
  59. //     }
  60. //     else
  61. //    {
  62. //        temp=4000-NTC_Temp;//修正温度,-40~0
  63. //        sprintf(
  64. //            uartLine, "Heat temp is: -%dC %d %d ",
  65. //            (uint16) temp,ADC_SAR_SEQ_GetResult16(HEAT_TEMP),count //ADCcount//
  66. //            );
  67. //
  68. //            UART_PutString(uartLine);
  69. //            UART_PutCRLF();  
  70. //    }
  71.        return NTC_Temp;
  72.    

  73. }

  74. /************************************************************
  75. * 函数名        :         NTC_Table[]
  76. * 功能说明        :         NTC温度阻止表,不同的NTC需按照规格书重新计算
  77. *
  78. * 输入参数        :        无
  79. * 输出参数        :        无
  80. ************************************
  81. * 修改记录        :        
  82. * 历次作者        :        
  83. * 日期                :        
  84. ************************************
  85. * 修改记录        :        新增函数,第一次编辑
  86. * 历次作者        :        Huo_xp
  87. * 日期                :        2019/08/12
  88. *************************************************************/        

  89.    
  90. const uint16  NTC_Table[] = {    //NTC温度转换12 Bit ADC 各温度对应的值
  91.    
  92. //hex                          temp C      
  93.    
  94. 0xF8B,                          //-40
  95. 0xF85,                          //-39
  96. 0xF7F,                          //-38
  97. 0xF78,                          //-37
  98. 0xF70,                          //-36
  99. 0xF69,                          //-35
  100. 0xF61,                          //-34
  101. 0xF59,                          //-33
  102. 0xF50,                          //-32
  103. 0xF48,                          //-31
  104. 0xF3E,                          //-30
  105. 0xF35,                          //-29
  106. 0xF2B,                          //-28
  107. 0xF20,                          //-27
  108. 0xF15,                          //-26
  109. 0xF0A,                          //-25
  110. 0xEFE,                          //-24
  111. 0xEF2,                          //-23
  112. 0xEE5,                          //-22
  113. 0xED8,                          //-21
  114. 0xECA,                          //-20
  115. 0xEBC,                          //-19
  116. 0xEAE,                          //-18
  117. 0xE9E,                          //-17
  118. 0xE8F,                          //-16
  119. 0xE7E,                          //-15
  120. 0xE6E,                          //-14
  121. 0xE5C,                          //-13
  122. 0xE4A,                          //-12
  123. 0xE38,                          //-11
  124. 0xE25,                          //-10
  125. 0xE11,                          //-9
  126. 0xDFD,                          //-8
  127. 0xDE9,                          //-7
  128. 0xDD3,                          //-6
  129. 0xDBD,                          //-5
  130. 0xDA7,                          //-4
  131. 0xD90,                          //-3
  132. 0xD78,                          //-2
  133. 0xD60,                          //-1
  134. 0xD47,                          //0
  135. 0xD2E,                          //1
  136. 0xD14,                          //2
  137. 0xCFA,                          //3
  138. 0xCDF,                          //4
  139. 0xCC3,                          //5
  140. 0xCA7,                          //6
  141. 0xC8B,                          //7
  142. 0xC6E,                          //8
  143. 0xC50,                          //9
  144. 0xC32,                          //10
  145. 0xC14,                          //11
  146. 0xBF5,                          //12
  147. 0xBD6,                          //13
  148. 0xBB5,                          //14
  149. 0xB96,                          //15
  150. 0xB75,                          //16
  151. 0xB54,                          //17
  152. 0xB32,                          //18
  153. 0xB11,                          //19
  154. 0xAEF,                          //20
  155. 0xACC,                          //21
  156. 0xAAA,                          //22
  157. 0xA87,                          //23
  158. 0xA64,                          //24
  159. 0xA41,                          //25
  160. 0xA1E,                          //26
  161. 0x9FA,                          //27
  162. 0x9D7,                          //28
  163. 0x9B3,                          //29
  164. 0x98F,                          //30
  165. 0x96C,                          //31
  166. 0x948,                          //32
  167. 0x924,                          //33
  168. 0x900,                          //34
  169. 0x8DC,                          //35
  170. 0x8B8,                          //36
  171. 0x895,                          //37
  172. 0x871,                          //38
  173. 0x84D,                          //39
  174. 0x82A,                          //40
  175. 0x807,                          //41
  176. 0x7E4,                          //42
  177. 0x7C1,                          //43
  178. 0x79E,                          //44
  179. 0x77C,                          //45
  180. 0x75A,                          //46
  181. 0x738,                          //47
  182. 0x717,                          //48
  183. 0x6F5,                          //49
  184. 0x6D4,                          //50
  185. 0x6B3,                          //51
  186. 0x693,                          //52
  187. 0x673,                          //53
  188. 0x653,                          //54
  189. 0x634,                          //55
  190. 0x615,                          //56
  191. 0x5F6,                          //57
  192. 0x5D8,                          //58
  193. 0x5BA,                          //59
  194. 0x59D,                          //60
  195. 0x580,                          //61
  196. 0x563,                          //62
  197. 0x547,                          //63
  198. 0x52B,                          //64
  199. 0x510,                          //65
  200. 0x4F5,                          //66
  201. 0x4DB,                          //67
  202. 0x4C1,                          //68
  203. 0x4A8,                          //69
  204. 0x48E,                          //70
  205. 0x476,                          //71
  206. 0x45E,                          //72
  207. 0x446,                          //73
  208. 0x42F,                          //74
  209. 0x418,                          //75
  210. 0x401,                          //76
  211. 0x3EB,                          //77
  212. 0x3D6,                          //78
  213. 0x3C1,                          //79
  214. 0x3AC,                          //80
  215. 0x397,                          //81
  216. 0x384,                          //82
  217. 0x370,                          //83
  218. 0x35D,                          //84
  219. 0x34A,                          //85
  220. 0x338,                          //86
  221. 0x326,                          //87
  222. 0x315,                          //88
  223. 0x304,                          //89
  224. 0x2F3,                          //90
  225. 0x2E3,                          //91
  226. 0x2D2,                          //92
  227. 0x2C3,                          //93
  228. 0x2B3,                          //94
  229. 0x2A5,                          //95
  230. 0x296,                          //96
  231. 0x287,                          //97
  232. 0x279,                          //98
  233. 0x26C,                          //99
  234. 0x25E,                          //100
  235. 0x251,                          //101
  236. 0x244,                          //102
  237. 0x238,                          //103
  238. 0x22C,                          //104
  239. 0x220,                          //105
  240. 0x214,                          //106
  241. 0x209,                          //107
  242. 0x1FE,                          //108
  243. 0x1F3,                          //109
  244. 0x1E8,                          //110
  245. 0x1DE,                          //111
  246. 0x1D4,                          //112
  247. 0x1CA,                          //113
  248. 0x1C0,                          //114
  249. 0x1B6,                          //115
  250. 0x1AD,                          //116
  251. 0x1A4,                          //117
  252. 0x19B,                          //118
  253. 0x193,                          //119
  254. 0x18A,                          //120
  255. };


复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:404925 发表于 2020-3-18 15:18 | 只看该作者
谢谢分享,下来看看
回复

使用道具 举报

板凳
ID:8222 发表于 2020-3-19 00:27 | 只看该作者
谢谢分享,学习了。
回复

使用道具 举报

地板
ID:156220 发表于 2020-3-19 09:48 | 只看该作者
谢谢分享,学习学习
回复

使用道具 举报

5#
ID:208849 发表于 2020-3-19 17:30 | 只看该作者
谢谢分享;但我有个疑问,这样算法会不会带来温度显示速度会偏慢吗?
回复

使用道具 举报

6#
ID:71535 发表于 2020-3-19 19:50 | 只看该作者

谢谢分享,学习学习。
回复

使用道具 举报

7#
ID:215579 发表于 2020-3-20 01:13 | 只看该作者
tonggin 发表于 2020-3-19 17:30
谢谢分享;但我有个疑问,这样算法会不会带来温度显示速度会偏慢吗?

都用NTC了,对速度肯定没要求
回复

使用道具 举报

8#
ID:603066 发表于 2020-3-26 16:27 | 只看该作者
UART_PutString();UART_PutCRLF();这两个函数包含在那个头文件
回复

使用道具 举报

9#
ID:974321 发表于 2021-10-23 12:58 | 只看该作者
本帖最后由 rookie108 于 2021-10-23 13:15 编辑

你好,谢谢楼主分享。但有个问题没看明白,故请教一下:
NTC_Temp = count*100 +(1-((temp - NTC_Table[count+1])*100 )/( NTC_Table[count] - NTC_Table[count+1]));这一行计算方法不是很明白,能否麻烦解答一下?

谢谢。
回复

使用道具 举报

10#
ID:148780 发表于 2021-11-27 14:55 | 只看该作者
温度对应的Hex怎么来的?比说说:0xF8B,                          //-40
回复

使用道具 举报

11#
ID:430492 发表于 2022-1-13 20:18 | 只看该作者
楼主,这NTC是多少  K的?B值多少?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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