2020年伊始,一场疫情让国人的年过得心惊胆战,随之而来的就是口罩紧缺,消杀药品遭疯抢。相信作为电子行业的朋友都能看到:复工刚开始各种测温设备、测温相关的传感器、芯片价格暴涨。本文主要介绍用于热成像的传感器德国海曼的HTPA 32x32d,希望能帮助正在研发热成像设备的企业或者个人,能快速了解和上手这个传感器。这篇文章是第一篇,后续还有介绍PCB板设计、器件驱动,数据读取和计算,上位机开发等篇章陆续发表。
专业词汇K: 开尔文,温度单位, 273.15K = 0℃ 更多看单位介绍 , 维基
dK: DeciK, 十分之一开尔文, 比如2731.5dK = 273.15K = 0℃, 在线转换器: calculand.com
PTAT: (proportional to absolute temperature,与绝对温度成正比)
器件对比在说海曼这个传感器之前,我们先对另一个厂商的传感器做一点介绍,这就是迈来芯公司的MLX90640传感器,为什么要说这个传感器呢,如果您是正在开发这个传感器的开发人员答案应该不用我说了,这个芯片在国内已经买不到了,而原因是他的价格相对较低,并且API做的很好,非常容易上手,厂家提供了一套完整的API函数库,包含了读取、校准,计算,坏点的处理等一系列操作函数,无论您用的是何种单片机平台,只需要稍微修改一下就可以方便地移植到想要的平台上。
先来一张图片直观的对比下两个器件的电气特性:
他们的相同点就是都是IIC接口的通信接口。
器件型号不同的型号有不同的含义,手册中有详细说明,比如HTPA32x32dR1L5.0/0.85F7.7eHiC,
代表了: 分辨率32x32,带有数字输出的版本号为1,5mm焦距,光圈0.85, 滤波特性F7.7(μm, bandpass), 带有外部光圈,高灵敏度,带有保存在eeprom的校准数据。
这里是主要的流程,具体每一步的计算及其公式需要仔细阅读手册或看示例代码
器件初始化,首先初始化IIC接口,博主用的是STM32,最好是用软件模拟IIC总线,因为调试过程中硬件IIC总线也调试好了,但是出了一些诡异的问题,不敢用了;可以用其他IIC器件试过的驱动程序,通过读或者写内部寄存器看看传感器有没有回复。
从eeprom读取校准数据,EEPROM是第三方公司提供的24AA64 , 集成在传感器内部。共8K byte。其实你可以看做是两个器件,一个是传感器,一个是EEPROM存储器,需要注意的是他们的通信时钟频率不同,传感器最大可以到1MHz,EEPROM最大只能到400KHz。
计算 pix_c 的值
可以根据读到的出厂校准使用的参数来初始化传感器,如果不使用校准时使用的值出来的数据可能会不准
设置blind位,启动转换,读取 electrical_offsets, 分为上下部共256个uint16 值, 注意下部的顺序
不设置blind位,启动转换,读取像素值,上下两部分,共1024个int16值,注意下部的顺序; 以及同时获取到ptats共 8个uint16。
获取VDD值,上下部,共8个uint16值.
这里需要注意的是由于vdd和ptats的值都是伴随像素值的读取同时一次读取出来的, 所以为了加快帧率,实际上不必为了读这两种数据而启动两次转换,而是在两次读取像素值中,一次读取vdd,一次读取ptats,这样可以增加一倍的读取速率。
热量补偿: 根据 ptats和eeprom读出的校准数据计算得到新的像素值2
电子补偿: 根据获取到的 electrical_offsets 校准得到新的像素值3, 经过这一步数值(的绝对值)就会变得比较小了
电压补偿: 根据获得的VDD值以及eeprom读取到的数据校准得到新的像素值4
灵敏度补偿: 根据 eeprom 读取到的数据和设定的灵敏系数(PCSCALEVAL(10^8))得到新的像素值5
根据厂商提供的表,转换得到温度值,单位是dK, 将其转换成摄氏度即可,厂商会提供很多型号的表,当前传感器具体使用哪个表可以读取eeprom的TN(table number)值, 然后使用对应的table number的表。
注意块读取顺序:不是我们想的那样按顺序读取,要十分注意得到的数据实际在传感器的哪个位置,具体的一定要仔细阅读手册,比如第一次读到[0,31]以及[992,1023],而不是[0,31]和[512,543]。
读完本文,您一定对这个传感器了解个大概了,当然想要驱动这个器件工作,肯定要把芯片手册读透的,下一篇文章我们介绍如何读取这个传感器内部的EEPROM以及怎么来解析内部的数据,敬请期待。