[PIC®/AVR®/dsPIC®产品] 【CuriosityNano测评报告】+NTC热敏电阻测温应用

[复制链接]
1774|13
 楼主| gaoyang9992006 发表于 2022-11-21 15:08 | 显示全部楼层 |阅读模式
本帖最后由 gaoyang9992006 于 2022-11-22 09:17 编辑

工欲善其事必先利其器,而这个板子就是个很好的开发利器,可以充分使用MCC图形化配置,将底层学习化繁为简,只需要专注你的应用开发即可,真棒!
如何使用NTC热敏电阻测温呢?

我们可以通过一个固定的参考电阻来观察NTC电阻的变化,根据NTC电阻值与温度之间的关系来计算温度。
这需要两个步骤:通过分压测量电阻值,通过电阻值计算温度。
以下是我手头有的NTC的手册部分内容

手册并没有直接提供阻值计算温度的公式,因此我们要通过提供的内容计算出来
实现温度转换

根据手册提供的公式:R=R0 exp B(1/T - 1/T0);
其中R是待测电阻,R0是某个温度T0 K下的已知电阻,B是温度传感器常数
通过以上公式反推T = temp=1/((1/T0)+(log(RT/R0)/B));
代入数据测试,例如T0=25摄氏度时候R0=10K欧姆,主意以上代入实际计算时候要使用绝对温度,单位开尔文
经过测试上述公式可以完成验算,即,正确。
根据手册该型号的B常数在25到50度之间采用3380,25到80之间采用3428,25到85之间采用3434,25到100摄氏度之间采用3455.
为了方便,本项目采用3455计算。
为了方便理解与计算,我们将阻值到温度值的关系写成函数

  1. #define K 273.15
  2. #define T0 (25.0+K)
  3. #define R0 10000.0
  4. #define B 3455.0

  5. /*

  6. 电阻值换算到温度

  7. res_val:NTC当前的阻抗值,单位欧姆

  8. 返回值:摄氏度

  9. */

  10. float Res_to_Tem(float res_val)
  11. {
  12.     float temp;
  13.     temp=1/((1/T0)+(log(res_val/R0)/B));
  14.     return temp-K;
  15. }
最后我们完善测试代码
  1. #include "mcc_generated_files/system/system.h"
  2. #include "mcc_generated_files/timer/../timer/delay.h"
  3. #include <math.h>
  4. /*
  5.     Main application
  6. */
  7. #define K 273.15
  8. #define T0 (25.0+K)
  9. #define R0 10000.0
  10. #define B 3455.0

  11. /*

  12. 电阻值换算到温度

  13. res_val:NTC当前的阻抗值,单位欧姆

  14. 返回值:摄氏度

  15. */

  16. float Res_to_Tem(float res_val)
  17. {
  18.     float temp;
  19.     temp=1/((1/T0)+(log(res_val/R0)/B));
  20.     return temp-K;
  21. }

  22. int main(void)
  23. {
  24.     float val;
  25.     adc_result_t ADCRESULT;
  26.    
  27.     SYSTEM_Initialize();


  28.     while(1)
  29.     {
  30.         printf("Hello world !\n");
  31.         DELAY_milliseconds(2000);
  32.         ADCRESULT=ADC0_GetConversion(ADC_MUXPOS_AIN22_gc)>>4;//设置了左对齐,那么咱数据就右移回来,PA2对应AIN22  
  33.         printf("ADCRESULT=%d\n",ADCRESULT);
  34.         val=((ADCRESULT*6.2)/(4095-ADCRESULT)); //单位为KΩ
  35.         printf("val=%f K Ohm\n",val);
  36.         printf("temp=%f \n",Res_to_Tem(val*1000.0));   
  37.         DELAY_milliseconds(2000);
  38.     }   
  39. }
关于ADC的使用请参考
https://bbs.21ic.com/icview-3266138-1-1.html
烧录打印结果

用手捏住NTC传感器观察结果变化
  1. Hello world !
  2. ADCRESULT=2313
  3. val=8.047475 K Ohm
  4. temp=30.695770
  5. Hello world !
  6. ADCRESULT=2286
  7. val=7.834825 K Ohm
  8. temp=31.413055
  9. Hello world !
  10. ADCRESULT=2279
  11. val=7.780727 K Ohm
温度升高,非常奈斯

关于开发板的使用主意事项

其中VBUS为USB电压5V,而单片机的参考电压我们选择的是单片机的VDD,也就是3.3V,而我们设置的参考电压VTG就是VDD,因此需要将分压电阻的Vcc接到3.3V的VTG上。这样测出来才是标准的。
因为只要超过3.3V的输入都会达到满量程4095。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
gejigeji521 发表于 2022-11-21 15:31 | 显示全部楼层
反推过程真厉害,我以前都是用查表法。
lzmm 发表于 2023-1-5 10:38 | 显示全部楼层
这个最大的测量范围是多少?              
lihuami 发表于 2023-1-5 10:46 | 显示全部楼层
ntc的精度怎么样              
 楼主| gaoyang9992006 发表于 2023-1-5 14:17 | 显示全部楼层
lihuami 发表于 2023-1-5 10:46
ntc的精度怎么样

精度非常高,都可以做体温计了。
deliahouse887 发表于 2023-1-6 22:13 | 显示全部楼层
MCC是开发单片机的好东西了。              
bestwell 发表于 2023-1-7 10:23 | 显示全部楼层
这个很少使用的这个模块了。              
 楼主| gaoyang9992006 发表于 2023-1-7 14:08 | 显示全部楼层
bestwell 发表于 2023-1-7 10:23
这个很少使用的这个模块了。

这就是两个电阻串联。
lzbf 发表于 2023-1-10 21:09 | 显示全部楼层
使用的ADC转化的吗?              
 楼主| gaoyang9992006 发表于 2023-1-11 09:20 | 显示全部楼层
lzbf 发表于 2023-1-10 21:09
使用的ADC转化的吗?

是的,使用ADC读取分压,然后根据参考电阻计算出NTC电阻的值,然后根据手册提供的说明换算成温度。
adolphcocker 发表于 2023-1-11 22:18 | 显示全部楼层
如何将电阻数值转换温度?              
小明的同学 发表于 2024-7-27 17:49 | 显示全部楼层
ADC非常好用的一个外设。
幸福小强 发表于 2024-7-27 21:00 | 显示全部楼层
电路行的两个电容分别是怎么接的?
xuanhuanzi 发表于 2024-7-29 21:56 | 显示全部楼层
这个算法不错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2052

主题

16403

帖子

222

粉丝
快速回复 在线客服 返回列表 返回顶部