选中内容(绿色)时除了会搜索文章名,还会搜索文章内容
点击结果中的文章名进入文章界面后可以按Ctrl+F在页面内搜索
  • 版权:CC BY-SA 4.0
  • 创建:2019-11-01
  • 更新:2020-02-26
使用红外摄像头 HTPA32x32d 检测温度


官网: http://www.heimannsensor.com

器件型号

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

专业词汇

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

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

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

驱动

驱动流程

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

  • 扫描器件

初始化:

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

连续采集:

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

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

  • 热量补偿: 根据 ptatseeprom读出的校准数据计算得到新的像素值2

  • 电子补偿: 根据获取到的 electrical_offsets 校准得到新的像素值3, 经过这一步数值(的绝对值)就会变得比较小了
  • 电压补偿: 根据获得的VDD值以及eeprom读取到的数据校准得到新的像素值4
  • 灵敏度补偿: 根据 eeprom 读取到的数据和设定的灵敏系数(PCSCALEVAL(10^8))得到新的像素值5
  • 根据厂商提供的表,转换得到温度值,单位是dK, 将其转换成摄氏度即可

    厂商会提供很多型号的表,当前传感器具体使用哪个表可以读取eepromTN(table number)值, 然后使用对应的table number的表

通信

  • 通信方式: IIC 通信

  • 地址: 两个地址, 0x1A0x50, 一个是用来发送命令和读取数据,另一个是用来读取内部eeprom

  • 速度: 读取eeprom最高支持400KHz, 读写传感器最高支持1MHz

数据分为上下两部分,这两部分是同时测量的,每个部分又分为4个块,这4个块需要分别发送命令启动测量,也就是要获得一个完整的图片需要启动4次测量

设置0x01寄存器的blind位, VDD_MEAS位设置被传输的值是PTAT还是VDD,来获取电子补偿,比如写值0x0f到寄存器0x01, 然后读取0x0A,读取共258个字节,然后同样是0x0B 258个字节,注意必须一次性读完258个字节.

要十分注意得到的数据实际在传感器的哪个位置,具体的一定要仔细阅读手册
比如第一次读到[0,31]以及[992,1023],而不是[0,31][512,543]
pixel_dir
elec_off_dir

实际数据示例

  • 采集到的像素值

获取到的值如果直接显示会发现毫无规律的样子,如图:

pixels

  • eeprom读取的数据计算得出的pix_c

pix_c

  • 温度校准后

thermal_comp

  • 电子校准

elec_comp

  • 然后经过vdd 和 灵敏度校准,最后查表和转换单位得到温度

temperature

得到的图像:
htpat_32x32.png

放大到240x240:
htpat_scale_240x240.png

调试过程中容易遇到的问题

  • 数据读取顺序以及最终储存到内存的顺序
  • 高低位(MSB还是LSB), eeprom都是LSB, 传感器是MSB
  • 查表需要弄清需要哪个表(根据TN(table number))
  • 数据比较大,在内存不大的单片机驱动时注意内存的使用,如果内存重复使用,一定要注意别把后面需要用到的数据给覆盖了
  • 数据可以参考官方给的数据和我的截图,对比分析
  • 配置一定要使用eeprom中读出来的校准时用的配置

关于提高帧率

对于这款32x32的传感器,按照出厂校准时的参数,可以达到8帧左右的输出,加上计算,大概7帧多一点.
主要时间花费在采集electrical_offsetpixels两个过程,以I2C频率为1MHz为例,前者大概需要30ms,后者大概需要120ms.
这其中,VDD的值和PTAT的值还是在两次采集pixels的过程中分别一起采集的,也就是说一次VDD/PTAT的值要给两次数据用,或者使用某种算法进行融合也可以, 同样,如果electrical_offset也每隔一次pixels采集一次,理论上也可以减少15ms左右的时间.

相关文章

参考

其它热传感器

文章有误?有想法想讨论?查看或者发起勘误/讨论 主题
(发起评论需要先登录 github)

/wallpaper/wallhaven-e7xw6w.jpg