德国海曼HTPA 32x32d热成像传感器代替MLX90640之EEPROM数据读取和解析

EEPROM数据读取和解析

上一篇我们简单介绍了热成像传感器德国海曼的HTPA 32x32d,本文主要进一步介绍内部EEPROM数据读取和解析。

存储结构一览

首先,很简单的IIC总线协议写好,调试好,就像读普通EEPROM一样,能够访问器件就行了,下面是传感器规划的EEPROM内部存储结构,也就是说表示了传感器用到的各种变量和校准值怎么在EEPROM内部存储的,哪些地址表示哪些数据,只有搞清楚了这点,后面的数据解析以及数据计算和校准才能进行,所以这一步是整个传感器驱动的重中之重。
EEPROM结构
从以上数据可以看到数据主要有发射率、运行寄存器的参考值,表号,全局偏移量,各个像素点的偏移量,以及坏点的标记等各种数据。
值得一提的是坏点和不良像素点的记录,手册里提到传感器在出厂时允许有3个以下的坏点存在,所以如果运气不好的话可能拿到的传感器是有坏点的,那么怎么看有没有坏点呢,就是NrOfDefPix这个变量,如果为0x00,那么恭喜您,您拿到的传感器没有坏点,紧跟在后面的区域就是存储坏点的地址以及他们的掩码,后面我们会介绍怎么进行坏点的处理。
在这里插入图片描述

数据样例

0x0000–> : E7 3C 13 4C 2A 09 78 4C 16 08 09 71 00 64 FF BF
0x0010–> : 2C 05 15 03 88 2C 05 15 03 88 2C 05 15 03 88 FF
0x0020–> : FD EF 0A FF FF FF 12 A1 B4 A0 11 8F 93 0B 6B 0C
0x0030–> : 41 49 03 03 EC 15 1B 3D 13 E5 E0 44 14 78 69 8E
0x0040–> : 00 00 FF FF FF FF 7A 0D 7A 0D E4 0C FF FF 0F 16
0x0050–> : 00 00 00 00 00 27 2F 41 03 49 03 FF FF FF 09 09
0x0060–> : 2C 05 15 03 88 8D 18 FF FF 8D 0B 63 0C AD 8E FF
0x0070–> : 17 7F 6B 02 5B 2D 12 00 09 74 77 88 8D E4 0C 00

因为篇幅原因,只贴出前面一部分的存储数据,以上数据对照着结构表,就可以大致看出个端倪了,举个例子:表号的数据是 0x71 0x00 , 那么交换字节序以后就是0x00 0x71 ,我们用工具试着转换一下

在这里插入图片描述
我们看到结果是113,就是对应厂家提供的table校准表中的113型表。

数据解析结果

我们直接来看看最终所有数据的解析结果

pixcmin:38597532.00000 pixcmax:65021096.00000 gradscale:22 tablenumber: 113 epsilon: 94

mbit_calib: 0x2C bias_calib: 0x05 clk_calib: 0x15 bpa_calib: 0x03 pu_calib: 0x88

arraytype: 10 vddth1: 41234 vddth2: 41140

ptatgr_float: 0.03786 ptatoff_float: 1799.15857 ptatth1: 30740 ptatth2: 36457

vddscgrad : 15 vddscoff:22

globaloff: 0 globalgain: 12071

mbit_user: 0x2C bias_user: 0x05 clk_user: 0x15 bpa_user: 0x03 pu_user: 0x88 bw: 62.00000

id: 1191259 nrofdefpix: 0

特别注意的是在定义变量类型要和EEPROM里的定义一致,尤其是有符号型还是无符号型的变量。
以下是数据转换的部分代码

I2C_EE_Read(EEPROM_ADDRESS, E_MBIT_CALIB , b , 5 );           /****************************************************0x0010行*************/
mbit_calib = b[0];
bias_calib = b[1];
clk_calib = b[2];
bpa_calib = b[3];
pu_calib = b[4];
I2C_EE_Read(EEPROM_ADDRESS, E_ARRAYTYPE , b , 8 );           /****************************************************0x0020行*************/
arraytype = b[0];
vddth1 = (uint16_t )((b[5] << 8)| (b[4]) );                 //注意字节数和字节序
vddth2 = (uint16_t )((b[7] << 8)| (b[6]) );                 //注意字节数和字节序

产生用于计算的二维数组和有用变量

EEPROM里面的数据读取出来以后有的用于设置传感器的运行参数,他们决定着传感器工作频率,ADC转换位数,IIC上拉电阻大小等等。有的参数用于进一步生成我们后续要使用的二维数组或者表。
比如计算每个像素的灵敏度系数:这个系数主要和pixcmin,pixmax,epsilon,globalgain变量有关。
他们之间的关系如下:

 for (int m = 0; m < 32; m++) 
{
   for (int n = 0; n < 32; n++) 
   	{
     pixcij_int32[m][n] = (int32_t)pixcmax - (int32_t)pixcmin;
     pixcij_int32[m][n] = pixcij_int32[m][n] / 65535;
     pixcij_int32[m][n] = pixcij_int32[m][n] * pij[m][n];         //pij[m][n]表示EEPROM内的原始数据
     pixcij_int32[m][n] = pixcij_int32[m][n] + pixcmin;
     pixcij_int32[m][n] = pixcij_int32[m][n] * 1.0  * epsilon / 100;
     pixcij_int32[m][n] = pixcij_int32[m][n] * 1.0  * globalgain / 10000;
   }
}

这些表产生以后就不会变了,所以只需要在开机后加载了EEPROM参数后计算一遍就行了,后面没必要在计算了,以节约我们采样的计算的时间。

结束

EEPROM内部的数据读取和解析就讲到这里,这里有热成像相关的系列博客连接:

第一篇: HTPA 32x32d热成像传感器初识.
第二篇: HTPA 32x32d热成像传感器EEPROM数据读取和解析.
第三篇: HTPA 32x32d热成像传感器数据读取和计算.
第四篇: HTPA 32x32d热成像传感器Qt串口上位机开发.
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值