2、传感器选型与原理:热敏电阻与红外传感器对比、MLX90614原理、I2C接口时序

各位同学,咱们今天聊聊体温计的核心——传感器。说实话,传感器选对了,项目就成功了一半。我见过太多方案,电路画得漂漂亮亮,结果传感器响应慢半拍,或者精度根本达不到医用级别,最后全得推倒重来。

体温测量这块,主流就两条路:接触式的热敏电阻非接触式的红外传感器。你想想看,一个是贴上去测,一个是隔空测,原理完全不同,适用场景也天差地别。

2.1 热敏电阻 vs 红外传感器:怎么选?

先说说热敏电阻。这东西说白了就是个对温度敏感的电阻。温度一变,阻值就跟着变。我早期做工业温度采集时,用的就是NTC热敏电阻,便宜又皮实。

但用在体温计上,有个硬伤——响应慢。你得紧贴着皮肤,等个几十秒才能稳定。给小孩测体温时,那叫一个费劲。而且它测的是体表温度,跟核心体温有偏差,需要做补偿算法。

红外传感器就不一样了。它捕捉人体辐射的红外能量,转成电信号。优点很明显:非接触、响应快、精度高。我去年做的一款额温枪,从对准到出数,不到1秒。

咱们用个表格对比一下,更直观:

对比项 热敏电阻 (NTC) 红外传感器 (MLX90614)
测量方式 接触式 非接触式
响应时间 5-30秒 0.1-1秒
精度 ±0.1°C (校准后) ±0.2°C (医用级)
成本 低 (几毛钱) 中 (十几到几十元)
抗干扰能力 强 (物理接触) 弱 (受环境温度影响)
PCB设计难度 低 (模拟电路) 中 (数字接口+布局)

我的建议:做家用体温计,直接上红外传感器。用户体验好太多了。如果是做工业级或者低成本方案,热敏电阻也能用,但要做好校准和补偿。

2.2 MLX90614 原理:它到底怎么工作的?

MLX90614 是 Melexis 公司的一款红外测温芯片。我最早接触它是在2016年,当时做智能家居项目,用它来检测人体存在。嗯,这芯片确实经典。

它的内部结构其实不复杂,就两大块:

  • 红外热电堆探测器:接收红外辐射,产生微弱的电压信号
  • 信号处理芯片:放大、滤波、ADC转换、温度补偿,最后输出数字信号

说白了,它把模拟前端最难搞的部分——微弱信号放大、环境温度补偿——全给你集成好了。你只需要通过I2C接口读数据就行。这大大降低了硬件设计的门槛。

它输出的温度数据分两种:

  • 物体温度 (To):你真正想测的人体温度
  • 环境温度 (Ta):传感器周围的环境温度,用于补偿

为什么会这样?因为红外传感器本身也会受环境温度影响。MLX90614内部有个温度传感器,实时监测环境温度,然后通过算法修正物体温度的读数。这个补偿算法是它精度的关键。

小技巧:在实际项目中,我习惯同时读取To和Ta两个值。如果Ta变化剧烈(比如从空调房走到室外),我会做软件滤波,避免温度跳变。

2.3 I2C接口时序:别让通信成为瓶颈

MLX90614 通过 I2C 接口与主控通信。I2C 这东西,看着简单,但坑不少。我曾经在一个项目里,因为上拉电阻选错了,导致通信时好时坏,查了两天才找到原因。

先看标准时序。I2C 就两根线:SCL(时钟)和 SDA(数据)。通信过程分几步:

  1. 起始条件:SCL高电平时,SDA从高变低
  2. 发送地址:7位设备地址 + 读写位
  3. 数据收发:每个字节8位,后面跟一个ACK应答位
  4. 停止条件:SCL高电平时,SDA从低变高

MLX90614 的默认 I2C 地址是 0x5A(7位地址,左移一位后是 0xB4)。读温度数据的典型流程如下:

// 伪代码示例:读取MLX90614的物体温度
// 1. 发送起始条件
I2C_Start();

// 2. 发送设备地址 + 写位 (0xB4)
I2C_SendByte(0xB4);
I2C_WaitAck();

// 3. 发送要读取的寄存器地址 (0x07 是物体温度RAM地址)
I2C_SendByte(0x07);
I2C_WaitAck();

// 4. 发送重复起始条件
I2C_RepeatedStart();

// 5. 发送设备地址 + 读位 (0xB5)
I2C_SendByte(0xB5);
I2C_WaitAck();

// 6. 读取两个字节数据 (高字节在前)
uint8_t high_byte = I2C_ReadByte(ACK);
uint8_t low_byte = I2C_ReadByte(NACK);

// 7. 发送停止条件
I2C_Stop();

// 8. 计算温度值 (单位: 0.02°C)
uint16_t raw_data = (high_byte << 8) | low_byte;
float temperature = raw_data * 0.02 - 273.15;  // 开尔文转摄氏度

注意:MLX90614 的 I2C 时钟频率最高支持 100kHz(标准模式)。别想着跑 400kHz 快速模式,我试过,数据会出错。另外,上拉电阻建议选 4.7kΩ,走线长度控制在 10cm 以内。

时序上还有个细节:重复起始条件。很多新手会在这里犯错,直接发停止再发起始。这样会导致总线释放时间不够,偶尔通信失败。一定要用重复起始,这是 I2C 协议允许的。

嗯,关于传感器选型和原理,今天就聊这么多。下一节咱们会深入 PCB 布局,重点讲 MLX90614 的电源滤波和模拟走线。到时候我会分享一个我踩过的坑——地线环路导致的温度读数漂移。