MLX90614红外测温模块使用

这篇具有很好参考价值的文章主要介绍了MLX90614红外测温模块使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、MLX90614介绍(官方介绍,很官方)

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

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

二、工作原理

        MLX90614红外测温模块使用 

        MLX90614有MLX81101红外热电堆传感器和包括含有稳压电路、低噪声放大器、A/D转换器、DSP单元、脉宽调制电路及逻辑控制电路的MLX90302信号处理芯片构成。

  其工作原理为:红外热电堆传感器输出的温度信号经过内部低噪声、低失调的运算放大器(OPA)放大后经过A/D转换器(ADC)转换为17位数字信号通过可编程FIR及IIR低通数字滤波器(即DSP)处理后输出,输出结果存储在其内部RAM存储单元中。

  MLX90614中有两个存储器,分别为EEPROM和RAM。

  MLX90614中共有32个字长为16位的EEPROM存储单元,其地址为000H—01FH。

  EEPROM中所有的寄存器都是可以通过SMBus进行读取,但只有部分寄存器是可以进行改写的(地址为0x00, 0x01, 0x02, 0x03, 0x04, 0x05*,0x0E, 0x0F, 0x09)。可改写部分如左表所示。

  Tomax和Tomin是设定的测量物体温度上、下限,Ta范围即环境温度范围。

  其测量温度上限计算方法为:Tomax=100×(To MAX+273.15),通过计算将结果写入000H;温度下限计算方法与上限计算方法一样,将计算结果写入001H。

  MLX90614中总共有32个17位的RAM存储单元,用户不能通过RAM来写入数据,只能读取RAM中的部分存储单元读取16位存储数据。其采集的环境温度数据保存在地址006H存储单元中,采集的被测物体温度数据存储在007H存储单元中。因此运用存储在RAM地址中的数据,通过公式的计算,可以得到环境温度Ta及被测物体温度数据To。

1、IIC协议主从机通信步骤:

        IIC主从机之间通讯步骤如下:
        a:主机发送一个起始位通知从机就位。

        b:主机发送从机地址和读写标志位(写标志位为0,读标志位为1)。标志位在最低位

        c:   从机给主机回复响应(ACK)。

        d:   如果是写模式,主机发送一字节数据等待从机响应,主机收到响应之后如果还有数据要发就继续发送第二段数据等待响应……直到发送完成

        e:如果是读模式,此时主机STM32读取从机发来的数据,并给从机响应,如果从机还有数据要发送(接着汇报第二段),主机接着读取然后发送响应给从机…

        f:主机给从机一个停止信号

 2、读器件图

MLX90614红外测温模块使用

                                            上面这张图是方便下面读写的阅读和理解

MLX90614红外测温模块使用

 首先发送一个起始位,然后主机发送从机地址0x00和写标志位0,一共是8位。发送完成后等待从机响应应答信号,然后发送读取地址的命令(0x07),继续等待应答信号,接收到后重复起始位,然后主机发送从机地址0x01和读标志位1,继续等待应答信号,接收到后获取接受低位和接收高位(这里是主机向从机发送应答信号),在接受出错数据包(PEC),主机发送应答信号,最后主机再发送一个停止信号即可。

 3、写器件图

MLX90614红外测温模块使用

 首先发送一个起始位,然后主机发送从机地址0x00和写标志位0,一共是8位。发送完成后等待从机响应应答信号,然后发送读取地址的命令(0x07),继续等待应答信号,收到后获取接受低位和接收高位(这里是从机向主机发送应答信号),在接受出错数据包(PEC),最后主机再发送一个停止信号即可。

4、数据传输时序图

MLX90614红外测温模块使用

a:起始信号--在SCL为高电平期间SDA发生下降沿跳变产生起始信号 

b:应答信号--在SCL为高电平期间SDA保持低电平为应答信号

c:非应答信--在SCL为高电平期间SDA保持高电平为非应答信号

d:结束信号--在SCL为高电平期间SDA发生上升沿跳变产生停止信号

e:数据信--在数据传输期间,SCL 为高电平期间,如果 SDA 为高电平则代表二进制1,同理,SCL 为高电平期间,如果SDA 为低电平则代表二进制 0

三、编写代码(根据时序图来写)

1、开始标志代码(起始信号)

void SMBstart()//SMB发送开始标志
{
   //开始由高到低的跳变
   SDA_H;
   delay_us(10);
   SCL_H;
   delay_us(10);
   SDA_L;
   delay_us(10);
   SCL_L;
   delay_us(10);
}

2、停止标志代码(结束信号)

void SMBstop()//SMB发送停止标志
{
   //由低到高的跳变
   SCL_L;
   delay_us(10);
   SDA_L;
   delay_us(10);
   SCL_H;
   delay_us(10);
   SDA_H;
   delay_us(10);
}

3、发送一个字节

void SMBsend(u8 buf)//SMB发送一个字节
{
  u8 i=0; 
	for(i=0;i<8;i++)
    {
        SCL_L;

        if((buf&0x80)==1)        //buf&1000 0000
        {SDA_H;}
        else
        {SDA_L;};

        buf<<=1;
        delay_us(10);

        SCL_H;
        delay_us(10);
        SCL_L;
        delay_us(10);
	}
}

发送一个字节也就是8个bit位,我们循环8次,每次将最高位发送出去,之后再通过buf<<=1;左移一位把最高位移出去等待下一个最高位,循环8次,每次都发最高位,就可把一个字节发出去了。

4、接收一个字节

u8 SMBread()//SMB接收一个字节
{
	u8 buf = 0;
	u8 i;
    for(i=0;i<8;i++)
    {
        SCL_L;
        delay_us(10);
        SDA_H;
        delay_us(10);
        SCL_H;
        delay_us(10);
        buf<<=1;
				Iic90614_Mode(GPIO_Mode_IPU);            //设置为上拉
        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) == 1){buf|=0x01;};
				Iic90614_Mode(GPIO_Mode_Out_OD);        //设置为推挽
        delay_us(10);    
    }
	delay_us(10);
	SCL_L;
	delay_us(10);    
	SDA_L;            //拉低接收数据
	delay_us(10);
	SCL_H;
	delay_us(10);
	SCL_L;
	return buf;
}

从SMBus上接收一个字节也就是8位,我们也是用一个for循环将8各一次接受过来,if是为了判断我引脚是否是高电平(接收到了应答信号),是的话我们就将buf进行或位移(buf|=0x01),确保为1。

5、读取温度

short Temp_Get_Address(uint8_t address)//读取温度函数
{
	u8 SMBdataL=0;
	u8 SMBdataH=0;
	short SMBdata=0;

	//摄氏温度计算公式(T*0.02)-273.15
	SMBstart();//开始起始标志(写)
	SMBsend(0x00);//从机地址
	SMBsend(address);//发送读取地址命令

	SMBstart();//重复起始标志(读)
	SMBsend(0x01);
	SMBdataL = SMBread();//接收高位
	SMBdataH = SMBread();//接收低位
	SMBread();
	SMBstop();
	delay_us(10);
	SMBdata=(SMBdataH*256)+SMBdataL;
	SMBdata=SMBdata*2;
	SMBdata=SMBdata-27315;	//得到真实的温度值
	SMBdata/=10;
	return SMBdata;
}

 完全根据读器件来写,后面是温度的计算,获取摄氏度,然后其他程序调用这个接口。

6、最终温度值

int main()
{
    float temp;//温度获取存储变量

    temp =  Temp_Get_Address(0x07);//0x07是被测物体温度获取地址
	printf("%float\n",temp/10);//获取温度信息并且打印出来(串口调试助手打印)

}

以上就是我的理解,本人刚入行,有错误的地方欢迎大佬指正😀,虚心求学中--------文章来源地址https://www.toymoban.com/news/detail-464630.html

到了这里,关于MLX90614红外测温模块使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MLX90614红外温度计介绍

    MLX90614是一款红外非接触温度计。TO-39金属封装里同时集成了红外感应热电堆探测器芯片和信号处理专用集成芯片。 由于集成了低噪声放大器、17位模数转换器和强大的数字信号处理单元,使得高精度和高分辨度的温度计得以实现。温度计具备出厂校准化,有数字PWM和SMBus(系

    2023年04月08日
    浏览(40)
  • STM32实现MLX90614非接触测温串口显示(标准库与HAL库实现)

    目录 模块选择 编程环境  MLX90614基本原理 通信协议(SMBus通信,类IIC通信) 代码实现 STM32与模块之间接线表 1.标准库实现温度采集 2.HAL库实现温度采集 模块选择         ·STM32F103C8T6         ·MLX90614 非接触式红外测温传感器 编程环境         ·KEIL5(μVision V5.30.0.0) 其它

    2024年02月16日
    浏览(28)
  • LuatOS-SOC接口文档(air780E)--mlx90640 - 红外测温(MLX90640)

    常量 类型 解释 mlx90640.FPS1HZ number FPS1HZ mlx90640.FPS2HZ number FPS2HZ mlx90640.FPS4HZ number FPS4HZ mlx90640.FPS8HZ number FPS8HZ mlx90640.FPS16HZ number FPS16HZ mlx90640.FPS32HZ number FPS32HZ mlx90640.FPS64HZ number FPS64HZ 初始化MLX90640传感器 参数 传入值类型 解释 int 传感器所在的i2c总线id或者软i2c对象,默认为0 int

    2024年02月06日
    浏览(31)
  • 基于STM32的GY906红外测温

    本文实现了利用GY906红外测温模块检测温度。通过定时器中断取平均获得更优的温度曲线。 c文件 h文件 Temperature即为检测到的数据,精度还可以,只不过对于距离需要控制一下,大概5-10cm左右的距离。Temperature累加那里加上1.5000是增加1.5度的意思,这用于线性修正。我寻思我

    2024年03月10日
    浏览(34)
  • 基于STM32F1和MLX90640的红外热像仪

    STM32F103RCT6使用IIC接口与MLX90640采集数据,采集数据后使用LCD将温度转换为像素点输出到TFT-LCD屏幕,温度达到指定数值自动蜂鸣器报警,使用按键关闭报警声,源码文件文末自取。 默认参数时,MLX90640的工作流程如下: (1)上电,内部初始化(约40ms) (2)读取工作参数到控制

    2024年02月02日
    浏览(33)
  • 免费开源51单片机个人课程设计--基于stc89c52及红外遥控的测温智能电风扇

    51单片机个人课程设计–基于stc89c52及红外遥控的测温智能电风扇 个人学校的课程设计-智能电风扇,包含proteus原理图与源代码。 代码部分由我个人写的也有普中实验中的代码块。 3.1 硬件设计 主要器件: 单片机 AT89C52 红外接收 HS0038 LCD1602 温度测量 DS18B20 驱动集成芯片 L298

    2023年04月10日
    浏览(46)
  • 红外模块使用介绍

    产品参数: 1、当模块检测到 前方障碍物信号 时,电路板上 绿色指示灯点亮 ,同时 OUT端口 持续输出 低电平 信号,该模块检测距离2~30cm,检测角度35°,检测距离可以通过电位器进行调节,顺时针调电位器,检测距离增加;逆时针调电位器,检测距离减少。 2、传感器主动

    2024年02月03日
    浏览(34)
  • 循迹模式——红外循迹模块使用介绍

    红外循迹模块介绍 TCRT5000传感器的红外发射二极管不断发射红外线,当发射出的红外线 没有 被反射回来或被反射回来但强度不够大时,红外接收管一直处于 关断状态 ,此时 模块的输出端为高电平 ,指示二极管一直处于 熄灭状态 ; 被检测物体出现在检测范围内时,红外线

    2024年02月03日
    浏览(25)
  • 红外人体感应传感器SR602模块使用说明

    ​一.HC-SR602模块         红外人体感应传感器HC-SR602是基于红外线技术的自动控制模块,专用于感应周围人体的存在。该模块相较于HC-SR501,灵敏度较高,抗干扰能力大,且简单易用。 二.HC-SR602模块主要参数 工作电压:3.3V-15V; 静态电流:20uA; 感应距离:最大5M;建议0-

    2024年02月06日
    浏览(29)
  • 智能小车红外测速模块的使用方法(基于STM32的标准库)

    基于STM32标准库编程实现智能小车的红外测速所需掌握的知识: (1)外部中断的配置 (2)定时器的配置 (3)串口的配置 红外测速的核心思路 : (1)红外测速模通电后,会发出红外线,利用测速盘对红外线进行遮光,使测速模块连接STM32的中断引脚触发中断。每次发生中

    2024年02月04日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包