一、简介

热电偶(thermocouple)是把两种不同材料的金属的一端连接起来,利用热电效应来测量温度的传感器。

热电效应是热电偶的物理基础,什么是热电效应呢?

我们知道,当在一段金属丝的两端施加电压时,金属丝会有电流流过并发热。这种现象称为电流的热效应。

1821年,德国科学家托马斯·约翰·赛贝克(seebeck)发现了电流热效应的逆效应:即当给一段金属丝的两端施加不同的温度时,金属丝的两端会产生电动势,闭合回路后金属丝中会有电流流过。这种现象被称为热电效应,也称为塞贝克效应。

二、基本原理

用两种不同颜色表示两种不同的金属材料,A、B 端在常温环境中用于测温端口,称为冷端。在 C 端进行加热。由于热电效应,在 A端和C端 以及 B端和C端 之间温度不同,所以会产生电势差。而因为两种金属材料的不同,会导致这两个电势差不一样,最终导致了 A端 和 B端 也有了电势差,通过测量这两个端的电势差,根据热电效应的线性关系就可以得出 A(B)端 和 C端 的温差。再通过 一个已知温度的校准值 和 两种金属的线性系数,就可以计算出任意输出电势差对应的温度值了。

三、使用说明

实际上我们使用热电偶只需要串联一个已知阻值的电阻,然后通过adc检测出电压值,计算出当前热电偶的阻值,再通过查表或者公式计算出当前的温度值。

1、电阻的计算

假设我们原理图如上所示,那么我们就可以知道此时R1的阻值

 RES = (AD_value * 10.000) / (1024 - AD_value);     //计算得出热敏电阻的阻值
 NTC = Get_Kelvin_Temperature(RES);			 //通过阻值计算出温度

知道阻值之后我们可以通过查表的方式或者公式的方式,获取到温度值,我们下面写的程序是公式的方式,查表的方式可以去找厂家索要表格然后对照即可,这里不叙述表明。

/*获取NTC温度函数*/
float Get_Kelvin_Temperature(float Rntc)
{
  float N1,N2,N3,N4;
  N1 = (log(10)-log(Rntc))/3950;
  N2 = 1/298.15 - N1;
  N3 = 1/N2;
  N4 = N3-273.15;

  return N4;
}

程序实现

#include "math.h"

#define T25 298.15
#define R25 10
#define B    3950

float Voltage;                    //热敏电阻实时电压
float Rntc;                    //热敏电阻的实时电阻
uint16_t temp;                    //温度值

/****
*******温度获取函数
*****/
float Get_Temperature(float Rntc)
{
    float N1,N2,N3,N4;
    N1 = (log(R25)-log(Rntc))/B;
    N2 = 1/T25 - N1;
    N3 = 1/N2;
    N4 = N3-273.15;
    
    return N4;
}

float Total, AD_Value;
    for(uint8_t i = 0; i < 10;  i++)        //ADC采集进行递推平均滤波
    {
    HAL_ADC_Start(&hadc1);
    if(HAL_ADC_PollForConversion(&hadc1, 999) == HAL_OK)
        AD_Value = HAL_ADC_GetValue(&hadc1)/4095.0 * 3.3;
    HAL_ADC_Stop(&hadc1);
        
    Total+=AD_Value;
        
    osDelay(10);
    }
    
Voltage = Total/10.0;                                            //计算热敏电阻实时电压
    
Rntc = (3.3-Voltage)*10/Voltage;        //计算热敏电阻实时阻值

temp = Get_Temperature(Rntc) * 10;        //转换温度

 

发表回复

后才能评论