非接触式红外测温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 的精度。
在这里插入图片描述
在这里插入图片描述

  • 硬件接口:
引脚说明
SCLI2C时钟线
SDAI2C数据线
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 状态机的寄存器中,状态机可以产生固定频率和一定占空比来表示测量的数据。
在这里插入图片描述

3.通讯协议

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

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

3.1 起始信号和停止信号

在这里插入图片描述

//发送起始信号
//时钟为高电平时,数据由高电平变为低电平。
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 数据传输时序

在这里插入图片描述
时钟线为高时读取数据。应答信号本身就是一位数据。

  • 获取应答示例
//获取应答信号
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;
}
  • 读取一字节数据示例
//读取一个字节数据
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;//默认收到0if(I2C1_SDAin)data|=0x01;Delay_Us(5);}I2C1_SCL(0);return data;
}

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

  • 发送应答示例
/***********发送应答信号**************************
**
**形参: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);
}
  • 发送一字节数据示例
//发送一个字节数据
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);//方便下一次数据收发
}

4.读取温度数据示例

  对该模块操作主要是看懂几个图。模块里有EEPROM和RAM两块,EEPROM里只有限定数目的地址是允许客户改写的。整个 EEPROM可通过SMBus接口读和写。
在这里插入图片描述
  RAM中不能写入数据,只能进行读取,并且只有有限数目是客户感兴趣的。
  TA是环境温度地址,Tobj1是物体温度低8位,Tobj2是物体温度高8位。
  读取数据流程如下:设备地址为0x0

在这里插入图片描述
  ①发送起始信号–>②设备地址+写使能(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);
}
  • 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];
}

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;
}

6.软件配置

在这里插入图片描述
在这里插入图片描述

6.1 温度获取与显示

  红外测温,实时显示温度数据。

  Lcd_Init();LCD_ShowPicture(56,32,128,128,(unsigned char *)gImage_wbyq);_LCD_DisplayFont(48,180,BRRED,24,0);_LCD_DisplayFont(48+24,180,BRRED,24,1);_LCD_DisplayFont(48+24*2,180,BRRED,24,2);_LCD_DisplayFont(48+24*3,180,BRRED,24,3);_LCD_DisplayFont(48+24*4,180,BRRED,24,4);_LCD_DisplayFont(48+24*5,180,BRRED,24,5);uint16_t data;float temp;char buff[200];/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */temp=MLX906_Read_Temp();printf("temp=%.1f\r\n",temp);snprintf(buff,sizeof(buff),"Temp:%.1f",temp);LCD_ShowStr(120-strlen(buff)/2*12,210,24,buff,RED,WHITE);Delay_Ms(500);}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/324223.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

imgaug库指南(四):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…

2024年某书最新x-s-common签名算法分析以及点赞api接口测试nodejs(2024-01-05)

2024年某书又更新了x-s-common算法&#xff0c;现在的版本是&#xff1a;3.6.8。这个签名算法现在是越来越重要了&#xff0c;许多接口都要用到。比如&#xff1a;评论&#xff0c;点赞等接口&#xff0c;没有这个算法采集不到数据。 一、chrome逆向x-s-common算法 1、x-s-comm…

AES加密数据:Python加密Java解密

总体步骤&#xff0c;分2步&#xff1a; 1.Python加密存入数据库 1.1 AES加密&#xff0c;CBC模式 1.2 秘钥Key 和 向量异或 IV 1.3数据加盐PKCS5Padding 1.4 Base64转码 2.Java解密API传前端展示 代码示例&#xff1a; 1.Python加密存入数据库 needAESText "需要…

NLP one-hot编码

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客\n&#x1f366; 参考文章&#xff1a;365天深度学习训练营\n&#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.co…

记录第一次在GitHub上面提交Issue

第一次在GitHub上面提交Issue&#xff0c;记录一下。 对着源码调了好久才发现&#xff0c;问题并不在程序而在模型&#xff08;虽然只是一个很小的问题&#xff0c;但是能够解决问题&#xff0c;并且做出了自己的一点小小贡献&#xff0c;还是很开心。嘻嘻&#xff0c;发博客记…

openlayer在地图上渲染图标无法操作地图问题

ol对于在地图上渲染图标&#xff0c;并且图标可以随着地图的缩放层级自适应&#xff0c;跟随地图移动&#xff0c;ol是提供了一个很好用的方法的---overlay 但会有一个问题&#xff0c;那就是当鼠标移入到该图标上后&#xff0c;就无法操作地图了&#xff0c;无论是双击放大、滚…

何谓跨境电商?跨境电商平台物流、金流、交易模式比较一篇搞懂

什么是跨境电商&#xff1f; 跨境电商的全名是跨境电子商务&#xff08;Cross Border E-Commerce&#xff09;&#xff0c;从字面上分为两个元素&#xff1a;「跨境」与「电子商务」&#xff1a; 跨境&#xff1a;指的是跨越国家与国家之间的边境 电子商务&#xff1a;指的是…

MySQL数据管理(一)

一、列类型 列类型指规定数据库中该列存放的数据类型 列类型分类 数值类型字符串类型日期和时间型数值类型 数值类型 字符串类型 日期和时间类型 MySQL允许“不严格”语法&#xff0c;任何标点符号都可以作为日期部分之间的间隔符&#xff0c;如“24-01-03”、“24.01.03”…

菜单显示博客页

结果图 难点及其实现 滚动条自定义&#xff1a; .card::-webkit-scrollbar { width: 4px;} .card::-webkit-scrollbar-thumb { border-radius: 8px; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); background: #666666; } .card::-webkit-scrollbar-thumb:hover { backgr…

Java 如何实现微信支付功能代码示例

微信支付是由中国的腾讯公司推出的一种移动支付方式。它允许用户通过在微信应用中绑定银行卡或其他支付方式来进行交易&#xff0c;包括在线购物、转账、付款码支付等。微信支付的特点包括便捷、安全、快速和全面&#xff0c;使用户可以随时随地完成交易。用户可以通过扫描商家…

openGauss + Datakit

openGauss Datakit 1. 简介1.1 openGauss1.2 Datakit 2. 环境准备2.1 支持系统2.2 安装包获取2.3 注意事项2.4 系统环境设置 3. openGauss 安装3.1 创建用户和组3.2 创建工作目录3.3 关闭HISTORY记录/关闭交换内存3.4 解压安装包3.5 安装3.6 启动数据库3.7 连接数据库3.8 添加…

Spring整合MyBatis项目代码示例

文章目录 Spring整合MyBatis项目代码示例1、创建如下结构的项目Spring_MyBatis2、在pom.xml文件中添加以下依赖并刷新maven3、在resources文件夹下添加spring等配置文件&#xff08;applicationContext.xml&#xff0c;db.properties&#xff0c;log4j.properties&#xff09;4…