本帖最后由 oxygenzz 于 2019-1-17 15:18 编辑
转帖自Sensors Magazine网站。**作者Chris Best来自于Microchip 8位单片机应用团队。
https://www.sensorsmag.com/components/how-to-build-eight-bit-thermal-imaging-camera
热像仪, 也被称为红外相机, 利用红外辐射来创建我们可以在可见光光谱中看到的图像。热像仪最初是在朝鲜战争期间为军事应用而开发的。如今, 热像仪被广泛用于商业、工业和个人应用等领域。
通常, 这些摄像机采用最先进的微处理器、16位或32位微控制器 (mcu) 或两者的组合进行设计。本文介绍了一种采用8位MCU的低成本、低分辨率的热像仪的简单实现。
感兴趣的同学,可以访问上面链接;或Microchip官网获取对应的应用笔记:
http://ww1.microchip.com/downloads/en/AppNotes/AN2773-8-Bit-Thermal-Camera-00002773A.pdf
8位热像仪由以下三个主要硬件组成:- Panasonic Grid-EYE 红外传感器
- Varitronix COG-C144MVGI-08 LCD模组
- PIC18F27K42 8位单片机
使用Grid-EYE传感器进行红外检测。 Grid-EYE是一个8 x 8像素(总共64个)红外阵列传感器,采用微电子机械系统(MEMS)热电堆技术设计。热电堆阵列由一系列独立的热电偶组成。每个热电偶由两根不同热材料的细线组成。两根导线在一端连接在一起,称为热接头,另一端连接到散热器。
热接点连接到一个非常薄的普通红外吸收膜,由所有64个热电偶共用。如果两个结之间存在温差,则会产生微小的电动势(EMF)电压,可以测量该电压并将其转换为温度。这种现象称为塞贝克效应。传感器通过I2C总线进行通信,最大工作频率为400 kHz。该传感器还具有板载增益放大器,模数转换器(ADC)和热敏电阻,见下图。
传感器通过在60°视场范围内吸收红外热能开始运行。红外能量通过集成的硅透镜,充当光学滤波器,允许吸收5到13微米(远红外区域)波长的红外能量。一旦IR能量通过透镜,它就被每个热电堆阵列的64个传感元件吸收。每个传感元件将其吸收的IR能量转换为模拟输出信号。
模拟电压通常在低毫伏范围内,这可能太小而不能准确地检测到能量的微小变化。为了纠正这个问题,每个传感元件的模拟输出都通过增益放大器,有效地提高了每个元件的分辨率。一旦每个信号被放大,它就会通过ADC,在那里根据板载热敏电阻的温度值进行参考,并转换成12位(11位+ 1符号位)数字等效值。 64个像素中的每一个都有自己独特的温度寄存器,它保持转换后的数字温度等效值。这些温度寄存器可由微控制器通过I2C总线读取。
LCD模块采用彩色超扭曲向列(CSTN)LCD技术,采用无源矩阵寻址。在CSTN LCD中,行和列信号用于直接寻址像素,并且像素必须保持其ON / OFF状态而不使用开关或电容器。每个视觉像素被分成三个物理子像素,并且每个子像素使用红色,蓝色或绿色滤波器来显示颜色。显示器使用白色LED背光,其光通过每个子像素。
每个子像素输出的强度由显示器的LCD驱动器控制,可创建多达6.5万种独特颜色。采用三星S6B3306 LCD驱动芯片,集成在显示模块中。驱动器简化了微控制器和显示器之间的接口,这意味着需要更少的连接。
LCD配置为65k色模式。在65k色彩模式下,16位字被分为标准RGB565色彩格式。 RGB565格式是一种16位色彩方案,其中位<15:11>(5位)定义红色强度,位<10:5>(6位)定义绿色强度,位<4:0>( 5位)定义蓝色强度(见下图)。 RGB565格式为绿色提供了额外的位,因为人类视觉对可见光光谱的绿色波长更敏感。
PIC18F27K42单片机用于读取传感器的温度数据,执行图像处理,并将颜色数据传输到LCD。本相机使用了以下片上外设:
- 定时器1 (Timer1)
- 直接内存访问(DMA)
- I2C
- SPI
Timer1是一个16位递增计数器,在热像仪应用程序中实现,产生15秒的延迟。首次打开相机电源并配置Grid-EYE传感器使用时,需要15秒的延迟才能稳定下来。 Timer1可用于执行相同的任务,而不是使用在延迟周期内暂停程序执行的“延迟”功能。由于Timer1在后台运行,代码执行仍在继续,允许内核专注于其他任务,而不是暂停代码执行15秒的“延迟”功能。
直接存储器访问(DMA)模块允许PIC单片机的存储区之间进行数据传输,无需任何CPU干预。 DMA消除了CPU处理用于跟踪数据传输的中断的需要,允许CPU在传输过程中执行其他任务。在Grid-EYE传感器所需的15秒稳定延迟期间,相机使用DMA将存储在程序存储器中的图像文件传输到LCD。
I2C模块在微控制器和其他I2C兼容设备之间提供同步串行接口。 I2C模块用于配置和读取Grid-EYE传感器的温度数据,并以100 kHz的总线速度运行。读取传感器的像素数据需要块读取像素寄存器。每个像素包含分成两个单独字节的12位温度值,并且由于总共有64个像素,因此I2C执行128字节的块读取。
幸运的是,像素数据区域是顺序配置的,这意味着I2C可以发送单个从地址,然后是单个寄存器地址,但在单个事务中将接收所有128个字节。在读取每个像素寄存器之后,传感器自动指向下一个寄存器,因此每次读取像素寄存器时都不需要启动新的通信包。
PIC18F27K42的SPI模块用于配置和向LCD写入颜色信息。该模块配置为仅发送模式,SCK速度为8 MHz。仅发送配置允许从主设备到从设备的单向传输,而无需主设备读取其SDI输入。每个图像帧由17,434个16位字组成,这意味着每个帧将要求SPI为每帧发送34,868个8位字节。
可以看出,每次SPI写入一个字节的数据时,即使保存一个指令周期也会达到34,868个保存指令,这意味着SPI可以更快地写入其数据。这有助于防止帧与帧之间的图像滞后。
一旦PIC单片机从传感器读取了温度数据,它就必须执行图像处理以创建传输到LCD的图像。图像处理软件使用传感器数据基于传感器中包含的64个像素来创建图像。如果我们在1.44英寸LCD上观察这个64像素阵列,那么图像太小而无法看到。要正确查看图像,必须进行扩展。
线性插值是在线上的两个已知值之间找到未知值的过程。换句话说,线性插值使用我们必须填写的信息来扩展图像所需的缺失信息。对于此相机,使用双线性插值方法。
在这种情况下,软件获取四个相邻像素的值,将缩放因子应用于四个像素中的每一个,并取四个缩放像素的平均值并将该值应用于新创建的像素。缩放因子取决于新创建的像素与原始像素的距离;新像素越远,比例因子越小(见下图)。线性插值基于已知值近似未知值,但不能确保计算值准确。换句话说,两个像素之间的未知区域可能包含对象的边缘,而不是创建对象的“硬”边界,插值可能导致边界定义较少。
原文地址:https://www.sensorsmag.com/compo ... rmal-imaging-camera
应用笔记:https://www.microchip.com/wwwApp ... px?appnote=en607467
|