12下一页
返回列表 发新帖我要提问本帖赏金: 20.00元(功能说明)

[活动专区] 【AT-START-F435测评】硬件I2C读取MLX90640热成像

[复制链接]
3588|27
 楼主| goodjob 发表于 2023-1-5 22:13 | 显示全部楼层 |阅读模式
本帖最后由 goodjob 于 2023-1-6 10:56 编辑

AT32系列单片机,SRAM普遍比较大,特别是新出的AT32F435/437系列,最大SRAM可达到512K,288MHz主频,可以用来处理稍复杂的图形。有幸收到F435的开发板,马上打样了一块测试板,在这里先测试一下硬件I2C、大容量SRAM的图形性能。
IMG_20230105_213042.jpg
测试板带了一个ST7789的屏,分辨率为320*240,因SRAM充足,直接使用双帧缓冲,占用300K(SRAM大就是爽,想怎么玩就怎么玩)。

热成像用的MLX90640,使用I2C通信,在这里使用了I2C2,引脚为PH2和PH3。
I2C读写非常简单,直接使用I2C例程中的i2c_application即可。特别赞一下,官方AN0091文档提供了一个I2C时钟配置工具,非常方便。

微信截图_20230105220113.png
MLX90640驱动也很简单,直接将I2C读写函数插入即可:
  1. int MLX90640_I2CRead(uint8_t slaveAddr, uint16_t startAddress,uint16_t nMemAddressRead, uint16_t *data)
  2. {
  3.         uint8_t sa;
  4.         int ack = 0;
  5.         int cnt = 0;
  6.         int i = 0;
  7.         char cmd[2] = {0,0};
  8.         char i2cData[1664] = {0};
  9.         uint16_t *p;
  10.         p = data;
  11.         u16 len=nMemAddressRead*2;
  12.         ack=i2c_memory_read(&hi2cx,I2C_MEM_ADDR_WIDIH_16,slaveAddr<<1,startAddress,(uint8_t *)i2cData,nMemAddressRead<<1,I2C_TIMEOUT);
  13.         if(ack != 0)
  14.         {
  15.                         return -1;
  16.         }
  17.         for(cnt=0; cnt < nMemAddressRead; cnt++)
  18.         {
  19.                         i = cnt << 1;
  20.                         *p++ = (int)i2cData[i]*256 + (int)i2cData[i+1];
  21.         }
  22.         return 0;
  23. }

  1. int MLX90640_I2CWrite(uint8_t slaveAddr, uint16_t writeAddress, uint16_t data)
  2. {
  3.         
  4.     uint8_t sa;
  5.     int ack = 0;
  6.     u8 cmd[4] = {0,0,0,0};
  7.     static uint16_t dataCheck;

  8.                 cmd[0] = data >> 8;
  9.     cmd[1] = data & 0x00FF;
  10.                
  11.                 ack=i2c_memory_write(&hi2cx,I2C_MEM_ADDR_WIDIH_16,slaveAddr<<1,writeAddress,cmd,2,I2C_TIMEOUT);
  12.                 if(ack != 0)
  13.     {
  14.         return -1;
  15.     }
  16.                
  17.                 MLX90640_I2CRead(slaveAddr,writeAddress,1, &dataCheck);
  18.                  if ( dataCheck != data)
  19.     {
  20.         return -2;
  21.     }   
  22.                 else return 0;
  23. }
然后在main函数中初始化MLX90640,之后 直接读取数据即可。
  1. MLX90640_Init();
  1. MLX90640_GetData();
因为MLX90640分辨率为32*24,为了显示更清楚,充分利用AT32F435的高主频优势,将图像线性放大了8倍,最终实现了约16帧每秒的刷新速度。
因图像显示部分涉及本人项目,分享的代码中不含色卡及显示部分,仅提供读取温度数据相关代码。使用时需要将官方BSP包里面的相关文件夹按下图放在一起。
微信截图_20230105221222.png
AT_START_435_90640.rar (8.9 MB, 下载次数: 52)

打赏榜单

ArterySW 打赏了 20.00 元 2023-01-06
理由:【AT-START-F435测评】硬件I2C读取MLX90640热成像,作品优秀。

评论

优秀!!  发表于 2023-1-17 09:04
qintian0303 发表于 2023-1-19 16:32 | 显示全部楼层
在之前有使用GD32F303,刷新有点慢,这个后续我也实现下
lzbf 发表于 2023-2-2 09:55 | 显示全部楼层
MLX90640的测量速率最高可以达到 64Hz?
jtracy3 发表于 2023-2-2 10:03 | 显示全部楼层
MLX90640价格并不便宜              
xiaoyaodz 发表于 2023-2-2 10:59 | 显示全部楼层
MLX90640是 经济高效的替代方案。
linfelix 发表于 2023-2-2 12:05 | 显示全部楼层
测量的精度是如何实现的?              
nomomy 发表于 2023-2-2 12:35 | 显示全部楼层
MLX90640最大的测量距离是多少?
nomomy 发表于 2023-2-2 16:01 | 显示全部楼层
这个驱动的效果一般呢.              
jtracy3 发表于 2023-2-4 09:19 | 显示全部楼层
怎么显示热力图哪种形势呢?              
lzbf 发表于 2023-2-4 10:43 | 显示全部楼层
快的速率时的噪声会越大,导致灵敏度下降
mickit 发表于 2023-2-4 12:11 | 显示全部楼层
MLX90640怎么开发成为测温传感器?
uiint 发表于 2023-2-4 12:30 | 显示全部楼层
可以实现无接触测量问题吗?              
tabmone 发表于 2023-2-4 12:49 | 显示全部楼层
这个可以做测量问题的吗?              
robertesth 发表于 2023-2-4 13:41 | 显示全部楼层
MLX90640热成像怎么显示呢?
mnynt121 发表于 2023-2-4 14:22 | 显示全部楼层
怎么实现人体识别呢?              
iyoum 发表于 2023-2-4 14:41 | 显示全部楼层
使用iic+dma可以驱动MLX90640吗?
hudi008 发表于 2023-2-4 16:10 | 显示全部楼层
32*24怎么铺满所有的 lcd呢?
gygp 发表于 2023-2-4 16:31 | 显示全部楼层
MLX90640的有效探测距离大约多少?  
timfordlare 发表于 2023-2-4 17:12 | 显示全部楼层
MLX90640红外摄像头模块怎么连F435
 楼主| goodjob 发表于 2023-2-5 11:27 | 显示全部楼层
jtracy3 发表于 2023-2-4 09:19
怎么显示热力图哪种形势呢?

我用的是色卡查表。比如把要显示的温度段分成255级,再建一个255级的色卡,直接查表显示对应颜色
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

58

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部