1.概述
MLX90614是一款由迈来芯公司提供的低成本,无接触温度计。输出数据和物体温度呈线性比例,具有高精度和高分辨率。TO-39金属封装里同时集成了红外感应热电堆探测器芯片MLX81101(温度是通过PTC或是PTAT元件测量)和信号处理专用集成芯片MLX90302,专门用于处理红外传感器输出信号。用以阻碍可见光和近红外光辐射的光学滤波器(可传播长波)集成在封装内提供对环境和日光的免疫。滤波器的波长通带为5.5到14μm。由于集成了低噪声放大器、17位模数转换器和强大的数字信号处理芯片 MLX90302,使得高精度和高分辨度的温度计得以实现。一个附加的片上温度传感器用来测量芯片的温度。测量完两个传感器的输出后,对应的环境温度和物体温度被计算出。计算所得物体温度和环境温度存储在MLX90302的RAM单元,温度分辨率为0.01℃,并可通过两线 SMBus(系统管理总线)兼容协议接口(IIC与之兼容)(0.02℃分辨率)或是10位PWM(脉宽调制)输出模式输出。MLX90614出厂温度范围都进行过校准,传感器测量的温度为视场里所有物体温度的平均值。
2.规格参数
数字接口类型:IIC(从模式)或PWM
温度测量范围:-10℃~50℃
温度测量误差:±0.5℃ (室温下)分辨率0.02℃
工作电压:3.3V~5V
使用环境温度-40~125℃
感测物体距离:最大30cm
视角范围:90度
原理
上电复位后MLX90614为出厂默认输出方式SMBus,PWM 未使能。上电时SCL引脚需要保持高电平才能使用 PWM。如果PWM已使能,需要切换为SMBus, 在开始SMBus通信之前重新配置PWM/SDA引脚。需要将SCL引脚持续多于请求时间(tREQ) >1,44ms保持为低电平。此情形下SDA线上的数据被忽略。一旦PWM未使能,它只能通过切断-打开电源或是退出睡眠模式来使其使能。如果PWM是通过 EEPROM 未使能,PWM/SDA 引脚会在POR之后直接用于 SMBus 通信。该情况下不需要发送请求状态。从PWM或是热动继电器进入到SMBus模式的方式是相同的
MLX90614-SMBus连接
在EEPROM配置为PWM,上电复位之后,PWM模式是自由运行的。PWM可配置为开漏NMOS方式或是推挽式输出方式。在开漏方式下,需要上拉电阻。
MLX90614可在EEPROM中配置为热动继电器工作模式。PWM/SDA引脚可配置为推挽式或是开漏式 NMOS,可以触发一个内部器件,例如转达,蜂鸣器,RF发射机或是 LED。该特性不需要任何 MCU 就可实现简单的恒温器,且没有开发固件的费用。结合使用 MCU,该功能可作为系统警报以唤醒 MCU。物体温度和传感器芯片温度都可通过该配置读取。
模块原理图
接线图
5.测试代码
#include <i2cmaster.h>
void setup(){
Serial.begin(9600);
Serial.println(“Setup…”);
i2c_init(); //Initialise the i2c bus
PORTC = (1 << PORTC4) | (1 << PORTC5);//enable pullups
}
void loop(){
int dev = 0x5A<<1;
int data_low = 0;
int data_high = 0;
int pec = 0;
i2c_start_wait(dev+I2C_WRITE);
i2c_write(0x07);
// read
i2c_rep_start(dev+I2C_READ);
data_low = i2c_readAck(); //Read 1 byte and then send ack
data_high = i2c_readAck(); //Read 1 byte and then send ack
pec = i2c_readNak();
i2c_stop();
//This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps
double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614)
double tempData = 0x0000; // zero out the data
int frac; // data past the decimal point
// This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte.
tempData = (double)(((data_high & 0x007F) << 8) + data_low);
tempData = (tempData * tempFactor)-0.01;
float celcius = tempData – 273.15;
float fahrenheit = (celcius*1.8) + 32;
Serial.print(“Celcius: “);
Serial.println(celcius);
Serial.print(“Fahrenheit: “);
Serial.println(fahrenheit);
delay(1000); // wait a second before printing again
}
6.实验说明
在实验中,我们需要先把编码器的库 MLX90614_master导入到我们的IDE库文件夹中,不然编译不过。
7.测试结果
按照接线图,接好线,上传好代码,上电后,打开串口监视器,设置波特率为9600,把手靠近模块的感应处,监视串口显示当前物体的温度(摄氏度和华氏度),如下图。
8.资料下载
Arduino IDE/Mixly/Scratch编程使用资料下载链接
链接:https://pan.baidu.com/s/1CKn9uleZznWFGwNQDFWXeA
提取码:keye