德国海曼HTPA 32x32d热成像传感器代替MLX90640之传感器初识

传感器初识

2020年伊始,一场疫情让国人的年过得心惊胆战,随之而来的就是口罩紧缺,消杀药品遭疯抢。相信作为电子行业的朋友都能看到:复工刚开始各种测温设备、测温相关的传感器、芯片价格暴涨。本文主要介绍用于热成像的传感器德国海曼的HTPA 32x32d,希望能帮助正在研发热成像设备的企业或者个人,能快速了解和上手这个传感器。这篇文章是第一篇,后续还有介绍器件驱动,数据读取和计算,上位机开发等篇章陆续发表。

专业词汇

K: 开尔文,温度单位, 273.15K = 0℃ 更多看单位介绍 , 维基

dK: DeciK, 十分之一开尔文, 比如2731.5dK = 273.15K = 0℃, 在线转换器: calculand.com

PTAT: (proportional to absolute temperature,与绝对温度成正比)

器件对比

在说海曼这个传感器之前,我们先对另一个厂商的传感器做一点介绍,这就是迈来芯公司的MLX90640传感器,为什么要说这个传感器呢,如果您是正在开发这个传感器的开发人员答案应该不用我说了,这个芯片在国内已经买不到了,而原因是他的价格相对较低,并且API做的很好,非常容易上手,厂家提供了一套完整的API函数库,包含了读取、校准,计算,坏点的处理等一系列操作函数,无论您用的是何种单片机平台,只需要稍微修改一下就可以方便地移植到想要的平台上。
先来一张图片直观的对比下两个器件的电气特性:
德国海曼HTPA 32x32d热成像传感器代替MLX90640之传感器初识_第1张图片

  1. 图像像素不同 ,HTPA32x32d是3232的分辨率、MLX90640是3224的分辨率;
  2. 工作电流不同 ,HTPA32x32d功耗更低;
  3. 视场角度不同, HTPA32x32d可以选择的角度更多,博主用的是33°的;
  4. 时钟频率不同 ,MLX90640的频率更高,并且固定为38MHz,这意味着相同的ADC位数,MLX90640的转换速度可能更快,相应的图像刷新率应该可以更高;
  5. 测温范围不同
  6. ADC分辨率不同 ,MLX90640可以配置到19bit;
  7. 数据读取模式不同 这个是简单来说就是读取数据的顺序不同,HTPA32x32d是块读取模式,后面会详细介绍,它内部有8个块,分为顶层4块和底层4块;而MLX90640是电视模式和棋盘模式读取,或者叫隔行读取和隔点读取,厂商推荐的是隔点读取。

他们的相同点就是都是IIC接口的通信接口。

器件型号

不同的型号有不同的含义,手册中有详细说明,比如HTPA32x32dR1L5.0/0.85F7.7eHiC,
代表了: 分辨率32x32,带有数字输出的版本号为1,5mm焦距,光圈0.85, 滤波特性F7.7(μm, bandpass), 带有外部光圈,高灵敏度,带有保存在eeprom的校准数据。

操作流程

这里是主要的流程,具体每一步的计算及其公式需要仔细阅读手册或看示例代码

  1. 器件初始化,首先初始化IIC接口,博主用的是STM32,最好是用软件模拟IIC总线,因为调试过程中硬件IIC总线也调试好了,但是出了一些诡异的问题,不敢用了;可以用其他IIC器件试过的驱动程序,通过读或者写内部寄存器看看传感器有没有回复。

  2. 从eeprom读取校准数据,EEPROM是第三方公司提供的24AA64 , 集成在传感器内部。共8K byte。其实你可以看做是两个器件,一个是传感器,一个是EEPROM存储器,需要注意的是他们的通信时钟频率不同,传感器最大可以到1MHz,EEPROM最大只能到400KHz。

  3. 计算 pix_c 的值
    可以根据读到的出厂校准使用的参数来初始化传感器,如果不使用校准时使用的值出来的数据可能会不准

  4. 设置blind位,启动转换,读取 electrical_offsets, 分为上下部共256个uint16 值, 注意下部的顺序
    不设置blind位,启动转换,读取像素值,上下两部分,共1024个int16值,注意下部的顺序; 以及同时获取到ptats共 8个uint16。

  5. 获取VDD值,上下部,共8个uint16值.
    这里需要注意的是由于vdd和ptats的值都是伴随像素值的读取同时一次读取出来的, 所以为了加快帧率,实际上不必为了读这两种数据而启动两次转换,而是在两次读取像素值中,一次读取vdd,一次读取ptats,这样可以增加一倍的读取速率。

  6. 热量补偿: 根据 ptats和eeprom读出的校准数据计算得到新的像素值2

  7. 电子补偿: 根据获取到的 electrical_offsets 校准得到新的像素值3, 经过这一步数值(的绝对值)就会变得比较小了

  8. 电压补偿: 根据获得的VDD值以及eeprom读取到的数据校准得到新的像素值4

  9. 灵敏度补偿: 根据 eeprom 读取到的数据和设定的灵敏系数(PCSCALEVAL(10^8))得到新的像素值5
    根据厂商提供的表,转换得到温度值,单位是dK, 将其转换成摄氏度即可,厂商会提供很多型号的表,当前传感器具体使用哪个表可以读取eeprom的TN(table number)值, 然后使用对应的table number的表。

注意块读取顺序:不是我们想的那样按顺序读取,要十分注意得到的数据实际在传感器的哪个位置,具体的一定要仔细阅读手册,比如第一次读到[0,31]以及[992,1023],而不是[0,31]和[512,543]。

德国海曼HTPA 32x32d热成像传感器代替MLX90640之传感器初识_第2张图片

调试过程中容易遇到的坑(画重点!!少走弯路)

  1. 注意数据读取顺序以及最终储存到内存的顺序,eeprom和传感器的读取字节序是反的
  2. 查表需要弄清需要哪个表(根据TN(table number)),每个型号不一样,博主的表号是113,十六进制0x71。
  3. 数据比较大,在内存不大的单片机驱动时注意内存的使用,如果内存重复使用,一定要注意别把后面需要用到的数据给覆盖了,牺牲空间可以提高性能。
  4. 配置一定要使用eeprom中读出来的校准时用的配置,至少在调试阶段是这样,后面玩溜了就随您的便了。

结束

读完本文,您一定对这个传感器了解个大概了,当然想要驱动这个器件工作,肯定要把芯片手册读透的,下一篇文章我们介绍如何读取这个传感器内部的EEPROM以及怎么来解析内部的数据,这里有热成像相关的系列博客连接:

第一篇: HTPA 32x32d热成像传感器初识.
第二篇: HTPA 32x32d热成像传感器EEPROM数据读取和解析.
第三篇: HTPA 32x32d热成像传感器数据读取和计算.
第四篇: HTPA 32x32d热成像传感器Qt串口上位机开发.
德国海曼HTPA 32x32d热成像传感器代替MLX90640之传感器初识_第3张图片

你可能感兴趣的:(嵌入式)