野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 142|回复: 0

【野火】第二期瑞萨RA MCU创意氛围赛 +热成像

[复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式
1.简介



热成像仪是利用黑体辐射定律,物体的温度越高,所发出的红外辐射能力越强, 经过芯片处理得到温度数据。应用建筑检测,电气维护,安全监控,工厂测试,如机器温升测试等场合,能够提供非接触式的温度测量,帮助监测热异常和预防故障。本次使用RA6T2开发板读取MLX90640红外测温传感器的温度,显示在LCD屏幕上,便于测试设备的温度。


2.系统设计


mlx90640有两种方式读取数据,即串口( TTL 电平)或者 I2C(芯片本身)通信方式。该产品测温点阵数量多,像素高。能在一般的环境分辨出人体型。串口的波特率有 9600bps 与 115200bps和 460800bps,有连续输出与询问输出两种方式,可适应不同的工作环境。模块保留了 MLX90640 芯片本身的 I2C 接口,把模块 PS 接 GND 或者 SET 点焊接上,模块本身 MCU 不工作,可以经过 I2C 直接操作 MLX90640。本次使用的是串口的方式,需要接RX,TX,以及电源即可。
野火论坛202412150040552309..png
输出格式:

模块输出格式,每帧包含 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。
数据计算:
野火论坛202412150047472145..png


本次使用的是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


野火论坛202412150244326318..png

3.软件设计
初始化2个串口,一个用于调试使用,一个用于接收MLX90640数据。
野火论坛202412150256012892..png
在中断中处理接收的MLX90640的数据。
  1. void uart0_callback (uart_callback_args_t * p_args)
  2. {
  3.                 static uint16_t i=0;
  4.           static        uint16_t receiveLength=0;
  5.        
  6.                 if((p_args->event == UART_EVENT_RX_CHAR)&&(i <1550))
  7.                 {
  8.                
  9.                         rebuf[i++] = (uint8_t)(p_args->data);
  10.                
  11.                         //printf("rebuf[0] is %d,i is %d\r\n",rebuf[0],i);
  12.                        
  13.                         if(rebuf[0]!=0x5a)//判断帧头
  14.                         {
  15.                                 i=0;
  16.                         }
  17.                         if((i==2)&&(rebuf[1]!=0x5a))//判断帧头
  18.                         {
  19.                                 i=0;
  20.                         }
  21.                
  22.                         if(i==4&&(rebuf[3]==0x06))
  23.                         {
  24.                                 receiveLength=((uint16_t )rebuf[3]<<8)|rebuf[2];
  25.                         }
  26.                        
  27.                         if(i>4)//当i计数值=5时,功能字节接受完毕,数据长度字节接收完毕
  28.                         {
  29.                                 if(i==receiveLength+6)
  30.                                 {
  31.                                         memcpy(RX_BUF,rebuf,i);
  32.                                         stata=1;
  33.                                         i=0;
  34.                                 }
  35.                                
  36.                                 uart0_rxd_complete_flag = true;
  37.                         }

  38.                 }
  39.        
  40.            switch (p_args->event)
  41.     {
  42. //        case UART_EVENT_RX_CHAR:
  43. //        {
  44. //            /* 把串口接收到的数据发送回去 */
  45. //            //R_SCI_B_UART_Write(&debug_uart9_ctrl, (uint8_t *)&(p_args->data), 1);
  46. //                                       
  47. //                                                rebuf[i++] = (uint8_t)&(p_args->data);
  48. //                                       
  49. //                                                R_SCI_B_UART_Write(&debug_uart9_ctrl, &rebuf[0], 100);
  50. //                                       
  51. //                                                if(rebuf[0]!=0x5a)//判断帧头
  52. //                                                {
  53. //                                                        i=0;
  54. //                                                }
  55. //                                                if((i==2)&&(rebuf[1]!=0x5a))//判断帧头
  56. //                                                {
  57. //                                                        i=0;
  58. //                                                }
  59. //                                       
  60. //                                          if(i==4&&(rebuf[3]==0x06))
  61. //                                          {
  62. //                                                        receiveLength=((uint16_t )rebuf[3]<<8)|rebuf[2];
  63. //                                          }
  64. //                                               
  65. //                                                if(i>4)//当i计数值=5时,功能字节接受完毕,数据长度字节接收完毕
  66. //                                                {
  67. //                                                        if(i==receiveLength+6)
  68. //                                                        {
  69. //                                                                memcpy(RX_BUF,rebuf,i);
  70. //                                                                stata=1;
  71. //                                                                i=0;
  72. //                                                        }
  73. //                                                }
  74. //                                               
  75. //            break;
  76. //        }
  77.         case UART_EVENT_TX_COMPLETE:
  78.         {
  79.             uart0_send_complete_flag = true;
  80.             break;
  81.         }
  82.         default:
  83.             break;
  84.     }
  85.        
  86. }


复制代码
主函数,LCD显示MLX90640的温度数据,并通过调试串口打印,同时将温度数据转换成热成像的形式显示在屏幕上,
野火论坛202412150300048546..png
野火论坛202412150300423284..png
读取温度数据,通过串口打印出,如下所示:
野火论坛202412150301222792..png

4.效果展示
展示效果如下,由于拍屏幕不好拍只能排成这样,太亮了
野火论坛202412150301546051..png
野火论坛202412150302484181..png
野火论坛202412150303077597..png

mlx90640演示.zip (9.18 MB, 下载次数: 6)

野火论坛202412150245586144..png
野火论坛202412150245508269..png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-12-22 01:08 , Processed in 0.137220 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表