资讯详情

MLX90640 红外热成像传感器测温模块开发笔记(三)

MLX90640 红外热成像仪测温模块开发笔记(3)工作流程和操作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 单片机)下载

建议操作流程 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、2、4、8、16、32Hz)

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 消耗,效率低。

标签: ta3130温度传感器高精度红外传感器温度

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台