打印
[PIC®/AVR®/dsPIC®产品]

【CuriosityNano测评报告】+NTC热敏电阻测温应用

[复制链接]
1228|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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计算。
为了方便理解与计算,我们将阻值到温度值的关系写成函数

#define K 273.15
#define T0 (25.0+K)
#define R0 10000.0
#define B 3455.0

/*

电阻值换算到温度

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

返回值:摄氏度

*/

float Res_to_Tem(float res_val)
{
    float temp;
    temp=1/((1/T0)+(log(res_val/R0)/B));
    return temp-K;
}
最后我们完善测试代码
#include "mcc_generated_files/system/system.h"
#include "mcc_generated_files/timer/../timer/delay.h"
#include <math.h>
/*
    Main application
*/
#define K 273.15
#define T0 (25.0+K)
#define R0 10000.0
#define B 3455.0

/*

电阻值换算到温度

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

返回值:摄氏度

*/

float Res_to_Tem(float res_val)
{
    float temp;
    temp=1/((1/T0)+(log(res_val/R0)/B));
    return temp-K;
}

int main(void)
{
    float val;
    adc_result_t ADCRESULT;
   
    SYSTEM_Initialize();


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

用手捏住NTC传感器观察结果变化
Hello world !
ADCRESULT=2313
val=8.047475 K Ohm
temp=30.695770
Hello world !
ADCRESULT=2286
val=7.834825 K Ohm
temp=31.413055
Hello world !
ADCRESULT=2279
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的精度怎么样              

使用特权

评论回复
5
gaoyang9992006|  楼主 | 2023-1-5 14:17 | 只看该作者
lihuami 发表于 2023-1-5 10:46
ntc的精度怎么样

精度非常高,都可以做体温计了。

使用特权

评论回复
6
deliahouse887| | 2023-1-6 22:13 | 只看该作者
MCC是开发单片机的好东西了。              

使用特权

评论回复
7
bestwell| | 2023-1-7 10:23 | 只看该作者
这个很少使用的这个模块了。              

使用特权

评论回复
8
gaoyang9992006|  楼主 | 2023-1-7 14:08 | 只看该作者
bestwell 发表于 2023-1-7 10:23
这个很少使用的这个模块了。

这就是两个电阻串联。

使用特权

评论回复
9
lzbf| | 2023-1-10 21:09 | 只看该作者
使用的ADC转化的吗?              

使用特权

评论回复
10
gaoyang9992006|  楼主 | 2023-1-11 09:20 | 只看该作者
lzbf 发表于 2023-1-10 21:09
使用的ADC转化的吗?

是的,使用ADC读取分压,然后根据参考电阻计算出NTC电阻的值,然后根据手册提供的说明换算成温度。

使用特权

评论回复
11
adolphcocker| | 2023-1-11 22:18 | 只看该作者
如何将电阻数值转换温度?              

使用特权

评论回复
12
小明的同学| | 2024-7-27 17:49 | 只看该作者
ADC非常好用的一个外设。

使用特权

评论回复
13
幸福小强| | 2024-7-27 21:00 | 只看该作者
电路行的两个电容分别是怎么接的?

使用特权

评论回复
14
xuanhuanzi| | 2024-7-29 21:56 | 只看该作者
这个算法不错。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1962

主题

15935

帖子

208

粉丝