德国海曼HTPA 32x32d热成像传感器代替MLX90640之传感器数据读取和计算
传感器数据读取和计算
之前的文章我们简单介绍了热成像传感器德国海曼的HTPA 32x32d的EEPROM数据读取和解析,本文主要进一步介绍传感器数据读取,最终通过五大步计算和校准得到我们想要的32x32分辨率的图像。
传感器主要寄存器
传感器里面包含了3个只读传感器和8个只写传感器。其中TRIM_REGISTER1 到TRIM_REGISTER7 我们可以直接用EEPROM里面存储的设置参数来对传感器进行初始化就可以了;STATUS_REGISTER 是状态寄存器,通过查询该寄存器的EOC比特位可以知道上一次AD转换是否完成,如果EOC为1表示上一次转换完成了,这时候可以去读取TOP_HALF 和BOTTOM_HALF 寄存器,可以每次读取出258byte。
// write only
#define CONFIGURATION_REGISTER 0x01
#define TRIM_REGISTER1 0x03
#define TRIM_REGISTER2 0x04
#define TRIM_REGISTER3 0x05
#define TRIM_REGISTER4 0x06
#define TRIM_REGISTER5 0x07
#define TRIM_REGISTER6 0x08
#define TRIM_REGISTER7 0x09
// read only
#define STATUS_REGISTER 0x02
#define TOP_HALF 0x0A
#define BOTTOM_HALF 0x0B
传感器第一个寄存器CONFIGURATION_REGISTER是一个只写寄存器,也是这次重点讲解的寄存器,可以看到里面的比特位表示不同含义:
1、WAKEUP:这个位时用来开关传感器的,貌似通过设置该位可以达到低功耗的目的,还没试过,有待研究,尝试过得朋友可以交流下。
2、START:启动和关闭转换,如果不需要图像了,可以设置该位为0,让传感器进入到空闲模式,但是空闲模式不是最低功耗的,这个需要注意,最低功耗因该是睡眠模式。
3、BLOCK:用来设置进行哪一个块的转换,一共4个块,每次能转换一个块,他们分别在顶层和底层。
4、BLIND:用来设置所有的像素关闭的,这个很好理解,这个在测量电子偏移量的时候会用到,就是在像素关闭的情况下进行测量,这个值就是电子偏移量。
5、VDD_MEAS:用于设置是进行VDD的测量还是PTAT的测量。
采样流程
读取流程好像不止一种,常规的读法是:
1、配置控制寄存器进行BLOCK0的PTAT的转换:设置为0x09
// --- BLOCK 0 with PTAT ---// change block in configuration register (to block0)// | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |// | RFU | Block | Start | VDD_MEAS | BLIND | WAKEUP |// | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
2、读取顶层和底层的数据块
3、同理依次进行BLOCK1、BLOCK2、BLOCK3的PTAT的转换:设置为0x19 、 0x29 、 0x39
4、配置控制寄存器进行BLOCK0的VDD的转换:设置为0x0D
// --- BLOCK 0 with VDD --// change block in configuration register (to block0)// | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |// | RFU | Block | Start | VDD_MEAS | BLIND | WAKEUP |// | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
5、读取顶层和底层的数据块
6、同理依次进行BLOCK1、BLOCK2、BLOCK3的VDD的转换:设置为0x1D 、 0x2D 、 0x3D
7、配置控制寄存器进行ELE OFFSET的转换:设置为0x0B
// --- EL.OFFSET ---// change block in configuration register (to block0)// | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |// | RFU | Block | Start | VDD_MEAS | BLIND | WAKEUP |// | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
8、读取转换好的电子偏移值。
注意:以上每次启动转换和每次读取是配对进行的,先启动一次转换紧接着是一次读取,这个顺序不能乱,但是各个启动转换和读取流程可以任意交换顺序。
数据分类
因为传感器内部的像素顺序不是我们一般认为的从左到右,从上到下的方式排列,所以读取后的块数据要经过重新的排列,最终形成一个32x32的原始像素二维数组。
由于数组data_top_block0[0]和data_top_block0[1]存放着VDD和PTAT的值,所以我们从data_top_block0[2]开始取数据。
for (int n = 0; n < NUMBER_COL; n++)
{// --- PIXEL DATA TOP HALF ---// block 0data_pixel[0][n] = data_top_block0[2 * n + 2] << 8 | data_top_block0[2 * n + 3]; //后面像素值排列方法同理
}
PTAT和VDD由8个block的平均值得来,环境温度ambient_temperature根据系数ptatgr_float和偏移量ptatoff_float得到,他们的计算方法如下:
// calculate ptat average (datasheet, chapter: 11.1 Ambient Temperature )sum = ptat_top_block0 + ptat_top_block1 + ptat_top_block2 + ptat_top_block3 + ptat_bottom_block0 + ptat_bottom_block1 + ptat_bottom_block2 + ptat_bottom_block3;ptat_av_uint16 = sum / 8;// calculate ambient_temperature (datasheet, chapter: 11.1 Ambient Temperature )ambient_temperature = ptat_av_uint16 * ptatgr_float + ptatoff_float;// calculate vdd average (datasheet, chapter: 11.4 Vdd Compensation )sum = vdd_top_block0 + vdd_top_block1 + vdd_top_block2 + vdd_top_block3 + vdd_bottom_block0 + vdd_bottom_block1 + vdd_bottom_block2 + vdd_bottom_block3;vdd_av_uint16 = sum / 8;
像素的计算和校准
1、原始像素:经过上面的数据分类可以得到原始的像素值1。
2、热量补偿: 根据 ptats和eeprom读出的校准数据计算得到新的像素值2。
3、电子补偿: 根据获取到的 electrical_offsets 校准得到新的像素值3, 经过这一步数值(的绝对值)就会变得比较小了。
4、电压补偿: 根据获得的VDD值以及eeprom读取到的数据校准得到新的像素值4。
5、灵敏度补偿: 根据 eeprom 读取到的数据和设定的灵敏系数(PCSCALEVAL(10^8))得到新的像素值5,(厂商会提供很多型号的表,当前传感器具体使用哪个表可以读取eeprom的TN(table number)值, 然后使用对应的table number的表)。
6、根据厂商提供的表转换得到的温度值,单位是dK, 将其转换成我们熟悉的摄氏度即可。
最激动人心的时刻到了,我们把最终校准得到的图像导入Excel工具中,为了更直观的显示图像,我们先把每个格子设置到长宽一致,然后使用一个叫色阶的功能对各个像素值进行量化。就得到下面的图像了。
坏点和不良点的处理
坏点和不良点的处理主要用到EEPROM里存放的坏点地址和掩码,基本方法是邻域平均法,通过地址和掩码查找到坏点的坐标和他们的“邻居”,他的值由他的“邻居”取平均值得到。
其他算法
产生了完整的一帧图像以后,我们可以对图像进行一些处理,比如高斯模糊等,或者稍微简单的邻域平均算法使得图像变得更加平滑一些,下面是两张图片的对比,第一张是校准后原始的图像,第二张是使用了平滑处理后的图像。
结束
关于海曼HTPA 32x32d热成像传感器的文章到此就结束了,下一篇文章我们将用上位机呈现出计算出的图像!希望抛砖引玉能给做开发的工程师同行有点帮助,欢迎技术交流和讨论,这里有热成像相关的系列博客连接:
第一篇: HTPA 32x32d热成像传感器初识.
第二篇: HTPA 32x32d热成像传感器EEPROM数据读取和解析.
第三篇: HTPA 32x32d热成像传感器数据读取和计算.
第四篇: HTPA 32x32d热成像传感器Qt串口上位机开发.
德国海曼HTPA 32x32d热成像传感器代替MLX90640之传感器数据读取和计算相关推荐
- 德国海曼HTPA 32x32d热成像传感器代替MLX90640之EEPROM数据读取和解析
EEPROM数据读取和解析 上一篇我们简单介绍了热成像传感器德国海曼的HTPA 32x32d,本文主要进一步介绍内部EEPROM数据读取和解析. 存储结构一览 首先,很简单的IIC总线协议写好,调试好 ...
- 德国海曼HTPA 32x32d热成像传感器代替MLX90640之传感器初识
传感器初识 2020年伊始,一场疫情让国人的年过得心惊胆战,随之而来的就是口罩紧缺,消杀药品遭疯抢.相信作为电子行业的朋友都能看到:复工刚开始各种测温设备.测温相关的传感器.芯片价格暴涨.本文主要介绍 ...
- 德国海曼红外测温资料
HTPA32x32dL2_1k0.8(Hi)S_Rev2_Datasheet
- 博世传感器BMM150数据读取
博世传感器BMM150 博世磁力计BMM150数据读取 读取步骤 博世磁力计BMM150数据读取 最近一段时间一直在读取各种传感器数据,发现有些传感器使用较多网上也有很多参考例程,例如mpu6050, ...
- 海曼HTPA32X32开发与应用(一)准备工作
准备工作 前言 硬件 开发软件 调试软件 程序下载软件 配套工具 校验工具 前言 2020年疫情的爆发引爆了测温行业,无论是额温枪测温.低分辨率热成像测温以及高分辨率热成像测温都进入了前所未有的热度. ...
- nb-iot 华为云_海曼NB-IoT智慧消防解决方案通过华为云资格审核,正式入驻华为云市场...
近日,海曼科技旗下NB-IoT智慧消防解决方案(含NB-IoT智能烟感.气感)通过华为云的重重资格审核,正式入驻华为云市场,推动消防产业智能升级,助力智慧城市发展! 严选商城 华为云严选商城,是华为的 ...
- 海曼HTPA32X32开发与应用(二)大一统规划
准备工作 矩阵测温传感器应用场景分析 海曼和迈来芯传感器比较 大一统方案 困难和挑战 矩阵测温传感器应用场景分析 矩阵测温传感器与单点测温器件比较主要优点是测温角度宽,测温距离远.这一特点也促进了该类 ...
- 称重传感器张力传感器测力传感器品牌排行榜
概论 称重传感器已被广泛应用于各类电子衡器.电子衡器的日益普及,决定于称重传感器设计技术.工艺技术的不断提高外,还有赖于称重传感器应用技术的不断改进和应用领域的不断开拓.衡器是国民经济各部门使用最普遍 ...
- sar sensor传感器的作用_传感器攻防战-惯导IMU
惯导这个传感器一句话理解就是可以短时给出置信度较高的相对位移和航向角变化的传感器 惯导这个传感器很神奇,激光雷达,毫米波,摄像头三个还会争夺下,是不是用GPS大家也会考虑下,但惯导这个传感器没人会怀疑 ...
最新文章
- linux脚本查看变量类型,Shell变量:Shell变量的定义、删除变量、只读变量、变量类型...
- codevs 1230 元素查找
- 易度甘特图的功能介绍和开发手册
- 面试中说这些话,到手的offer很容易飞
- CSS结构伪类选择器
- linux关于子网掩码函数,Linux 子网掩码计算, 二进制十进制互相转换
- IDEA external library 这个里面是空的怎么办
- 华为数通部门软开9.16凉经
- android 8187驱动 win7,8187无线网卡驱动,教您Realtek瑞昱8187无线网卡驱动
- 单片机c语言 教案,《单片机C语言》 课程教案.doc
- 易语言采集网页html,易语言采集网页图片源码例程
- 详解基于深度学习的伪装目标检测
- MIT Mini Cheetah--仿真流程
- python 打开excel并在屏幕上呈现_如何用Python打开Excel文件显示其内容?
- 五大常用算法:分治、动态规划、贪心、回溯和分支界定
- python 极简词云
- gps服务器修改,怎么修改照片GPS信息?修改照片GPS定位方法
- 什么叫系统后门?后门与漏洞有什么区别?
- linux ping库函数,在Linux上用C++实现Ping
- java用mysql方便吗_面试题总结:可能是全网最好的MySQL重要知识点