第3章 温度传感器选型:LM75、TMP102、MCP9808 谁更顺手?

做I2C温度传感器调试,第一步不是焊板子,也不是写驱动。

是选型。

你可能觉得这事儿离时序分析挺远的,选个芯片嘛,看谁便宜用谁呗。说实话,我刚开始做项目也是这种想法,结果在产线吃过好几次亏。有一次选了某款入门级传感器,结果它的转换时间太长,主控那边等不到数据直接报错,整批板子需要改软件。从那以后,我特别重视选型阶段的参数核对。

选对了,调试能省一半的时间。选错了,哼,等着加班吧。

三个主流选手:LM75、TMP102、MCP9808 概览

我不打算把市面上几十款I2C温度传感器全列出来,咱没那时间和篇幅。我把三个最常用、也最容易拿到手的挑出来,仔细说说。

  • LM75 (NXP/TI):老牌传感器,稳定,便宜。但我建议你注意它的分辨率——只有9位,0.5°C的步进。这放到很多场合都不够看。
  • TMP102 (TI):我经常在小型物联网设备里用它。12位分辨率,精度不错,而且封装小,DFN封装省地儿。
  • MCP9808 (Microchip):这个我比较偏爱。16位分辨率,精度能到±0.25°C (典型值)。它还有专门的临界温度寄存器,这玩意儿对做保护逻辑非常有用。

 

核心参数的差异对比

选传感器,你要看的参数就这几样:分辨率、精度、转换时间、I2C地址、供电电压。我做成了一张表,看着更清楚。

参数 LM75 TMP102 MCP9808
分辨率(位) 9 12 16
最小步进 0.5°C 0.0625°C 0.0078125°C
典型精度 ±2°C ±0.5°C ±0.25°C
转换时间 ~100ms ~26ms ~120ms (可配置快速模式)
I2C地址数 8个 (通过AD0/AD1) 4个 (通过ADD0) 28个 (通过A0-A2)
工作电压 2.8V - 5.5V 1.4V - 3.6V 2.7V - 5.5V
典型封装 SOP-8 SOT-563 DFN-8

你看,LM75的9位分辨率,说白了就是误差大。如果你只是判断环境有没有超过40°C,它够用。但如果你要做高精度的温补计算,16位的MCP9808几乎是唯一的选择。

分辨率和精度:别搞混了

我见过不少刚入行的硬件工程师把这两个概念弄混。你想想看,一个传感器有16位分辨率,不代表它测的温度就准。分辨率是说它能分辨多小的温度变化,精度是说它测的值离真实值有多近。

举个例子:

MCP9808分辨率为16位,能感知0.0078°C的温度变化。但它的精度只有±0.25°C。别指望它能读出小数点后三位的温度,那只是相对变化更敏感而已。

为什么会这样?因为温度传感器的精度更多取决于芯片内部的基准电压漂移和封装应力,而不是ADC位数。

我在项目中遇到过这样的场景:客户要求温度控制误差在±0.1°C以内。我一看,TMP102只能测到0.0625°C步进,而且精度只有±0.5°C,根本不能满足。最后换成MCP9808,再加一个软件滤波,才勉强达到要求。所以选型时,优先看精度,其次看分辨率。

I2C地址冲突:一个常见的坑

I2C总线是靠地址来区分设备的。如果两个设备地址一样,总线会乱套,数据根本读不出来。

不同传感器的地址设置灵活度差异很大:

  • LM75:只有两个地址引脚(AD0、AD1),最多8个地址。如果你总线上有多个LM75,还能勉强凑合。
  • TMP102:只有一个地址引脚(ADD0),只能配置出4个地址。说实话,这太少了。我做项目时总线上同时挂了TMP102和其他I2C设备,地址冲突是常有的事。解决办法是额外加一个I2C多路复用器,既浪费钱又占板子空间。
  • MCP9808:三个地址引脚(A0、A1、A2),最多28个地址。这是我最喜欢的。你可以同时挂8个甚至28个MCP9808在一条总线上,自由度极高。
避坑指南: 曾经有一个项目,我用了TMP102和另一个I2C EEPROM,它们的默认地址都是0x48。我一开始没注意,结果上电后读温度一直返回乱七八糟的数据。查了整整一天才发现是地址冲突。从那次之后,我每次选型都得先翻数据手册的最后一页,把所有I2C设备的地址列出来,确保没有重叠。

转换时间:直接影响你的采样周期

转换时间是传感器从启动测量到数据稳定、可以读取的时间。这个话题跟时序边界强相关。

  • LM75:典型的转换时间是100ms。这意味着你最快10Hz的采样率。要是你的主控需要1ms读一次数据,LM75完全做不到。
  • TMP102:快很多,典型值26ms。因为它的内部架构优化过,而且分辨率也高。
  • MCP9808:标称120ms。但是要注意,它有一种“快速转换模式”,可以把转换时间降到30ms以内,不过精度会略有下降。我觉得这个功能很实用,在需要快速响应的报警场景里很有用。
我的建议: 如果你的系统对温度实时性要求很高(比如电源管理、电机保护),尽量选转换时间短的传感器。TMP102或者MCP9808快速模式都可以。如果只是做环境监测,100ms的LM75完全够用,别为了追求速度去选又贵又复杂的芯片。

供电电压与电平转换

LM75和MCP9808都支持3.3V和5V供电,但TMP102只支持到3.6V。这事儿看似简单,但经常有人栽跟头。

我曾经在做一个5V主控的项目,随手就选了TMP102。结果上电时发现TMP102的数据手册上写着最大电压是3.6V。虽然勉强能承受5V,但长期工作会烧掉。最后无奈只能换回MCP9808,或者加一个电平转换器。

你想想看,电平转换器不仅增加成本,还额外引入信号延迟。对于高速I2C通信(400kHz甚至1MHz),那点延迟可能在时序上给你惹麻烦。

选型逻辑框架:该选哪个?

我根据自己这些年的调试经验,整理了一个选型流程图,你调试前可以照着走一遍。

传感器选型决策流程 开始选型 精度需求 > ±0.5°C? (如空调、环境监控) 是 否 MCP9808 16位 / ±0.25°C 继续判断:I2C地址冲突风险? 高(多条总线) 低(仅1-2个设备) MCP9808 或 LM75 地址引脚更多 / 兼容性好 TMP102 小封装 / 快速转换 转换时间要求 < 50ms? (如过温保护、快速响应) 是 否 MCP9808(快速模式) 转换时间可降至30ms LM75 或 其他通用型号 转换时间100ms即可满足

我的最终建议:

如果只想要最简单的测温: 用LM75。够用、便宜、稳定。但是要注意它的0.5°C步进,对精度要求苛刻的场合不要用。

如果要做电池供电、空间受限的物联网设备: 用TMP102。它小,快,功耗低。但注意留足I2C地址。

如果追求高精度、或者需要多挂很多个传感器: 直接上MCP9808。我最近一个工业温控项目,一条I2C总线上挂了8个MCP9808,工作非常稳定,时序调试也没遇到大麻烦。

嗯,说了这么多,核心就一句话:选型不是看谁参数高,而是看谁刚好满足你的场景。 把LM75用在-40°C的冷链监控里,它精度不够给力;把MCP9808用在一个简单的手环里,又显得大材小用。找准那个平衡点,后面的调试才能顺利。