最近拿到了一款德国海曼的HPTA 32X32d热堆阵列传感器,花了一个多星期才把控制程序写完,控制流程有点复杂,网上相关的信息也不多,趁最近辞职了比较有空,赶紧把学习的过程记录一下,免得以后时间一长就忘记了。
一、外观
下图这两个黑色的器件就是HPTA 32X32d热堆阵列传感器了,它有4个引脚,其中两个是VCC和GND,供电电压为3.3V,另外两个是IIC接口的SDA和SCL引脚;。
二、功能
HPTA 32X32d是一个热堆阵列传感器,能生成分辨率为32x32的热点阵图像,下图是本人用代理商提供的demo自拍的效果,看起来是不是有点惊悚?
三、阅读理解
深入了解HPTA 32X32d传感器的方法就是花时间阅读它的数据手册和参考别人写的文章了, 感兴趣的朋友也可以阅读博主uutotoyang发布的相关文章:
1、德国海曼HTPA 32x32d热成像传感器代替MLX90640之传感器初识
2、德国海曼HTPA 32x32d热成像传感器代替MLX90640之EEPROM数据读取和解析
3、德国海曼HTPA 32x32d热成像传感器代替MLX90640之传感器数据读取和计算
以下是我根据数据手册总结的一些要点:
1、传感器内部应该是在一个IIC总线上挂了一个EEPROM和一个控制器,其中EEPROM用于保存热堆阵列的工作参数,控制器用于控制热堆阵列工作,两者的访问地址也不同,EEPROM的地址为0x50,控制器的地址为0x1A;
2、EEPROM中保存的是传感器的出厂参数和校准系数,参数地址和数据格式如下图所示,上电后第一步就要把EEPROM中保存的数据读出来备用;
注意:这些数据很重要,每个传感器都不一样,千万不能擦掉,擦掉了可能传感器就没法用了;
3、热堆控制器工作前要先按照下图所示步骤进行初始化,其中向TRIM_REG1~TRIM_REG7寄存器中写入的数值需要改为从EEPROM中读出来的MBIT(calib)、BIAS(calib)、CLK(calib)、BPA(calib)、PU(calib);
4、热堆阵列传感器共有1024个unsigned short类型的像素(pixel)数据,这些数据刚好组成32x32的像素点阵,但每次只能转换和读取256个像素点,所以每次都要分4次才能读完;如下图所示,这些数据分为上(top)、下(bottom)两部分,每个部分又分成了4块(block),每块有258个数据,其中前2个数据为PTAT或VDD,后256个数据为像素数据,每次读取数据前都要先通过写配置寄存器指定对哪一个块的数据进行何种方式的转换,4次读像素数据的步骤如下:
1)将配置寄存器设为0x09,进行BLOCK0的PTAT转换,转换完成后读取BLOCK0的数据;
2)将配置寄存器设为0x1D,进行BLOCK1的VDD转换,转换完成后读取BLOCK1的数据;
3)将配置寄存器设为0x29,进行BLOCK2的PTAT转换,转换完成后读取BLOCK2的数据;
4)将配置寄存器设为0x3D,进行BLOCK3的VDD转换,转换完成后读取BLOCK3的数据;
注1:读取数据时交替进行PTAT和VDD转换,两种转换方式生成的块数据中,后256个像素数据都是一样的,区别只在于进行PTAT转换后,block块的前2个字节为PTAT值,而进行VDD转换后,block的前2个字节为VDD值,PTAT的均值在后续计算环境温度、热量补偿和电压补偿中都会用到,VDD值用于电压补偿。
注2:下部4个块的数据顺序比较乱,保存像素数据时一定要按照下表中的顺序来存。
5、热堆阵列传感器还有256个电子补偿值(Electrical Offset ),每次读完1024个像素数据后,还要把这些电子补偿值读出来对像素数据进行电子补偿,这些电子补偿值与像素数据共用0x0A和0x0B寄存器,读取数据前要先将配置寄存器设为0x0B,配置寄存器的位定义如下图所示,其中BLOCK位为00,表示对BLOCK0数据进行转换,BLIND位为1,表示关闭像素。
注:保存电子补偿值时同样要注意下部的顺序。
6、获得像素数据和电子补偿值后,就可以结合之前读出来的EEPROM参数进行物温计算了,共有以下四个步骤:
①计算环境温度(用于后续查表进行温度转换);
②进行热量补偿;
③进行电子补偿;
④进行电压补偿;
⑤灵敏度补偿;
⑥通过查表物温转换