1 引言
红外体温枪测量高效而备受青睐,发展迅速。但目前市场上的红外体温计存在测量误差大、成本高等缺点,应用受到限制。因此本文提出了一种基于MLX90614的高精度便携式红外体温计。
红外测温传感器有很多,比如MLX90614、AMG8833,考虑到测温精度,本设计选择MLX90614。
MLX90614 是一款红外非接触温度计。TO-39金属封装里同时集成了红外感应热电堆探测器芯片和信号处理专用集成芯片。由于集成了低噪声放大器、17 位模数转换器和强大的数字信号处理单元,使得高精度和高分辨度的温度计得以实现。温度计具备出厂校准化,有数字 PWM 和 SMBus(系统管理总线)输出模式。续传送温度范围为-20-120 ˚C 的物体温度,其分辨率为 ±0.14 ˚C。

Figure 1‑1 MLX90614ESF-DAA
物体红外辐射能量的大小和波长的分布与其表面温度关系密切。因此,通过对物体自身红外辐射的测量,能准确地确定其表面温度,红外测温就是利用这一原理测量温度的。红外测温器由光学系统、光电探测器、信号放大器和信号处理及输出等部分组成。 光学系统汇聚其视场内的目标红外辐射能量,视场的大小由测温仪的光学零件及其位置确定。红外能量聚焦在光电探测器上并转变为相应的电信号。该信号经过放大器和信号处理电路,并按照仪器内的算法和目标发射率校正后转变为被测目标的温度值。
MLX90614 是由STATE MACHINE控制物体温度和环境温度的测量和计算。MLX81101 采集到的人体温度先与环境温度进行计算,然后经过低噪声低偏置增益可调斩波放大器放大,再经过ADC调制器转换成单一比特流,之后传输到 DSP 进行进一步处理,最后的结果通过 PWM 或 SMBus 模式进行输出。其中,通过 EEPROM配置的可编程有限脉冲响应数字滤波器和无限脉冲响应数字滤波器减少输入信号的带宽,以实现预期的信噪比和刷新率。有限脉冲响应数字滤波器的输出最终存储在内置 RAM 中。并将结果通过 PWM 或是SMBus模式输出。
该模块以81101热电元件作为红外感应部分。输出是被测物体温度(TO)与传感器自身温度(Ta)共同作用的结果,理想情况下热电元件的输出电压为:
Vir = A(To4 – Ta4)
其中温度单位均为 Kelvin, A 为元件的灵敏度常数。
目标温度和环境温度由 81101 内置的热电偶测定测量,从 81101 中输出的两路温度信号分别经内部 MLX90302 器件上高性能、低噪声的斩波稳态放大器放大再经一个 17-bit 的模数转换器( ADC)和强大的数字信号处理(DSP)单元后输出。
该系列模块的温度解析度可达 0.01°C,体积小巧,被测目标和环境温度能通过单通道输出,有两种输出方式: PWM 输出、可编程 SMBus 输出,适于多种应用环境,
通过 SMBus 编程可以更改模块 EEPROM 内的预设值并按照应用要求进行配置,并可以读出 EEPROM 内的配置信息;还可以读出模块 RAM 内温度等数据。
MLX90614 有适用于 3 伏和 5 伏电源操作的两种类型。由于 3 伏型其小于 2 毫安的电流消耗,它非常适用于手提装置和电池动力装置。为此,传感器也具有一个节能“休眠”模式,此时电流消耗可低于 2 毫安。对于 12 伏汽车电池直接供电的情况, 5 伏型包含的电子部件可与几个外部元件一起在较高电压下运行。
2 功能描述
红外体温枪测的核心功能如下:
- 基于额头测定体温,采用额温转体温算法校准了体温值
- OLED实时显示体温
- 通过蜂鸣器和LED提醒温度测量,不同的LED对应不同的温度值
3 MLX90614传输协议
MLX90614 的 SMBus 协议如下:

Figure 3‑1 SMBus 的数据包组成
3.1 读器件
读器件命令决定是读 RAM 或 EEPROM数据格式。

Figure 3‑2 读器件命令
3.2 写器件
写器件命令决定是写 RAM 或 EEPROM数据格式。

Figure 3‑3 写器件命令
3.3 数据传输时序
数据传输时序如下:

Figure 3‑4 数据传输时序
PWM/SDA 上的数据在 SCL 变为低电平 300n 后即可改变,数据在 SCL 的上升沿被捕获。16 位数据分两次传输,每次传一个字节。每个字节都是按照高位(MSB)在前,低位(LSB)在后的格式传输,两个字节中间的第九个时钟是应答时钟。
4 方案设计
4.1 硬件设计
4.1.1 系统硬件连接
红外体温枪以RA4M2主控芯片组为核心,由红外测温模块、蜂鸣器报警模块、OLED显示模块构成,通过MLX90614红外传感器测距传感器获取温度。

Figure 4‑1 红外体温枪硬件连接
4.1.2 MLX90614接口电路
MLX90614与MCU连接的硬件电路如下图所示。SCL、PWM/SDA 管脚直接连接MCU 的普通 I/O 口即可,由于 MLX90614的输入输出接口是漏级开路(OD)结构,需要加上拉电阻。多个 MLX90614 可以用于一个系统中,每个 MLX90614 对应一个不同地址,通过地址的不同而访问不同的 MLX90614,最多可以达到 127 个。

Figure 4‑2 MLX90614与MCU连接电路
通过 SMBus 将 MLX90614 的 RAM 与主控芯片N32G4FR连接起来,以读取其测得的温度。MLX90614 与N32 接口电路如上图所示。MLX90614只有四个引脚,即电源端 VDD,接地端 VSS,时钟信号输入端 SCL 和数字信号输入输出端 SDA。VDD与 3.3V 电源相连进行供电,为了确保 SDA 和 SCL 能够在总线空闲时都处于高电平状态,电路中设计了两个上拉电阻。为了使电流低于 1.3mA,阻值选用常用的 4.7K左右。
4.2 软件设计
4.2.1 软件架构设计
红外体温枪的软件基于FreeRTOS实现,其软件架构如下:

Figure 4‑3 红外体温枪软件架构
整个软件架构分为四层:Hardware、Driver、FreeRTOS Kernel、Application。
Hardware层:基础为外设有UART、I2C、GPIO,UART用于调试,I2C用于与外设通信。
Driver层:主要为上层应用提供驱动接口。
FreeRTOS Kernel层:FreeRTOS内容比较多,除了基础内核外,还包含了丰富的组件和第三方库,主
要包含以下组成部分:
- 基础内核:包括不可裁剪的最小内核和可裁剪模块。最小内核包含任务管理、内存管理、中断管理、异常管理和系统时钟。可裁剪模块包括队列、信号量、互斥量、软件定时器、任务通知、事件组。
- 内核增强:在内核基础功能之上,进一步提供增强功能,包括低功耗模式、cu的使用率、Trce事件跟踪、TCP/IP、CLI、POSIX等。
- 协议栈:提供的一系列独立于FreeRTOS内的库,只和标准C库相关。比如MQTT、JSON、HTTP等。
- 第三方组件:一般和具体应用场景相关的组件或者第三方提供的组件,比如GUI、为AWS IOT工特定的增值系服务等。
Application层:Application部分包含系统任务和用户自定义任务,用户自定义任务包含通信、调试、控制、算法等模块。“
整个软件的运行如下:

Figure 4‑4 红外体温枪运行流程
(1)硬件初始化
主要初始化按键、OLED、MLX90614等资源。
(2)OS初始化
该阶段主要进行OS任务启动
(3)任务运行阶段
- FreeRTOS和中断会配合运行各个任务,主要操作如下:+
- 中断会由用户或FreeRTOS内核触发,比如event/signal。
- 任务间信号量、互斥量等完成某项需求相互间需要同步等需求。:
- 任务需要与硬件外设进行打交道,或入或出。
4.2.2 LX90614温度获取
多个 MLX90614 可以用于一个系统中,通过地址不同区分器件,器件默认的地址为 5AH,因此在多 MLX90614 系统中,需要给每个 MLX90614 分配一个不同的地址,在只有一个MLX90614 的系统中, MLX90614 识别地址 00h,即在单个 MLX90614 系统中,可以使用该地址访问它。

Figure 4‑5 读写数据流程
发送和接收数据是以字节为单位进行的,程序流程如下图所示。每次发送一个字节(按位发送,发送 8 个位就是一个字节),然后就判断对方是否有应答,如果有应答,就接着发送下一个字节;如果没有应答,多次重发该字节,直到有应答,就接着发送下一个字节,如果多次重发后,仍然没有应答,就结束。接收数据时,每次接收一个字节(按位接收,接收 8 个位就是一个字节),然后向对方发送一个应答信号,然后就可以继续接收下一个字节。

Figure 4‑6 发送和接收字节流程图
从MLX90614 种读出的数据是 16 位的,由高 8 位( DataH)和低 8 位( DataL)两部分组成,其中RAM地址07H单元存储的是TOBJ1数据,数据范围从0x27AD到 0x7FFF,表示的温度范围是-70.01℃到+382.19℃。
从MLX90614 中读出的数据(DataH:DataL)换算为温度数据(T,单位为℃ )如下所示:
T= (DataH:DataL)*0.02-273.15
例如:DataH:DataL=0x27AD,代入式中 T=-70.01℃