MLX90640开发笔记(三)工作流程和操作MLX90640的一般步骤

默认参数时,MLX90640的工作流程如下:

(1)上电,内部初始化(约40ms)

(2)读取工作参数到控制和状态寄存器

(3)开始以2Hz的速率测量实时数据并更新到RAM,自动更新状态寄存器。

 

测量帧解释:

MLX90640共有768个测量像素点,每次测量其中的一半,称为1帧,故此完成768像素需要测量2帧,用帧0和帧1来表示。即:所谓的1帧数据其实是完整像素的一半。

 

可以修改的参数有以下几个方面:

  • 自动测量:默认为自动测量,即自动循环测量帧0和帧1更新到RAM中。与其对应的是手动测量,即:用指令来控制测量帧0还是帧1。手动测量已经在官方的数据手册中被删除,看来MLX也不喜欢别人用,所以我们也就别用了。自动测量保持默认值,不要改就好。
  • 帧分布:前面已经说了,1帧实际上是测量完成了一半的像素点,这一半像素有两种分布模式,手册上称为TV模式和Chess模式,TV模式以行为单位,是指每帧只测量奇数行或者偶数行,Chess模式是指以像素为单位,每次交错着像素测384个像素点。我们可以称之为“行交错模式”和“像素交错模式”。

在这方面,手册上又说了,出厂时是以Chess模式校准的,具有最好的精度(言下之意就是说如果修改为了TV模式时会不准),鉴于此,这个参数也不要动。

  • 测量分辨率:可选的有16~19位AD转换精度,默认是18位,转换位数当然是越高越好了,但18和19位经过测试也没有发现有什么实际区别,这个参数可改可不改。
  • 测量速率:每秒测量几帧数据,这个参数很有用处,毕竟我们希望成像后是连续的动画,每秒2次一定是不好的,我们可以调用API将这个参数修改为8Hz或者16Hz甚至32Hz,64Hz是不建议的,因为测量速率太快时噪声特别大,图像特别乱。普通相机的刷新速率也就15Hz左右,所以建议最高设置为16Hz吧。

所以,虽然数据手册上写的感觉好像可修改的参数挺多,这么一分析,其实只有1个测量速率是有用处的,其它都是浮云(鸡肋)。

 

参数修改方法讨论:

有两种修改方法,修改寄存器和修改EEPROM。

(1)修改寄存器(推荐)

传感器上电后会自动从EEPROM读取参数到寄存器,寄存器内的参数值是运行时实际执行的参数,直接通过I2C修改寄存器值即可,随用随改、立即生效。寄存器的值是掉电遗失的,所以每次上电后都要修改一次。

(2)修改EEPROM

EEPROM是掉电不丢失的,所以修改EEPROM内的运行参数只需要一次,下次启动生效。但EEPROM内存储的不仅只是同步到运行寄存器的几个参数,大部分的是768个像素的校准参数,这些参数是出厂时写入的,特别重要,所以我的建议还是不要对EEPROM有任何的写操作,以免发生意外,EEPROM里的像素校正参数一旦被意外修改就再也找不回来了。

 

MLX90640底层驱动Keil项目(STC单片机)下载:

https://download.csdn.net/download/xulikai/11845558

 

建议的操作流程

unsigned short EE[832];

unsigned short Frame[834];

paramsMLX90640 MLXPars;

float Vdd,Ta,Tr;

float Temp[768];

 

IIC_Init();                                               //I2C初始化

MLX90640_I2CInit();                          //MLX传感器初始化

Delay_ms(50);                                      //预留一点时间让MLX传感器完成自己的初始化

MLX90640_SetRefreshRate(0);       //测量速率1Hz(0~7对应0.5,1,2,4,8,16,32,64Hz)

 

MLX90640_I2CRead(0x2400, 832, EE);                     //读取像素校正参数

MLX90640_ExtractParameters(EE, &MLXPars);    //解析校正参数(计算温度时需要)

 

while (1)

{

         Delay_ms(5);

         if (MLX90640_GetFrameData(Frame)==0)      //有转换完成的帧

         {

                   Vdd=MLX90640_GetVdd(Frame, MLXPars);   //计算Vdd(这句可有可无)

                   Ta=MLX90640_GetTa(Frame, MLXPars);                  //计算实时外壳温度

                   Tr=Ta-8.0;         //计算环境温度用于温度补偿

//手册上说的环境温度可以用外壳温度-8℃

MLX90640_CalculateTo(Frame, MLXPars, 0.95, Tr, Temp);    //计算像素点温度

/*

         Temp数组内即是转换完成的实时温度值,单位℃

         可以在这里对得到的32*24=768个温度值进行处理、转换为颜色值、显示

         关于温度转颜色方法,在后续的文章中会有专门介绍

*/

}

}

一点疑问:校正参数存储于传感器内部的EEPROM,实时数据也来自传感器,如何利用实时数据和校正参数计算温度的方法也是事先规定好的,MLX为什么不直接在内部完成这个温度计算让用户直接读取温度值?为了体现这个传感器的复杂性或者是让用户有成就感吗?

本来可以在传感器内部解决的问题被厂家要求在外部完成,对MCU的性能要求是特别高的,大量的浮点运算,大量的RAM消耗,较低的效率。

 

MLX90640开发笔记(一)概述及开发资料准备
MLX90640开发笔记(二)API移植-I2C和关键接口函数
MLX90640开发笔记(三)工作流程和操作MLX90640的一般步骤
MLX90640开发笔记(四)损坏和不良像素的处理
MLX90640开发笔记(五)阵列插值处理-多项式插值由32*24像素到512*384像素
MLX90640开发笔记(六)红外图像伪彩色编码
MLX90640开发笔记(七)小结-注意事项
MLX90640开发笔记(八)扩展知识-辐射率、灵敏度、精度、探测距离
MLX90640开发笔记(九)EEPROM、RAM、寄存器说明
MLX90640开发笔记(十)成果展示-红眼睛相机

邮箱:INFO@GEO-INS.COM

  • 8
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
mlx90640是一款高分辨率红外成像开发模块,具有非常广泛的应用前景。我在使用这个模块进行开发过程中,总结了一些关键要点和经验。 首先,对于初次使用这个模块的开发者来说,最重要的是仔细阅读相关的文档和使用说明。这样可以帮助我们更好地了解模块的特性和使用方法。 其次,为了方便开发和调试,建议使用适当的开发板和开发环境。在我的开发过程中,我选择了一块基于Arduino的开发板,这个开发板与mlx90640模块兼容性较好,并且有许多现成的库和示例代码可以借鉴。此外,我还使用了基于Python的开发环境,通过串口通信和模块进行交互。 在编写代码时,应该注意正确地读取和解析传感器返回的数据。mlx90640模块采集到的数据是一个包含热像素温度值的二维数组,我们需要根据模块提供的数据格式和接口手册解析。在解析数据时,还需要注意数据的单位和数据的分辨率,尤其是在后续的数据处理和图像显示过程中。 最后,对于进一步开发和优化应用程序来说,我们可以考虑一些额外的功能和扩展。例如,可以通过模块的内置EEPROM存储功能来存储模块的校准数据,以提高测量的准确性。此外,我们还可以通过调整模块的配置寄存器来改变测量范围、帧率等参数,以满足不同的应用需求。 总而言之,mlx90640红外成像开发笔记主要包括阅读文档、选择合适的开发板和环境、正确解析数据以及优化应用程序等关键要点。这些经验对于顺利开发使用这个模块的人来说非常有帮助。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值