第4章:热电堆探测器详解

各位工程师朋友,今天我们来聊聊热电堆探测器。说实话,这玩意儿在非接触测温领域里,算是最成熟、最皮实的技术之一了。我最早接触它是在做工业测温枪的项目,那时候选型踩了不少坑,今天把这些经验分享给你。

4.1 工作原理:塞贝克效应

热电堆的核心原理,说白了就是塞贝克效应。你想想看,两种不同的金属材料接在一起,如果两端温度不一样,就会产生电压。这个现象是1821年发现的,但真正用到探测器上,是近几十年的事。

具体到热电堆探测器,它内部其实是一堆热电偶串联起来。为什么要串联?因为单个热电偶产生的电压太小了,只有几微伏每摄氏度。串联起来,电压就叠加了。我见过一个典型的32对热电偶串联的探测器,输出能到几百微伏每摄氏度,这才勉强能用。

核心公式:

V_out = N × α × (T_hot - T_cold)

其中:N是热电偶对数,α是塞贝克系数,T_hot是热端温度,T_cold是冷端温度

嗯,这里要注意:热电堆测的是温差,不是绝对温度。所以它必须配合一个温度传感器来测量冷端温度,才能算出目标物体的真实温度。这个冷端补偿,是设计中的关键点。

4.2 典型型号对比

市面上常见的热电堆探测器,我挑两个最有代表性的说说:MLX90614和TS305。

参数 MLX90614 TS305
输出接口 I²C / PWM 模拟电压
测温范围 -70°C ~ 380°C -20°C ~ 100°C
精度 ±0.5°C(典型) ±1.0°C
视场角 35° / 90° 可选 80°
内置冷端补偿
典型价格 ¥30-50 ¥8-15

我个人习惯,如果做消费级产品,比如额温枪、耳温枪,首选MLX90614。它内置了冷端补偿和数字接口,省去了很多外围电路。但如果你做的是工业批量测温,成本敏感,TS305加一个热敏电阻做冷端补偿,也能凑合。

避坑指南:

我曾经在一个项目中用了TS305,没注意它的视场角是80°,结果测出来的温度总是偏低。后来才发现,目标物体太小,背景温度干扰太大。所以选型时,视场角一定要和测量距离匹配。目标物体要填满探测器的视场,否则测不准。

4.3 应用场景

热电堆探测器最常见的应用,就是非接触测温。你想想看,疫情期间的额温枪,里面用的就是这玩意儿。还有工业上的高温炉测温、电力设备的过热检测、智能楼宇的人体感应,都是它的地盘。

  • 非接触测温:额温枪、耳温枪、工业测温枪
  • 工业测温:高温炉、管道温度监测、电机过热保护
  • 人体感应:智能灯控、安防报警、存在检测
  • 家电应用:微波炉、烤箱、电磁炉的温度控制

我记得有一次帮一个客户做工业烤箱的温度监测,烤箱内部温度高达300°C,热电偶根本放不进去。最后用了MLX90614,通过一个石英玻璃窗口测量,效果出奇的好。嗯,这里要注意,石英玻璃对红外线的透过率很高,普通玻璃就不行。

4.4 信号调理电路

热电堆的输出信号非常微弱,一般只有几十到几百微伏。所以信号调理电路是必须的。我画了一个典型的电路框图,你看看就明白了。

热电堆 前置放大器 (增益1000x) 低通滤波器 (截止频率10Hz) ADC (16位以上) MCU 冷端补偿传感器 冷端补偿信号

这个电路里,有几个关键点:

  1. 前置放大器:增益至少要1000倍,我一般用AD620或INA128这类仪表放大器,噪声低、共模抑制比高。
  2. 低通滤波器:热电堆信号变化很慢,截止频率设在10Hz左右就够了。太高了会把噪声放进来。
  3. ADC:至少16位,因为信号经过放大后,也就几百毫伏,分辨率不够的话,温度精度就没了。
  4. 冷端补偿:用热敏电阻或DS18B20测量探测器本身的温度,然后在软件里做补偿计算。

警告:

热电堆对电源噪声非常敏感。我曾经在一个项目里,电源纹波有50mV,结果测温误差达到了2°C。后来加了LC滤波和LDO,才把问题解决。所以,电源设计一定要干净,建议用低噪声LDO单独供电。

4.5 实战代码示例

下面是一个用Arduino读取MLX90614的简单代码。我习惯用Adafruit的库,封装得很好。

#include <Wire.h>
#include <Adafruit_MLX90614.h>

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

void setup() {
  Serial.begin(9600);
  Serial.println("MLX90614 测试程序");
  
  if (!mlx.begin()) {
    Serial.println("探测器未找到,请检查接线!");
    while (1);
  }
}

void loop() {
  // 读取目标温度和探测器自身温度
  float objectTemp = mlx.readObjectTempC();
  float ambientTemp = mlx.readAmbientTempC();
  
  Serial.print("目标温度: ");
  Serial.print(objectTemp);
  Serial.print(" °C, 环境温度: ");
  Serial.print(ambientTemp);
  Serial.println(" °C");
  
  delay(1000);
}

这段代码很简单,但有几个坑要注意:

  • I²C上拉电阻要加,我一般用4.7kΩ
  • 探测器离目标物体不要太远,建议10cm以内
  • 如果测量反射率高的物体(比如金属表面),误差会很大,需要做发射率补偿

小技巧:

如果你用MLX90614测量人体温度,记得把发射率设为0.98。默认是1.0,测出来会偏低0.3°C左右。我当初做额温枪时,就是没注意这个参数,校准了好几天才发现问题。

好了,热电堆探测器就讲到这里。下一章我们聊聊热释电探测器,那玩意儿和热电堆有点像,但原理完全不同。到时候再细说。


公众号:蓝海资料掘金营,微信deep3321