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(数据)。通信过程分几步:
- 起始条件:SCL高电平时,SDA从高变低
- 发送地址:7位设备地址 + 读写位
- 数据收发:每个字节8位,后面跟一个ACK应答位
- 停止条件: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 的电源滤波和模拟走线。到时候我会分享一个我踩过的坑——地线环路导致的温度读数漂移。