KE4056电子积MLX90614非接触式红外测温传感器

 

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℃

尺寸:31.6mmx23.7mm

工作电压: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连接 IMG_256

在EEPROM配置为PWM,上电复位之后,PWM模式是自由运行的。PWM可配置为开漏NMOS方式或是推挽式输出方式。在开漏方式下,需要上拉电阻。

IMG_257

MLX90614可在EEPROM中配置为热动继电器工作模式。PWM/SDA引脚可配置为推挽式或是开漏式 NMOS,可以触发一个内部器件,例如转达,蜂鸣器,RF发射机或是 LED。该特性不需要任何 MCU 就可实现简单的恒温器,且没有开发固件的费用。结合使用 MCU,该功能可作为系统警报以唤醒 MCU。物体温度和传感器芯片温度都可通过该配置读取。

IMG_258

模块原理图

IMG_259

IMG_260

接线图

C:\Users\Administrator\Desktop\图\KE4056\QQ截图20211201155637.pngQQ截图20211201155637

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