1. 温度传感器基础认知
第一次接触温度传感器是在2015年做智能温室项目时,当时为了监测大棚内的温度变化,试遍了市面上常见的几种传感器。温度传感器看似简单,但选型和实际应用中藏着不少门道。
温度传感器的核心作用是将温度这一物理量转换为可测量的电信号。根据测量原理不同,主要分为接触式和非接触式两大类。接触式需要与被测物体直接接触,比如常见的DS18B20、PT100;非接触式则通过红外辐射测量,像工业上用的红外测温仪。
新手最容易犯的错误就是忽略传感器的测量范围。有次我用DS18B20测烤箱温度,结果超过125℃后读数直接飘了,后来才发现它的上限就是125℃。
2. 主流温度传感器深度对比
2.1 数字式传感器
DS18B20是我最常用的数字温度传感器,优势非常明显:
- 单总线通信,接线简单(VCC、GND、DATA三线制)
- 测量范围-55℃~+125℃,精度±0.5℃
- 每个器件有唯一64位地址码,支持一线多设备
但实际使用中发现几个坑:
- 供电电压必须稳定在3.0~5.5V,有次用3.3V系统供电,长距离传输时数据经常出错
- 响应速度较慢,转换12位精度需要750ms
- 塑料封装型号(TO-92)的导热性差,测量空气温度时有明显延迟
arduino复制// Arduino读取DS18B20示例代码
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
sensors.begin();
}
void loop() {
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
Serial.print("Temperature: ");
Serial.println(tempC);
delay(1000);
}
2.2 模拟输出传感器
LM35是经典的模拟温度传感器,输出电压与摄氏温度成线性关系(10mV/℃)。它的优势在于:
- 无需校准,出厂精度可达±0.5℃
- 工作电压范围宽(4V~30V)
- 静态电流小于60μA,适合电池供电场景
但要注意:
- 输出阻抗高,必须用运放做缓冲才能长距离传输
- 测量负温需要双电源供电
- 引脚定义容易接反(有次我烧了三个才发现)
2.3 热电偶与RTD
在工业现场,PT100和K型热电偶才是主力军:
| 类型 | 测量范围 | 精度 | 特点 |
|---|---|---|---|
| PT100 | -200℃~850℃ | ±0.1℃ | 线性度好,需三线制接线 |
| K型热电偶 | -200℃~1372℃ | ±1.5℃ | 耐高温,需冷端补偿 |
去年给钢厂做温度监测系统时,发现几个关键点:
- PT100必须用恒流源驱动,普通分压电路误差极大
- 热电偶信号仅几mV,需要仪表放大器(如AD620)进行放大
- 工业现场一定要用屏蔽双绞线,否则50Hz工频干扰会让读数跳变
3. 温度测量系统设计要点
3.1 信号调理电路
模拟温度传感器的输出通常需要调理:
- 对于LM35这类输出微弱的传感器,建议使用非反相放大电路
- 热电偶必须配合冷端补偿电路(可用DS18B20测环境温度)
- 工业场景要加RC滤波,截止频率建议设1~10Hz
circuit复制[Vcc]---[R1]---+
|
[LM35]
|
[GND]----------+
3.2 软件滤波算法
实测中发现,即使硬件设计完善,温度读数仍会有波动。推荐几种有效的软件滤波方法:
- 移动平均滤波:适合周期性采样
c复制#define FILTER_SIZE 5
float tempBuffer[FILTER_SIZE];
float movingAverage(float newVal) {
static int index = 0;
tempBuffer[index] = newVal;
index = (index + 1) % FILTER_SIZE;
float sum = 0;
for(int i=0; i<FILTER_SIZE; i++) {
sum += tempBuffer[i];
}
return sum / FILTER_SIZE;
}
- 一阶滞后滤波:适合响应速度要求不高的场合
c复制float a = 0.2; // 滤波系数
float lastTemp = 0;
float lowPassFilter(float newVal) {
lastTemp = a * newVal + (1-a) * lastTemp;
return lastTemp;
}
3.3 校准与标定
即使高精度传感器,长期使用后也会出现偏差。我的校准经验:
- 冰水混合物法:用纯净水冰块混合体作为0℃基准
- 沸水法:海拔不同沸点不同,需根据当地气压修正
- 专业恒温槽:精度可达±0.01℃,但设备昂贵
校准DS18B20时发现,同一批次传感器在25℃时最大相差0.8℃,说明出厂精度仅供参考
4. 典型应用场景解析
4.1 智能家居温控系统
去年给别墅做的地暖控制系统,核心需求:
- 多点测温(每房间2个传感器,防局部误差)
- 快速响应(采用DS18B20+1秒采样间隔)
- 冗余设计(主备传感器温差超2℃触发报警)
系统架构:
code复制[DS18B20] --1-Wire--> [STM32] --Modbus--> [触摸屏]
|
[继电器]---> [地暖]
4.2 工业设备温度监测
注塑机温度监测项目中的教训:
- 热电偶必须用陶瓷套管保护,普通特氟龙线芯在200℃下三个月就老化
- 信号线必须远离变频器动力线,否则EMC干扰会导致读数跳变30℃+
- 关键测温点要双重冗余,我们采用PT100+热电偶并联
4.3 农业大棚监测
实际部署中发现:
- 传感器要避免阳光直射,否则读数偏高5℃以上
- 建议距地面1.5米(作物生长层高度)
- 湿度>90%时,DS18B20的塑料封装可能结露影响测量
5. 常见故障排查指南
根据多年维修经验,整理出温度传感器故障树:
-
读数异常高/低
- 检查供电电压(万用表实测)
- 确认传感器类型与代码匹配(有次把LM35当DS18B20读)
- 检查导线电阻(PT100的长导线会引入误差)
-
数据跳动大
- 增加硬件滤波电容(0.1μF陶瓷电容并联)
- 检查接地是否良好(数字传感器特别敏感)
- 降低采样速率(DS18B20在12位分辨率时需750ms稳定)
-
通信失败
- 检查上拉电阻(1-Wire总线需要4.7kΩ上拉)
- 缩短导线长度(超过30米建议用RS485转换)
- 排查总线冲突(多个DS18B20时地址可能重复)
最近帮客户调试时遇到个典型案例:PT100测量值比实际低15℃,最后发现是接线盒进水导致线路间漏电。用兆欧表测线间绝缘电阻只有2MΩ,更换防水接线盒后恢复正常。
6. 温度传感器选型决策树
根据项目需求选择传感器时,我通常这样考虑:
-
测量范围
- -50℃~150℃:DS18B20/LM35
- 200℃以上:热电偶或PT100
- 超高温(>1000℃):红外或特殊热电偶
-
精度要求
- ±1℃足够:K型热电偶
- ±0.1℃需求:PT100+专用变送器
- 实验室级:铂电阻温度计(SPRT)
-
环境因素
- 潮湿环境:选密封封装型号
- 振动场合:用铠装传感器
- 防爆区域:选本安型产品
-
预算限制
- 低成本:DS18B20(<10元)
- 中等预算:PT100+变送器(约200元)
- 不计成本:Fluke专业温度校准器
最后分享一个省钱技巧:批量采购DS18B20时,要特别测试0℃和100℃两个点的精度。有次我买了100个,实测有15个在这两个温度点偏差超过1℃,后来供应商同意更换。温度传感器看似简单,但细节决定测量成败。