|
楼主 |
发表于 2019-10-16 09:27:58
|
显示全部楼层
使用MLX90640传感器,建议的操作流程
unsigned short EE[832];
unsigned short Frame[834];
paramsMLX90640 MLXPars;
float Vdd,Ta,Tr;
float Temp[768];
IIC_Init(); //I2C初始化
MLX90640_I2CInit(); //MLX传感器初始化
Delay_ms(50); //预留一点时间让MLX传感器完成自己的初始化
MLX90640_SetRefreshRate(0); //测量速率1Hz(0~7对应0.5,1,2,4,8,16,32,64Hz)
MLX90640_I2CRead(0x2400, 832, EE); //读取像素校正参数
MLX90640_ExtractParameters(EE, &MLXPars); //解析校正参数(计算温度时需要)
while (1)
{
Delay_ms(5);
if (MLX90640_GetFrameData(Frame)==0) //有转换完成的帧
{
Vdd=MLX90640_GetVdd(Frame, MLXPars); //计算Vdd(这句可有可无)
Ta=MLX90640_GetTa(Frame, MLXPars); //计算实时外壳温度
Tr=Ta-8.0; //计算环境温度用于温度补偿
//手册上说的环境温度可以用外壳温度-8℃
MLX90640_CalculateTo(Frame, MLXPars, 0.95, Tr, Temp); //计算像素点温度
/*
Temp数组内即是转换完成的实时温度值,单位℃
可以在这里对得到的32*24=768个温度值进行处理、转换为颜色值、显示
关于温度转颜色方法,在后续的文章中会有专门介绍
*/
}
}
一点疑问:校正参数存储于传感器内部的EEPROM,实时数据也来自传感器,如何利用实时数据和校正参数计算温度的方法也是事先规定好的,MLX为什么不直接在内部完成这个温度计算让用户直接读取温度值?为了体现这个传感器的复杂性或者是让用户有成就感吗?
本来可以在传感器内部解决的问题被厂家要求在外部完成,对MCU的性能要求比较高,大量的浮点运算,大量的RAM消耗,较低的效率。
|
|