MLX90640 红外热成像仪测温传感器模块开发笔记(九) EEPROM、 RAM、寄存器说明
EEPROM
地址范围为 0x2400~0x273F,共 832 个字(1664 字节), 前 16 个字包含了唯一 ID 码、工作参数(上电后自动同步到寄存器)、 MLX90640 的 I2C 地址。后面的 816 个字全部是每个像素的校正或者测量参数,数据手册也没有写每个数据到底是什么意思,直接用就是了,不要问为什么。
RAM
地址范围为 0x0400~0x073F,共 832 个字(1664 字节),前 768 个字是实时的 768 像素的测量数据,后面 64 个字是与当前刚刚测量完成的一半像素有关的计算因数。 RAM 是只读的。
寄存器
地址范围为 0x8000~0x8010,共 16 个字(32 字节),其中用户可以访问的有状态寄存器0x8000、控制寄存器 0x800D,改变控制寄存器可以直接控制 MLX90640 的运行行为,是既有读又有写的部分。
三部分建议的操作
上电后读取一下 EEPROM,扔给 API 函数 MLX90640_ExtractParameters 得到的参数项变量。根据需要修改控制寄存器的值。循环读取状态寄存器,当有新的数据测量完成时读取全部 RAM 扔给 API 函数MLX90640_CalculateTo 得到每个像素的温度值。
状态寄存器说明
状态寄存器从字面来理解应该是只读的,但数据手册里却定义了一些位是参数(可修改的),不管寄存器叫什么了,根据参数功能来用吧。
STA[15:5]:保留,只能写入 0STA[4]: RAM 是否可写, 0:不可写; 1:可写。在帧测量完成后,是否允许 MLX90640将测量的数据写入(更新)到 RAM 里,这个功能可以在读取一帧数据的过程中设置为不允许,即:当上位机正在读取 RAM 的过程中,不允许再更新 RAM。这个位置同时还受控制寄存器中的 bit2 的限制,当 CTR[2]=0 时,无论这个位置怎样设置,都会自动更新 RAM,仅当 CTR[2]=1时, STA[4]参数才会起作用。STA[3]:子页测量完成标志位。 0:表示没有完成; 1 表示已经完成了一帧的测量。STA[2:0]:刚刚完成的是帧 0 还是帧 1。
控制寄存器说明
CTR[15:13]:保留,只能写入 0
CTR[12]:帧交错模式,默认为 1(像素交错模式),数据手册上说了只有这种模式才能保证精度,那就不要改这一位,保持默认 1。
CTR[11:10]:测量精度, 00~11 表示 16 位~19 位,默认为 10(18 位)。改成 11 也没什么效果,所以这个参数也保持默认吧。
CTR[9:7]:设置测量速率, 0~7 表示 0.5、 1、 2、 4、 8、 16、 32、 64Hz,默认为 010(2Hz),这个参数是唯一有用的参数。
CTR[6:4]:手动测量时,指定要测量哪个子页(帧 0 还是帧 1)。数据手册已经把手动测量部分删除了,所以手动测量相关的参数可以忽略。
CTR[3]:手动测量还是自动测量,默认为 0(自动测量),不要使用手动测量(原因同上)。
CTR[2]:如何更新 RAM。 0:测量完成后自动更新; 1:根据 STA[4]参数。
CTR[1]:保留,只能写入 0。
CTR[0]: 0:所有数据更新在一页里; 1:使能子页模式(页 0 和页 1),默认