基于STM32物联网开发板(3)--红外测温MLX90614

发布者:Changsheng520最新更新时间:2024-05-15 来源: elecfans关键字:STM32  红外测温  MLX90614 手机看文章 扫描二维码
随时随地手机看文章

1.MLX90614简介

MX90614是一款由迈来芯公司提供的低成本,无接触温度计。输出数据和物体温度呈线性比例,具有高精度和高分辨率。TO-39金属封装里同时集成了红外感应热电堆探测器芯片MLX81101(温度是通过PTC或是PTAT元件测量)和信号处理专用集成芯片MLX90302,专门用于处理红外传感器输出信号。用以阻碍可见光和近红外光辐射的光学滤波器(可传播长波)集成在封装内提供对环境和日光的免疫。滤波器的波长通带为5.5到14μm。由于集成了低噪声放大器、17位模数转换器和强大的数字信号处理芯片 MLX90302,使得高精度和高分辨度的温度计得以实现。一个附加的片上温度传感器用来测量芯片的温度。测量完两个传感器的输出后,对应的环境温度和物体温度被计算出。计算所得物体温度和环境温度存储在MLX90302的RAM单元,温度分辨率为0.01℃,并可通过两线 SMBus(系统管理总线)兼容协议接口(IIC与之兼容)(0.02℃分辨率)或是10位PWM(脉宽调制)输出模式输出。MLX90614出厂温度范围都进行过校准,传感器测量的温度为视场里所有物体温度的平均值。

MLX90614 系列模块是一组通用的红外测温模块。 在出厂前该模块已进行校验及线性化,具有非接触、体积小、精度高,成本低等优点。被测目标温度和环境温度能通过单通道输出,并有两种输出接口,适合于汽车空调、室内暖气、家用电器、手持设备以及医疗设备应用等。


MLX90614的出厂校准温度范围很广:环境温度-40 ~ 125 ˚C,物体温度-70 ~ 382.2 ˚C。传感器测量的温度为视场里所有物体温度的平均值。MLX90614 室温下的标准精度为±0.5ºC。医疗应用版本的传感器可在人体温度范围内达到±0.1ºC 的精度。

poYBAGRblbeAXnhOAACLoMUSvI4824.png?imageView2/2/w/1000pYYBAGRblcWAC9z9AAHVn0R1UtQ009.png?imageView2/2/w/1000

硬件接口:

引脚

说明

SCL

I2C时钟线

SDA

I2C数据线

VDD

电源3.3~5V

VSS

数字地GND

2 工作原理

MLX90614是由内部状态机控制物体温度和环境温度的测量和计算,进行温度后处理,并将结果通过PWM或是SMBus模式输出。ASSP支持两个IR传感器。 (MLX90614xAx只有一个IR传感器) IR传感器的输出通过增益可编程的低噪声低失调电压放大器放大,经过Sigma Delta调制器转换为单一比特流并反馈给 DSP做后续的处理。信号通过可编程的(用 EEPROM 实现)FIR和IIR低通滤波器以进一步减低输入信号的带宽从而达到所需的噪声特性和刷新率。IIR滤波器的输出为测量结果并存于内部RAM中,其中三个单元可被用到:一个是片内温度传感器(片上PTAT或PTC),其余两个为IR传感器。基于以上测量结果,计算出对应的环境温度Ta和物体温度To,两个温度分辨率都为0.01℃。Ta和 To可通过两种方式读取:通过两线接口读取RAM单元,(0.02℃分辨率,固定范围)或者通过 PWM 数字模式输出。(10位分辨率,范围可配置)测量周期的最后一步为:测量所得Ta和To被重新调节为PWM所需的输出分辨率,并且该数据存在PWM 状态机的寄存器中,状态机可以产生固定频率和一定占空比来表示测量的数据。

pYYBAGRbllCAHQsxAACXKmbx5FU288.png?imageView2/2/w/1000

3. 通讯协议

单片机与MLX90614红外测温模块之间通信的方式是“类IIC”通信,意思就是通信方式跟IIC通信方式很像但又不是IIC,它有另外一个名字叫做SMBus。SMBus (System Management Bus)是1995年由 intel公司提出的一种高效同步串行总线,SMBus只有两根信号线:双向数据线和时钟信号线,容许CPU与各种外围接口器件以串行方式进行通信、交换信息,既可以提高传输速度也可以减小器件的资源占用,另外即使在没有SMBus 接口的单片机上也可利用软件进行模拟。。MLX90614 SMBus时钟的最大频率为100KHz,最小为 10KHz。

poYBAGRblqKANhfnAADJvx_E_5U060.png?imageView2/2/w/1000

S 是起始信号,Sr是重发起始信号。
Rd读使能,Wr写使能。
A是应答,0为应答1为非应答(发送数据和读取数据都需要应答)。
P 是停止信号。
PEC是CRC-8的多项式 a X8+X2+X1+1。每个字节的最高有效位首先传送。

3.1 起始信号和停止信号

pYYBAGRbls2AL2vXAAF37spJ_0s618.png?imageView2/2/w/1000

//发送起始信号

//时钟为高电平时,数据由高电平变为低电平。

static void I2C1_Start(void)

{

I2C1_SDAout_Mode();//输出模式

    I2C1_SDAout(1);

I2C1_SCL(1);

Delay_Us(2);

I2C1_SDAout(0);

Delay_Us(2);

I2C1_SCL(0);//方便后续数据收发

    Delay_Us(1);

}

//停止信号

//时钟线为高电平时,数据线由低变高。

static void I2C1_Stop(void)

{

I2C1_SDAout_Mode();//输出模式

I2C1_SCL(0);

I2C1_SDAout(0);

Delay_Us(5);

I2C1_SCL(1);

Delay_Us(5);

I2C1_SDAout(1);

}

3.2 数据传输时序

7e80601ca5309a6615533913ef08e7c0_pYYBAGRblv2AKez5AABTWLmSslo585.png?imageView2/2/w/1000

时钟线为高时读取数据。应答信号本身就是一位数据。

(1)获取应答示例


//获取应答信号

static u8 I2C1_Wait_Ack(void)

{

u8 cnt=0;

I2C1_SDAIN_Mode();//配置为输入模式

I2C1_SDAout(1);

I2C1_SCL(0);//告诉从机,主机需要获取数据

Delay_Us(5);

I2C1_SCL(1);//从机数据发送完成,主机开始读取数据

while(I2C1_SDAin)

{

cnt++;

Delay_Us(5);

if(cnt>=100)return 1;

}

Delay_Us(5);

I2C1_SCL(0);//方便下一次数据收发

return 0;

}

(2)读取一字节数据示例


//读取一个字节数据

static u8 I2C1_Read_Byte(void)

{

u8 i=0;

u8 data=0;

I2C1_SDAIN_Mode();//配置为输入模式

for(i=0;i<8;i++)

{

I2C1_SCL(0);//告诉从机,主机需要获取数据

Delay_Us(5);

I2C1_SCL(1);//开始读取数据

data<<=1;//默认收到0

if(I2C1_SDAin)data|=0x01;

Delay_Us(5);

}

I2C1_SCL(0);

return data;

}

时钟线为低电平时发送数据。应答信号本身就是一位数据。

(3)发送应答示例


/***********发送应答信号**************************

**

**形参:u8 ack -- 0应答,1非应答

**

***************************************************/

static void I2C1_SendAck(u8 ack)

{

I2C1_SDAout_Mode();//输出模式

I2C1_SCL(0);//告诉从机,主机开始发送数据

  if(ack&0x01)

  {

    I2C1_SDAout(1);

  }

  else I2C1_SDAout(0);

Delay_Us(5);

I2C1_SCL(1);//告诉从机,主机数据发送完成

//方便下一次数据收发

Delay_Us(5);

I2C1_SCL(0);

}

(4)发送一字节数据示例


//发送一个字节数据

static void I2C1_Send_Byte(u8 data)

{

u8 i=0;

I2C1_SDAout_Mode();//输出模式

for(i=0;i<8;i++)

{

I2C1_SCL(0);//告诉从机,主机开始发送数据

if(data&0x80)I2C1_SDAout(1);

else I2C1_SDAout(0);

Delay_Us(5);

I2C1_SCL(1);//主机数据发送完成

data<<=1;

Delay_Us(5);

}

I2C1_SCL(0);//方便下一次数据收发

}


3.3 读取温度数据示例

对该模块操作主要是看懂几个图。模块里有EEPROM和RAM两块,EEPROM里只有限定数目的地址是允许客户改写的。整个 EEPROM可通过SMBus接口读和写。

poYBAGRbl6OAQaPAAAFeNtw_E4o715.png?imageView2/2/w/1000

RAM中不能写入数据,只能进行读取,并且只有有限数目是客户感兴趣的。

pYYBAGRbl72ADy5eAACXTT1MMhI956.png?imageView2/2/w/1000

TA是环境温度地址,Tobj1是物体温度低8位,Tobj2是物体温度高8位。
读取数据流程如下:设备地址为0x0

poYBAGRbl9OABmApAABl179Ux7w493.png?imageView2/2/w/1000

①发送起始信号-->②设备地址+写使能(0x0)+获取应答-->③发送读取温度命令(0x07)+获取应答-->④发送起始信号-->⑤设备地址+读使能(0x1)+获取应答-->⑥读取温度低8位+发送应答-->⑦读取温度高8位+发送应答-->⑧发送停止信号;


//读内存

uint16_t MLX906_ReadMemory(void)

{

    uint8_t Pec,PecReg,ErrorCounter;

    uint8_t TempL=0;

    uint8_t TempH=0;

    uint8_t arr[6];

    ErrorCounter=0;

    do

    {

        ErrorCounter++;

        if(ErrorCounter==10)

        {

            return 0;

        }            

        I2C1_Start();//起始信号

        I2C1_Send_Byte(0x00);//发送MLX90614地址

        I2C1_Wait_Ack();

        I2C1_Send_Byte(0x07);//发送读MLX90614 RAM地址

        I2C1_Wait_Ack();

        I2C1_Start();//重新启动

        I2C1_Send_Byte(0x01);//发送数据采集命令

        I2C1_Wait_Ack();

        TempL=I2C1_Read_Byte();//读取地位数据

        I2C1_SendAck(0);

        TempH=I2C1_Read_Byte();//读取高位数据

        I2C1_SendAck(0);

        Pec=I2C1_Read_Byte();//读取校验位

        I2C1_SendAck(0);

        I2C1_Stop();//停止信号

        arr[5]= 0x00;

        arr[4]= 0x07;

        arr[3]= 0x01;

        arr[2]= TempL;

        arr[1]= TempH;

        arr[0]= 0;

        PecReg=CRC_Calculation(arr);//计算CRC校验

    }while(PecReg!=Pec);

    return (uint16_t)((TempH<<8)|TempL);

}

2.2.4 CRC-8的多项式X8+X2+X1+1计算示例

//crc校验

uint8_t CRC_Calculation(uint8_t pec[])

{

    uint8_t crc[6];//存放多项式

    uint8_t BitPosition = 47;

    uint8_t shift;

    uint8_t i,j,temp;

    do

    {

        crc[5]=0;

        crc[4]=0;

        crc[3]=0;

        crc[2]=0;

        crc[1]=0x01;

        crc[0]=0x07;

        BitPosition = 47;

        shift = 0;

        i=5;

        j=0;

        while((pec[i]&(0x80>>j))==0 && i>0)

        {

            BitPosition--;

            if(j<7)

            {

                j++;

            }

            else

            {

                j= 0x00;

                i--;

            }

        }

        shift= BitPosition-8;

        while(shift)

        {

            for(i=5;i<0xFF;i--)

            {

                if((crc[i-1]&0x80)&&(i>0))

                {

                    temp=1;

                }

                else

                {

                    temp=0;

                }

                crc[i]<<=1;

                crc[i]+=temp;

            }

            shift--;

        }

        for(i=0;i<=5;i++)

        {

            pec[i]^=crc[i];

        }

    }while(BitPosition>8);

    return pec[0];

}

3.5 温度转换示例

环境温度Ta

传感器芯片温度是通过PTC或是PTAT元件测量的,传感器所有的状态和数据处理都是在片内进行的,处理好的线性传感器温度Ta存于芯片内存里。计算好的温度输出分辨率为 0.02 ˚C,传感器的出厂校准范围为40…+125 ˚C。在RAM单元地址006h中,2DE4h对应-38.2 ˚C (线性输出最低限度) ,4DC4h (19908d)对应 125 ˚C。通过下式将RAM内容转换为实际的Ta温度,结果是开尔文为单位。


环境温度:


Ta[°K]=Targe*0.02;


物体温度:


To[°K]=Targe*0.02;


转换为摄氏度计算方法为:


Temp=Targe*0.02-273.5;


//读温度

float MLX906_Read_Temp(void)

{

    return (float )MLX906_ReadMemory()*0.02-273.15;

}


pYYBAGRbmQeAOtQEABxHqtx-dIE329.png?imageView2/2/w/1000

关键字:STM32  红外测温  MLX90614 引用地址:基于STM32物联网开发板(3)--红外测温MLX90614

上一篇:基于STM32的300W无刷直流电机驱动方案
下一篇:基于STM32的空气处理机组DDC控制器设计

推荐阅读最新更新时间:2026-03-20 07:55

基于STM32物联网开发板(3)--红外测温MLX90614
1.MLX90614简介 MX90614是一款由迈来芯公司提供的低成本,无接触温度计。输出数据和物体温度呈线性比例,具有高精度和高分辨率。TO-39金属封装里同时集成了红外感应热电堆探测器芯片MLX81101(温度是通过PTC或是PTAT元件测量)和信号处理专用集成芯片MLX90302,专门用于处理红外传感器输出信号。用以阻碍可见光和近红外光辐射的光学滤波器(可传播长波)集成在封装内提供对环境和日光的免疫。滤波器的波长通带为5.5到14μm。由于集成了低噪声放大器、17位模数转换器和强大的数字信号处理芯片 MLX90302,使得高精度和高分辨度的温度计得以实现。一个附加的片上温度传感器用来测量芯片的温度。测量完两个传感器的输出后,
[单片机]
基于<font color='red'>STM32</font><font color='red'>物联网</font><font color='red'>开发板</font>(3)--<font color='red'>红外</font><font color='red'>测温</font><font color='red'>MLX90614</font>
51单片机MLX90614非接触红外测温程序
这个模块采用I2C通讯,只需要接两个上拉电阻,就可以了,还是很好用的。 单片机源程序如下: #include at89x52.h #include intrins.h //************************************ #define uint unsigned int #define uchar unsigned char #define Nack_counter 10 //************** 端口定义************** //LCD 控制线接口 uchar flag1; sbit RS=P0^7; sbit RW=P0^6; sbit LCDE=P0^5;
[单片机]
基于STM32单片机设计的红外测温仪(带人脸检测)
由于医学发展的需要,在很多情况下,一般的温度计己经满足不了快速而又准确的测温要求,例如:车站、地铁、机场等人口密度较大的地方进行人体温度测量。 当前设计的这款红外非接触式测温仪由测温硬件+上位机软件组合而成,主要用在地铁、车站入口等地方,可以准确识别人脸进行测温,如果有人温度超标会进行语音提示并且保存当前人脸照片。 1、 硬件选型与设计思路 (1). 设备端 主控单片机采用STM32F103C8T6,人体测温功能采用非接触式红外测温模块。 (2). 上位机设计思路 上位机采用Qt5设计,Qt5是一套基于C++语言的跨平台软件库,性能非常强大,目前桌面端很多主流的软件都是采用QT开发。比如: 金山办公旗下的-WPS,字节
[单片机]
基于<font color='red'>STM32</font>单片机设计的<font color='red'>红外</font><font color='red'>测温</font>仪(带人脸检测)
STM32开发板+机智云IoT+智能远程健康监护仪
摘要: 为了能让患者在家中长期地监测自身的各种生理参数,随时捕捉突发性心率失常,同时能将生理参数反映给医疗机构,方便医务人员用于指导和协助治疗,机智云开发者设计了一款基于单片机的智能远程多生理参数健康监护仪。通过血氧、脉搏和体温等数字信号采集模块采集原始数据,由单片机进行算法处理,在显示模块显示人体的血氧值、心率值和体温值等,用户还可通过按键配置生理参数的阈值报警、按键发送生理参数至云端。最后,与标准医用监护仪进行对比测试,验证了该设计的准确性与可行性。 1 总体框架 本设计的总体框架如图1 所示。 图1中, 监护仪采用以 ARM Cortex-M3 为内核 STM32 单片机作为核心处理单元, 分别将数字集成心率血
[单片机]
<font color='red'>STM32</font><font color='red'>开发板</font>+机智云<font color='red'>IoT</font>+智能远程健康监护仪
以C8051F340单片机为核心的红外测温系统设计
引言 螺旋装药过程中,经常会因为内部药品温度分布不均匀导致在装药过程中药品内出现气泡的现象,这严重影响了弹体内的药品质量和弹药参数。因此,本文希望通过设计一种温度监测系统来实现对腔体内药品温度检测,寻找装药过程中温度与药品质量之间的关系。由于装药机结构的特殊性,我们无法通过传统的接触测温法获取药品的温度。因此本文设计了一种基于红外测温方法的系统来实现对药品温度的实时检测。 1 时分复用原理 复用方法的设计主要依据TN9红外传感器的信号特征及接口特点,TN9红外温度传感器具有5个接口,其中电源和地不需要接到CPLD上,其余三个接口分别为低电平有效的TN9工作使能接口,工作在主模式的SPI时钟接口和数据接口。采用复用模式是只需通过设置
[单片机]
以C8051F340单片机为核心的<font color='red'>红外</font><font color='red'>测温</font>系统设计
基础测量仪器之影响可视红外测温仪的效果的因素有哪些?
基础测量仪器之影响可视红外测温仪的效果的因素有: ①环境溫度 应严苛依照可视红外测温仪的性能指标所标出的工作温度应用仪器设备,超出此范畴仪器设备数据误差可能扩大,乃至毁坏。当工作温度较高时,可应用风冷式、水冷散热设备或热手机套,热手机套可使仪器设备在达到200℃的自然环境下一切正常应用。 红外测温仪从一个自然环境取得另一个工作温度相距很大的自然环境中应用时,可能造成仪器设备精密度的临时减少,为获得理想化的温度测量結果,应将仪器设备在工作中当场置放一段时间(提议少三十分钟)使仪器设备溫度与工作温度做到均衡后再应用。 ②空气指数 浓烟、尘土和空气中的其他空气污染物及其不清理的镜片会使仪器设备不可以接受到考虑测量精度的充足红
[测试测量]
基础测量仪器之影响可视<font color='red'>红外</font><font color='red'>测温</font>仪的效果的因素有哪些?
ZLG“战疫”利器诞生—红外测温+人脸识别+身份验证
摘要:疫情发展给公共场所带来了人员出入体温监测与管理的双重考验,人工登记实现难度高且无法避免人流聚集。ZLG结合人脸识别和红外热成像测温技术,推出红外测温+人脸识别+身份验证系统化解决方案,助力复工复产。 背景概述 体温筛查是新冠肺炎疫情监测和病例发现的主要手段之一。随着各地陆续复工,写字楼、园区等上班场所和学校为测体温排起长队的现象多有出现。如何既能完成体温排查,实现园区安全管理,又能减少对人们正常工作生活的影响,以及避免因排队测温引起的病毒传播风险,成为社会复工过程中的一个重要需求。同时,在一些具有身份识别要求的特殊场所,如学校、居民小区,企业园区等,体温检测和门禁系统的联动也成为了当前的行业刚需。针对现有测温系统
[测试测量]
ZLG“战疫”利器诞生—<font color='red'>红外</font><font color='red'>测温</font>+人脸识别+身份验证
一种高精度红外测温系统的设计
  温度测量主要有两种方式:一种是传统的接触式测量,另一种是以红外测温为代表的非接触式测量。传统的温度测量不仅反应速度慢,而且必须与被测物体接触。红外测温以红外传感器为核心进行非接触式测量,特别适用于高温和危险场合的非接触测温,得到了广泛的应用。本文将详细介绍如何设计基于SOC级微处理器的高精度红外测温系统,及其在电力温度检测、设备故障诊断方面的应用。   1.红外测温仪的工作原理   自然界一切温度高于绝对零度的物体,都在不停地向外发出红外线。物体发出的红外线能量大小及其波长分布同它的表面温度有密切关系,物体的辐射能量与温度的 4 次方成正比,其辐射能量密度与物体本身的温度关系符合普朗克定律。因此我们通过测量物体辐射出的红外
[测试测量]
一种高精度<font color='red'>红外</font><font color='red'>测温</font>系统的设计
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved