高中生
最后登录1970-1-1
在线时间 小时
注册时间2022-3-4
|
1.简介
热成像仪是利用黑体辐射定律,物体的温度越高,所发出的红外辐射能力越强, 经过芯片处理得到温度数据。应用建筑检测,电气维护,安全监控,工厂测试,如机器温升测试等场合,能够提供非接触式的温度测量,帮助监测热异常和预防故障。本次使用RA6T2开发板读取MLX90640红外测温传感器的温度,显示在LCD屏幕上,便于测试设备的温度。
2.系统设计
mlx90640有两种方式读取数据,即串口( TTL 电平)或者 I2C(芯片本身)通信方式。该产品测温点阵数量多,像素高。能在一般的环境分辨出人体型。串口的波特率有 9600bps 与 115200bps和 460800bps,有连续输出与询问输出两种方式,可适应不同的工作环境。模块保留了 MLX90640 芯片本身的 I2C 接口,把模块 PS 接 GND 或者 SET 点焊接上,模块本身 MCU 不工作,可以经过 I2C 直接操作 MLX90640。本次使用的是串口的方式,需要接RX,TX,以及电源即可。
输出格式:
模块输出格式,每帧包含 1544 个字节(十六进制):
①.Byte 0: 0x5A 帧头标志
②.Byte 1: 0x5A 帧头标志
③.Byte 2: 0x02 数据量低 8 位
④.Byte 3: 0x06 数据量高 8 位
⑤.Byte 4: 0x00~0xFF 目标温度数据 1 低 8 位
⑥.Byte 5: 0x00~0xFF 目标温度数据 1 高 8 位
⑦.Byte 6: 0x00~0xFF 目标温度数据 2 低 8 位
⑧.Byte 7: 0x00~0xFF 目标温度数据 2 高 8 位
⑨.Byte xx: 0x00~0xFF 目标温度数据 xx 低 8 位
⑩.Byte xx: 0x00~0xFF 目标温度数据 xx 高 8 位
⑪.Byte1540: 0x00~0xFF MLX90640 自身温度低 8 位
⑫.Byte1541: 0x00~0xFF MLX90640 自身温度高 8 位
⑬. Byte1542: 0x00~0xFF 校验和低 8 位
⑭. Byte1543: 0x00~0xFF 检验和高 8 位
byte0~byte1:帧头
byte2~byte3:该帧的数据量= byte3*256+byte2 (个)
byte4~ byte1539:温度点阵,目标物体 768 个点的温度,每两个字节为一个温度,该温度是实际温度的 100 倍;例如:点 1 的温度=(byte5 *256+byte4)/100 (℃)点 768 的温度=(byte1539 *256+byte1538)/100 (℃)
byte1540~byte1541:MLX90640 自身温度的 100 倍。也可当作环境温度。TA=( byte1541*256+ byte1540)/100(℃)
byte1542~byte1543:前 771 个字的累加和,保留 16bit。
数据计算:
本次使用的是RA6T2的开发板,基于keil开发,使用的传感器为MLX90640,显示设备为2.8寸LCDTFT,通过串口的方式与MLX90640进行通讯。硬件连接:
PB6 USART0 TX 接MLX90640 RX
PB7 USART0 RX接MLX90640 TX
PE1 接LCD TFT SCK
PE2 接LCD TFT SDA
PE3 接LCD TFT RST
PE4 接LCD TFT DC
3.软件设计
初始化2个串口,一个用于调试使用,一个用于接收MLX90640数据。
在中断中处理接收的MLX90640的数据。
- void uart0_callback (uart_callback_args_t * p_args)
- {
- static uint16_t i=0;
- static uint16_t receiveLength=0;
-
- if((p_args->event == UART_EVENT_RX_CHAR)&&(i <1550))
- {
-
- rebuf[i++] = (uint8_t)(p_args->data);
-
- //printf("rebuf[0] is %d,i is %d\r\n",rebuf[0],i);
-
- if(rebuf[0]!=0x5a)//判断帧头
- {
- i=0;
- }
- if((i==2)&&(rebuf[1]!=0x5a))//判断帧头
- {
- i=0;
- }
-
- if(i==4&&(rebuf[3]==0x06))
- {
- receiveLength=((uint16_t )rebuf[3]<<8)|rebuf[2];
- }
-
- if(i>4)//当i计数值=5时,功能字节接受完毕,数据长度字节接收完毕
- {
- if(i==receiveLength+6)
- {
- memcpy(RX_BUF,rebuf,i);
- stata=1;
- i=0;
- }
-
- uart0_rxd_complete_flag = true;
- }
- }
-
- switch (p_args->event)
- {
- // case UART_EVENT_RX_CHAR:
- // {
- // /* 把串口接收到的数据发送回去 */
- // //R_SCI_B_UART_Write(&debug_uart9_ctrl, (uint8_t *)&(p_args->data), 1);
- //
- // rebuf[i++] = (uint8_t)&(p_args->data);
- //
- // R_SCI_B_UART_Write(&debug_uart9_ctrl, &rebuf[0], 100);
- //
- // if(rebuf[0]!=0x5a)//判断帧头
- // {
- // i=0;
- // }
- // if((i==2)&&(rebuf[1]!=0x5a))//判断帧头
- // {
- // i=0;
- // }
- //
- // if(i==4&&(rebuf[3]==0x06))
- // {
- // receiveLength=((uint16_t )rebuf[3]<<8)|rebuf[2];
- // }
- //
- // if(i>4)//当i计数值=5时,功能字节接受完毕,数据长度字节接收完毕
- // {
- // if(i==receiveLength+6)
- // {
- // memcpy(RX_BUF,rebuf,i);
- // stata=1;
- // i=0;
- // }
- // }
- //
- // break;
- // }
- case UART_EVENT_TX_COMPLETE:
- {
- uart0_send_complete_flag = true;
- break;
- }
- default:
- break;
- }
-
- }
复制代码 主函数,LCD显示MLX90640的温度数据,并通过调试串口打印,同时将温度数据转换成热成像的形式显示在屏幕上,
读取温度数据,通过串口打印出,如下所示:
4.效果展示
展示效果如下,由于拍屏幕不好拍只能排成这样,太亮了
mlx90640演示.zip
(9.18 MB, 下载次数: 6)
|
-
-
|