[PIC®/AVR® MCU]

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

[复制链接]
67|1
手机看帖
扫描二维码
随时随地手机跟帖
gaoyang9992006|  楼主 | 2022-11-21 15:08 | 显示全部楼层 |阅读模式
本帖最后由 gaoyang9992006 于 2022-11-22 09:17 编辑

工欲善其事必先利其器,而这个板子就是个很好的开发利器,可以充分使用MCC图形化配置,将底层学习化繁为简,只需要专注你的应用开发即可,真棒!
如何使用NTC热敏电阻测温呢?
77254637b20950f674.png 2070637b24ba96efc.png
我们可以通过一个固定的参考电阻来观察NTC电阻的变化,根据NTC电阻值与温度之间的关系来计算温度。
这需要两个步骤:通过分压测量电阻值,通过电阻值计算温度。
以下是我手头有的NTC的手册部分内容
79215637b21011b3e1.png 2238637b212046c4e.png
手册并没有直接提供阻值计算温度的公式,因此我们要通过提供的内容计算出来
实现温度转换

根据手册提供的公式: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
烧录打印结果
63578637b228cdd382.png
用手捏住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
温度升高,非常奈斯

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

使用特权

评论回复
gejigeji521| | 2022-11-21 15:31 | 显示全部楼层
反推过程真厉害,我以前都是用查表法。

使用特权

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

本版积分规则