发新帖本帖赏金 20.00元(功能说明)我要提问
12下一页
返回列表
打印
[活动专区]

【AT-START-F435测评】硬件I2C读取MLX90640热成像

[复制链接]
2043|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 goodjob 于 2023-1-6 10:56 编辑

AT32系列单片机,SRAM普遍比较大,特别是新出的AT32F435/437系列,最大SRAM可达到512K,288MHz主频,可以用来处理稍复杂的图形。有幸收到F435的开发板,马上打样了一块测试板,在这里先测试一下硬件I2C、大容量SRAM的图形性能。

测试板带了一个ST7789的屏,分辨率为320*240,因SRAM充足,直接使用双帧缓冲,占用300K(SRAM大就是爽,想怎么玩就怎么玩)。

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


MLX90640驱动也很简单,直接将I2C读写函数插入即可:
int MLX90640_I2CRead(uint8_t slaveAddr, uint16_t startAddress,uint16_t nMemAddressRead, uint16_t *data)
{
        uint8_t sa;
        int ack = 0;
        int cnt = 0;
        int i = 0;
        char cmd[2] = {0,0};
        char i2cData[1664] = {0};
        uint16_t *p;
        p = data;
        u16 len=nMemAddressRead*2;
        ack=i2c_memory_read(&hi2cx,I2C_MEM_ADDR_WIDIH_16,slaveAddr<<1,startAddress,(uint8_t *)i2cData,nMemAddressRead<<1,I2C_TIMEOUT);
        if(ack != 0)
        {
                        return -1;
        }
        for(cnt=0; cnt < nMemAddressRead; cnt++)
        {
                        i = cnt << 1;
                        *p++ = (int)i2cData[i]*256 + (int)i2cData[i+1];
        }
        return 0;
}

int MLX90640_I2CWrite(uint8_t slaveAddr, uint16_t writeAddress, uint16_t data)
{
        
    uint8_t sa;
    int ack = 0;
    u8 cmd[4] = {0,0,0,0};
    static uint16_t dataCheck;

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

AT_START_435_90640.rar (8.9 MB)

使用特权

评论回复

打赏榜单

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

评论
forgot 2023-1-17 09:04 回复TA
优秀!! 
沙发
qintian0303| | 2023-1-19 16:32 | 只看该作者
在之前有使用GD32F303,刷新有点慢,这个后续我也实现下

使用特权

评论回复
板凳
lzbf| | 2023-2-2 09:55 | 只看该作者
MLX90640的测量速率最高可以达到 64Hz?

使用特权

评论回复
地板
jtracy3| | 2023-2-2 10:03 | 只看该作者
MLX90640价格并不便宜              

使用特权

评论回复
5
xiaoyaodz| | 2023-2-2 10:59 | 只看该作者
MLX90640是 经济高效的替代方案。

使用特权

评论回复
6
linfelix| | 2023-2-2 12:05 | 只看该作者
测量的精度是如何实现的?              

使用特权

评论回复
7
nomomy| | 2023-2-2 12:35 | 只看该作者
MLX90640最大的测量距离是多少?

使用特权

评论回复
8
nomomy| | 2023-2-2 16:01 | 只看该作者
这个驱动的效果一般呢.              

使用特权

评论回复
9
jtracy3| | 2023-2-4 09:19 | 只看该作者
怎么显示热力图哪种形势呢?              

使用特权

评论回复
10
lzbf| | 2023-2-4 10:43 | 只看该作者
快的速率时的噪声会越大,导致灵敏度下降

使用特权

评论回复
11
mickit| | 2023-2-4 12:11 | 只看该作者
MLX90640怎么开发成为测温传感器?

使用特权

评论回复
12
uiint| | 2023-2-4 12:30 | 只看该作者
可以实现无接触测量问题吗?              

使用特权

评论回复
13
tabmone| | 2023-2-4 12:49 | 只看该作者
这个可以做测量问题的吗?              

使用特权

评论回复
14
robertesth| | 2023-2-4 13:41 | 只看该作者
MLX90640热成像怎么显示呢?

使用特权

评论回复
15
mnynt121| | 2023-2-4 14:22 | 只看该作者
怎么实现人体识别呢?              

使用特权

评论回复
16
iyoum| | 2023-2-4 14:41 | 只看该作者
使用iic+dma可以驱动MLX90640吗?

使用特权

评论回复
17
hudi008| | 2023-2-4 16:10 | 只看该作者
32*24怎么铺满所有的 lcd呢?

使用特权

评论回复
18
gygp| | 2023-2-4 16:31 | 只看该作者
MLX90640的有效探测距离大约多少?  

使用特权

评论回复
19
timfordlare| | 2023-2-4 17:12 | 只看该作者
MLX90640红外摄像头模块怎么连F435

使用特权

评论回复
20
goodjob|  楼主 | 2023-2-5 11:27 | 只看该作者
jtracy3 发表于 2023-2-4 09:19
怎么显示热力图哪种形势呢?

我用的是色卡查表。比如把要显示的温度段分成255级,再建一个255级的色卡,直接查表显示对应颜色

使用特权

评论回复
发新帖 本帖赏金 20.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

54

帖子

0

粉丝