MLX90640测温系统的实现

1 背景

疫情蔓延,在家无事,看着别人玩动态测温挺好玩,自己也试着玩一把,160*120的红外热电堆太贵,就拿MLX90640试试吧,终于,在一个星期忙碌后,完成了基于MLX90640和STM32的动态测温,包括上位机的调试,在这里给大家分享下。
在这里插入图片描述
在这里插入图片描述

2硬件调试

我采用的是STM32F103的核心版,买来很早了,便宜,把传感器插到I2C1上,PB6&PB7,vcc和GND 也分别接上去,就可以调试了,在此比较郁闷的是MLX90640的资料太少了,没办法只能看英文,勉勉强强搞定了,推介大家如果STM32 用的版本比较老,还是用固件好一些,STM32CUBEMX太坑了,我差点死在USB驱动上,后来才发现,还是串口好用。。。接下来就分享下代码吧:
int main(void)
{
int i;
static uint16_t eeMLX90640[832];
uint16_t frame[834];
float Ta,tr;
float emissivity=0.95;
static float mlx90640To[768];
u32 CheckCode;
paramsMLX90640 mlx90640;
char szMsg[64];
/test led/
LEDFlash(2);
/end test led/
//UART1_PutStr(USART1, “@Start to Run…\r\n”);

MLX90640_SetRefreshRate(MLX_I2C_ADDR, RefreshRate);
//UART1_PutStr(USART1, "@1..\r\n");
MLX90640_SetChessMode(MLX_I2C_ADDR);
//UART1_PutStr(USART1, "@2..\r\n");
MLX90640_DumpEE(MLX_I2C_ADDR, eeMLX90640);
//UART1_PutStr(USART1, "@3..\r\n");
MLX90640_ExtractParameters(eeMLX90640, &mlx90640);
//UART1_PutStr(USART1, "@4..\r\n");

for(i=0;i<3;i++)
{
		MLX90640_GetFrameData(MLX_I2C_ADDR, frame);
		delay_ms(500);
}

delay_ms(1000);

while (1)
{
MLX90640_GetFrameData(MLX_I2C_ADDR, frame);
Ta = MLX90640_GetTa(frame, &mlx90640);
tr = Ta - TA_SHIFT;
MLX90640_CalculateTo(frame, &mlx90640, emissivity, tr, mlx90640To);

		//LSB first, MSB behind
		CheckCode=0x5A5A;
		CheckCode+=0x0602;
		for(i=0;i<768;i++)
		{
			UsartBuff[i*2+4]= (u16)(mlx90640To[i]*100)
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值