一、简介
热电偶(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; //转换温度
主题授权提示:请在后台主题设置-主题授权-激活主题的正版授权,授权购买:RiTheme官网
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。