简介

MLX90614 是一款红外非接触温度计。TO-39 金属封装里同时集成了红外感应热电堆探测器芯片和信号处理专用集成芯片。由于集成了低噪声放大器、17 位模数转换器和强大的数字信号处理单元,使得高精度和高分辨度的温度计得以实现。温度计具备出厂校准化,有数字 PWM 和 SMBus(系统管理总线)输出模式。作为标准,配置为 10 位的 PWM 输出格式用于连续传送温度范围为-20…120 ˚C 的物体温度,其分辨率为 0.14 ˚C。POR默认模式是SMBus输出格式 。

模块默认是SMBus输出格式 ,这里就用IIC来驱动mlx90614模块,IIC原理默认大家已经知道不详细讲,IIC使用的是STM32正点原子官方的文件,myiic.c,基本有以下几个函数

//IO操作函数
#define IIC_SCL    PBout(6) //SCL
#define IIC_SDA    PBout(7) //SDA
#define READ_SDA   PBin(7)  //输入SDA
//IIC所有操作函数
void IIC_Init(void);                //初始化IIC的IO口
void IIC_Start(void);               //发送IIC开始信号
void IIC_Stop(void);                //发送IIC停止信号
void IIC_Send_Byte(u8 txd);         //IIC发送一个字节
u8 IIC_Read_Byte(unsigned char ack);//IIC读取一个字节
u8 IIC_Wait_Ack(void);              //IIC等待ACK信号
void IIC_Ack(void);                 //IIC发送ACK信号
void IIC_NAck(void);                //IIC不发送ACK信号

MLX90614

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

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

TA是环境温度地址,Tobj1是物体温度低8位,Tobj2是物体温度高8位。
接下来就是总线协议,读写数据的操作流程图

读取数据取决于命令,根据你发送的命令,从EEPROM或RAM中读取数据,而写数据只能写入EEPROM,RAM是只读的。
以上两图还需结合下面图进行解读

所以一个基本的驱动流程就是

1.启动
2.主机发送mlx90614的地址
3.等待mlx90614响应
4.发送读取RAM还是EEPORM指令
5.重新启动
6.发送读取指令
7.等待mlx90614响应
8.接收mlx90614传回的低8位数据
9.主机接收完响应
10.接收mlx90614传回的高8位数据
11.主机接收完响应
12.接收mlx90614传回的校验位数据
13.主机接收完响应
14.停止

其中发送读取RAM还是EEPORM指令,有对应的操作码,前三位是命令,后5位是地址。

如发送0x07就是访问Tobj1的地址,从机会返回低8位数据。

数据获取与处理

了解了基本信息,基本的驱动流程后,就可以开始写驱动代码了,
几个基本的参数,mlx90614的地址默认位00h,读取RAM的地址0x07,采集参数指令0x01;代码如下

#include "mlx90614.h"
#include "IIc.h"u8 MLX90614_Data_receive(u8 Data[3])
{IIC_Start();//启动IIC_Send_Byte(0x00);//发送mlx90614从机地址if(IIC_Wait_Ack())//等待响应,响应返回0,程序继续往下执行,不响应返回1,终止程序return 0;IIC_Send_Byte(0x07);//发送读mlx90614Ram地址if(IIC_Wait_Ack())//等待响应return 0;IIC_Start();//重新启动IIC_Send_Byte(0x01);//发送数据采集指令if(IIC_Wait_Ack())//等待响应return 0;Data[0] = IIC_Read_Byte(1);//读取低位数据Data[1] = IIC_Read_Byte(1);//读取高位数据Data[2] = IIC_Read_Byte(1);   //读取校验数据IIC_Stop();//停止return 1;
}
u16 MLX90614_Data_Process(u8 Data[3])
{u16 temp;temp = (Data[1]<<8)+Data[0];//高位与低位结合temp = temp*2-27315;//将数据扩大100倍return temp;
}

完全跟具流程写逻辑。
最后简单的将处理的数据显示在TFT液晶屏上。

#include "delay.h"
#include "IIC.h"
#include "lcd.h"
#include "usart.h"
#include "mlx90614.h"int main()
{u8 Data[3] = {0};u16 temp;u8 buff[20];delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级uart_init(115200);      //串口初始化为115200IIC_Init();LCD_Init();POINT_COLOR=RED;//设置字体为红色while(1){if(MLX90614_Data_receive(Data))printf("数据获取正确\r\n");elseprintf("数据出错\r\n");temp = MLX90614_Data_Process(Data);sprintf((char*)buff,"LOW:%d",Data[0]);LCD_ShowString(30,100,200,16,16,buff);sprintf((char*)buff,"HIGH:%d",Data[1]);LCD_ShowString(30,120,200,16,16,buff);sprintf((char*)buff,"PEC:%d",Data[2]);LCD_ShowString(30,140,200,16,16,buff);sprintf((char*)buff,"temperature:%.2f",(float)temp/100);LCD_ShowString(30,170,200,16,16,buff);delay_ms(1000);}
}

最后成果:

希望对大家有所帮助

MLX90614红外温度模块驱动相关推荐

  1. 外设驱动库开发笔记13:MLX90614红外温度传感器驱动

    红外温度传感器一般用于非接触式的温度检测.在我们的系统中经常会有这样的需求.所以我们将其设计为通用的驱动库以备复用.这一篇我们将讲述MLX90614红外温度传感器驱动的设计与实现. 1.功能概述 ML ...

  2. HC-SR505红外感应模块驱动(STM32)

    一.前期准备 单片机:STM32F103ZET6 开发环境:MDK5.14 库函数:标准库V3.5 HC-SR505红外感应模块:淘宝有售 二.实验效果 三.驱动原理 这个模块比较简单,当有人靠近时候 ...

  3. STM32 单片机 GY-906 MLX90614 红外温度读取

    模块型号:GY-906-BAA,GY-906-BCC,GY-906-DCI BAA 测距是2cm BCC 测距是10CM DCI 测距是一米 资料网盘下载: https://pan.baidu.com ...

  4. 单片机蓝桥杯准备:温度模块

    51单片机的温度模块: main.c: #include"reg52.h" //头文件 #include"ds18b20.h" // 温度模块驱动 #inclu ...

  5. STM32驱动MLX90614红外测温模块

    简介:STM32F103C8T6驱动MLX90614红外测温模块源码介绍. 开发平台:KEIL ARM MCU型号:STM32F103C8T6 传感器型号:MLX90614 特别提示:驱动内可能使用了 ...

  6. 外设驱动库开发笔记12:TSEV01CL55红外温度传感器驱动

    有时候我们需要检测一些无法直接接触的器件的温度.为了实现这一需求,我们通常会选择红外温度传感器来实现这一功能.考虑到复用的问题,我们一般会将操作元器件的代码抽象为驱动函数以备调用.这里我们就来设计并实 ...

  7. MLX90614红外测温模块使用

    一.MLX90614介绍(官方介绍,很官方) MLX90614 是一款红外非接触温度计.TO-39 金属封装里同 时集成了红外感应热电堆探测器芯片和信号处理专用集成芯 片. 由于集成了低噪声放大器.1 ...

  8. Arduino - 驱动HC-SR501 人体红外感应模块

    参考文章: Arduino - 驱动HC-SR501 人体红外感应模块 Arduino 使用人体红外感应模块 HC-SR501 代码如下: /* Arduino 驱动HC-SR501 人体红外感应模块 ...

  9. 【LINUX驱动开发】AMG8833红外成像模块在HI3516上的应用

    文章目录 AMG8833介绍 内部框图 器件参数 点阵的排布顺序 原理图 内部寄存器 1.Power Control寄存器: 2.Reset寄存器: 4.Interrupt Control寄存器: 5 ...

  10. ESP32设备驱动-MLX90614红外测温传感器驱动

    MLX90614红外测温传感器驱动 1.MLX90614介绍 MLX90614 是一款用于非接触式温度测量的红外温度计.IR 敏感型热电堆检测器芯片和信号调节 ASIC 都集成在同一 TO-39 罐封 ...

最新文章

  1. i.MX6UL: i.MX 6UltraLite处理器 - 低功耗,安全,Arm® Cortex®-A7内核
  2. c与python的区别-对比平台--C和Python之间的区别
  3. orth--将矩阵正交规范化
  4. java单链表 提供增删改查_java实现单链表增删改查的实例代码详解
  5. 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)
  6. perl学习之:编译、执行与内存关系(转)
  7. 计算机语言中tc是什么,新人必须了解的几个TC常用语和脚本基础知识!
  8. php laravel实战项目,Laravel框架应用:7个实战项目
  9. matlab 机械动力学仿真,基于MATLAB的机器人动力学仿真与控制.PDF
  10. 20171205_Matlab求方差,均值,均方差,协方差的函数
  11. python能开发微信公众号吗_用python如何开发微信公共帐号?
  12. sa登录失败,错误代码18456
  13. lightoj1234——调和级数+欧拉常数
  14. postgresql:operator does not exist: text[] character varying[]
  15. Neo4j:一、CQL语句
  16. 深度剖析apachepdf下载_软件定义汽车趋势下的供应链趋势(17页可下载)
  17. python 如何计算平方、次方?平方根、方根?(math.pow()、math.sqrt())
  18. 5款用于办公的电脑软件
  19. WebSphere中com/env的资源影射设置
  20. pdf文件怎么压缩得更小?如何改变pdf文件的大小?

热门文章

  1. Android之多媒体视频的播放和录制
  2. C# 反双曲余弦函数
  3. tp5模型belongsTo和hasOne以及hasMany的区别与用法
  4. SolidWorks用鼠标中键控制模型的旋转、缩放和平移
  5. android apktool反编译,apktool反编译工具
  6. linux怎么查看hwaddr_linux下如何查看某个网卡当前使用的IP
  7. 常见电子元器件的分类与识别
  8. IT蚁族:蜗居和逃离
  9. 腾讯统一播放器 API 文档2.0
  10. 第三章:x264视频制作meGUI工具使用