默认参数时,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

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

  1. MLX90640开发笔记(十)成果展示-红眼睛相机

    最终的成果是一个微型的USB接口红外成像模块(微型红外成像仪30*30mm),可以连接到Android手机或者计算机的USB接口,实时显示热像视频,和手机相机差不多,只不过它是热红外成像,所以叫&qu ...

  2. MLX90640开发笔记(六)红外图像伪彩色编码

    红外成像的最终目的是用图像来表现温度变化,并且可以通过颜色来区分出不同热量的物体轮廓和形状.那么,到底用什么颜色来表示什么温度呢?是否有什么标准规范呢? 这个问题一开始也是心里没底的,因为我不是专业做 ...

  3. MLX90640开发笔记(八)扩展知识-红外成像中的辐射率、灵敏度、精度、探测距离

    辐射率 是描述面辐射源特性的物理量.它表示某物体的单位面积辐射的热量和黑体在相同温度.相同条件下的辐射热量之比. 即:辐射率通俗的说就是某物体会将自身温度转换为辐射扩散出去的能力,1表示可以将自身温度 ...

  4. MLX90640开发笔记(一)概述及开发资料准备

    现在自己在做红外成像仪的越来越多了,两年前有个井下机电设备运行状态的科研项目,当时使用了AMG8833(8*8像素).前段时间因为公司生产电路板测试需要,打算买一台红外成像仪测量电路板发热是否正常,商 ...

  5. czh的开发笔记 - 微信朋友圈 - 模拟操作

    czh的开发笔记 - 微信朋友圈 - 模拟操作 这个爬虫效率极其低下,仅供学习参考使用 朋友圈爬虫简介 防喷 个人要求 环境配置(准备) 环境配置(安装) 工作原理 源码自提 源码展示与讲解 后记 这 ...

  6. 【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己:索引缓存的故事

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8304741 作者:毛星云(浅墨 ...

  7. ios开发 mvp实践_实践中开发人员的工作流程-我们如何在30天内建立​​MVP

    ios开发 mvp实践 by Léna Faure 莱娜·福雷(LénaFaure) 实践中开发人员的工作流程-我们如何在30天内建立​​MVP (The developer's workflow i ...

  8. 【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己 索引缓存的故事

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  9. 【Visual C++】游戏开发笔记三十三 浅墨DirectX提高班之二 化腐朽为神奇:DirectX初始化四步曲

    这篇文章里,我们将迈出精通DirectX的第一步,先了解典型Direct3D程序的书写流程,然后学习COM接口的对象的一些思想,然后按照"四步曲"的思路,系统地学习DirectX的 ...

最新文章

  1. HBASE_API的应用
  2. Linux core dump的详细介绍及使用
  3. python安装教程windows-Python for windows 安装教程
  4. CentOS 7源码安装httpd服务
  5. rust 编程入门_面向初学者的Rust –最受欢迎的编程语言入门
  6. php Hash Table(四) Hash Table添加和更新元素
  7. java 双重检查加锁弊端
  8. POJ3984 迷宫问题【BFS】
  9. 冒泡排序提前终止条件_“离职要提前30天通知”这9种误区,你踩过几个?
  10. c语言程序设计指针教学,C语言程序设计中指针教学要点分析
  11. 英国电信移除华为设备后,多家运营商继续与华为合作,并达成20亿英镑协议...
  12. 程序老鸟:软件测试的工资高还是开发者工资高?
  13. typedef 的使用
  14. Vue 生命周期学习心得(上)
  15. c 调用java map_如何从C中的map迭代器调用类成员函数?
  16. js动态显示实时时间
  17. c语言tc环境下while多大,求救,wintc环境下,写了程序,调试不出来,先谢谢了...
  18. 需求和设计阶段使用的IPO图
  19. 日语动词变形方法全解
  20. httprunner-2-linux下搭建hrun(下)

热门文章

  1. 大学计算机专业那些课
  2. 用计算机如何换成音乐,想知道怎么把电脑里的视频转换成mp3?用这招很简单!...
  3. 程序员心中的一道坎:主存的编址与计算和串并联系统!
  4. 日积月累的名典[2014-10-7]
  5. 关于蘑菇街的功能特色
  6. bootcss 向右向左
  7. python应用(1)两百行代码实现微信好友数据爬取与可视化
  8. 成为CTO,6个月被老板干死,我损失了1000万
  9. 浅论各种调试接口(JTAG、SWD、RDI、Jlink、Ulink、STlink)的区别
  10. 常说的一区二区含义是什么?