当前位置: 首页 > news >正文

STM32传感器模块编程实践(七) MLX90614红外测温模块简介及驱动源码

文章目录

    • 一.概要
    • 二.MLX90614主要技术指标
    • 三.模块参考原理图
    • 四.模块接线说明
    • 五.模块工作原理介绍
    • 六.模块通讯协议介绍
    • 七.STM32单片机与MLX90614模块实现体温测量实验
      • 1.硬件准备
      • 2.软件工程
      • 3.软件主要代码
      • 4.实验效果
    • 八.小结

一.概要

一般来说,测温方式可分为接触式和非接触式,接触式测温只能测量被测物体与测温传感器达到热平衡后的温度,所以响应时间长,且极易受环境温度的影响;而红外测温是根据被测物体的红外辐射能量来确定物体的温度,不与被测物体接触,具有不影响被测物体温度分布场,温度分辨率高、响应速度快、测温范围广、不受测温上限的限制、稳定性好等特点,近年来在家庭自动化、汽车电子、航空和军事上得到越来越广泛的应用。
MLX90614 是一款红外非接触温度计。TO-39 金属封装里同时集成了红外感应热电堆探测器芯片和信号处理专用集成芯片。由于集成了低噪声放大器、17位模数转换器和强大的数字信号处理单元,使得高精度和高分辨度的温度计得以实现。温度计具备出厂校准化,有数字PWM和SMBus(系统管理总线)输出模式。

在这里插入图片描述

二.MLX90614主要技术指标

1.宽温度范围内的出厂校准设置:
传感器温度范围-40…+125 ˚C
物体温度范围-70…+380 ˚C
2.Ta和To 由0到+50°C 温度范围内,精度可达到0.5°C,Ta(芯片测量的环境温度) ,To(物体表面温度),体温需要有环境温度跟表面温度这两个温度才能计算
3.(医用) 高精度校准
4.测量辨析度可达 0.02°C
5.兼容SMBus数字接口
6.客户定制的PWM连续读数输出
7.3V和 5V 电源电压
8.节能工作模式
9.适用于不同应用领域的多种封装方式和测量方式
10.车用级别标准

三.模块参考原理图

MLX90614模块参考原理图如下,主要通过SMBus总线跟单片机进行通讯。
在这里插入图片描述

四.模块接线说明

模块插针如图所示:
在这里插入图片描述

传感器模块MX90614与板子用杜邦线相连板子3.3V<->模块VIN板子GND<->模块GND板子PB10<->模块SCL板子PB11<->模块SDA

五.模块工作原理介绍

传感器内部框图如下所示
在这里插入图片描述

目标温度和环境温度由81101内置的热电偶测定测量,从81101中输出的两路温度信号分别经内部MLX90302 器件上高性能、低噪声的斩波稳态放大器放大再经一个17-bit的模数转换器(ADC)和强大的数字信号处理(DSP)单元后输出。通过SMBus 编程可以更改模块 EEPROM 内的预设值并按照应用要求进行配置,并可以读出EEPROM内的配置信息;还可以读出模块RAM内温度等数据。

在这里插入图片描述

六.模块通讯协议介绍

SMBus总线读取模块数据格式,MLX90614设备地址00h。
在这里插入图片描述

读取RAM地址为07H的时序
在这里插入图片描述

读数据流程:

1.开始
2.发送SlaveAddress
3.发送Ram地址
4.读取数据的低字节Data Byte Low
5.读取数据的高字节Data Byte High
6.读取校验字节
7.发送结束位

流程参考代码

	SMBus_StartBit();//起始信号if(SMBus_SendByte(0x00))//发送MLX90614地址continue;if(SMBus_SendByte(0x06))//发送读MLX90614 RAM地址continue;SMBus_StartBit();//重新启动if(SMBus_SendByte(0x01))//发送数据采集命令continue;TempL=SMBus_ReceiveByte(ACK);//读取低位数据TempH=SMBus_ReceiveByte(ACK);//读取高位数据Pec=SMBus_ReceiveByte(NACK);//读取校验位SMBus_StopBit();//停止信号arr[5]= 0x00;arr[4]= 0x06;arr[3]= 0x01;arr[2]= TempL;arr[1]= TempH;arr[0]= 0;PecReg=PEC_Calculation(arr);//计算CRC校验

环境温度和物体温度的计算

环境温度Ta(输出分辨率为0.02 ˚C,在RAM 06H地址中)
在这里插入图片描述
物体温度 To (输出结果分辨率为 0.02 ˚C,并存于RAM)
在这里插入图片描述

七.STM32单片机与MLX90614模块实现体温测量实验

1.硬件准备

STLINK接STM32F103C8T6开发板,STLINK接电脑USB口。

传感器模块MX90614与板子用杜邦线相连板子3.3V<->模块VIN板子GND<->模块GND板子PB10<->模块SCL板子PB11<->模块SDA

在这里插入图片描述

2.软件工程

打开STM32CubeMX软件,新建工程
在这里插入图片描述
Part Number处输入STM32F103C8,再双击就创建新的工程
在这里插入图片描述
配置下载口引脚
在这里插入图片描述
配置外部晶振引脚
在这里插入图片描述

配置系统主频
在这里插入图片描述

配置工程文件名,保存路径,KEIL5工程输出方式
在这里插入图片描述
生成工程
在这里插入图片描述
用Keil5打开工程
在这里插入图片描述

添加代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.软件主要代码

//读取环境温度,读取物体表面温度
float SMBus_ReadTemp(void)
{   DataTemp=MLX906_ReadInterTemp();//读取环境温度DataTemp*=0.02;DataTemp-=273.15;//换算成温度值WenduZhi=SMBus_ReadMemory(SA, RAM_ACCESS|RAM_TOBJ1)*0.02-273.15;//读取物体表面温度值return (WenduZhi);
}
//ta为环境温度,tf为额温,TBody 为体温,通过额温,环境温度,计算体温
void TF_to_Tbody(void)
{float tf_low, tf_high = 0;float ta;//环境温度float tf;//物体表面温度ta=DataTemp;tf=	WenduZhi;if(ta <= TA_LEVEL){tf_low  = 32.66 + 0.186*(ta-TA_LEVEL);tf_high = 34.84 + 0.148*(ta-TA_LEVEL);}else{tf_low  = 32.66 + 0.086*(ta-TA_LEVEL);tf_high = 34.84 + 0.1*(ta-TA_LEVEL);}if((tf_low <= tf) && (tf <= tf_high)){TBody = 36.3 + 0.5/(tf_high - tf_low)*(tf - tf_low);//计算体温}else if(tf > tf_high){TBody = 36.8 + (0.829321 + 0.002364*ta)*(tf-tf_high);//计算体温}else if(tf < tf_low){TBody =  36.3 + (0.551658 + 0.021525*ta)*(tf-tf_low);//计算体温}
}

main函数代码

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();//8M外部晶振,系统主频72M/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();//初始化时钟SMBus_Init();//IIC总线引脚初始化/* USER CODE BEGIN 2 */OLED_Init();//OLED初始化  OLED_Clear();//清屏/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE */SMBus_ReadTemp();//读取环境温度,表面温度TF_to_Tbody();//温度转换成体温OLED_Clear();//清屏OLED_ShowCHinese(18,0,0);//光OLED_ShowCHinese(36,0,1);//子OLED_ShowCHinese(54,0,2);//物OLED_ShowCHinese(72,0,3);//联OLED_ShowCHinese(90,0,4);//网OLED_ShowCHinese(8,3,5);//红OLED_ShowCHinese(24,3,6);//外OLED_ShowCHinese(40,3,7);//测OLED_ShowCHinese(56,3,8);//温OLED_ShowString(80,3,"TEST");//显示字符串OLED_ShowCHinese(8,6,8);//温OLED_ShowCHinese(24,6,9);//度OLED_ShowCHinese(40,6,10);//值OLED_ShowString(56,6,":");wenduzhengshu=TBody;wenduXiaoshu=TBody*10;wenduXiaoshu=(wenduXiaoshu)%10;OLED_ShowNum(72,6,wenduzhengshu,2,16);//显示整数位OLED_ShowString(88,6,".");OLED_ShowNum(96,6,wenduXiaoshu,1,16);//显示小数位HAL_Delay(1000);//等待1秒/* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

4.实验效果

用手指对准红外测温模块,能看到温度上升到体温附近
在这里插入图片描述

八.小结

MLX90614红外测温模块,通过探测物体红外辐射能量的大小和波长的分布来检测物体的表面温度。学会用STM32驱动MLX90614,可以广泛的用在额温枪、门禁等人体温度项目。


http://www.mrgr.cn/news/54546.html

相关文章:

  • Python语法基础
  • Vue+TypeScript+SpringBoot的WebSocket基础教学
  • 平面声波——一维Helmhotz波动方程
  • 【生物大分子入门】三. 配体分子的提取与结构表示方法
  • 国有企业在薪酬管理方面常出现哪些问题?
  • 倪师学习笔记-天纪-斗数星辰介绍
  • Atlas800昇腾服务器(型号:3000)—CANN安装(二)
  • 【优选算法】探索双指针之美(一):双指针与单调性的完美邂逅
  • 从零开始学PHP之输出语句变量常量
  • 加减乘除计算指令整理
  • uniapp+vue3+uview-plus修改默认样式
  • d3dcompiler_43.dll丢失怎么修复?分享5种实用方法助轻松搞定
  • 有口才的从业者一定是位人才
  • Linux服务器安装SRAToolkit教程
  • 一通瞎写居然击败100%【力扣】【498-对角线遍历】【数组-C语言】
  • 文献分享: Vamana图算法以及面向SSD的DiskANN
  • 第五届机器学习与计算机应用国际学术会议(ICMLCA 2024)
  • Leetcode 1926. 迷宫中离入口最近的出口
  • 数据库产品中审计与日志(Auditing and Logging)的功能简介
  • 计算机指令系统,打个结~
  • 【电子电力】三相逆变器下垂控制单机并离网,并网预同步
  • XGO Rider:全球首创双轮足AI机器人,集成ChatGPT,实现智能互动
  • 基于SSM汽车零部件加工系统的设计
  • 28——循环结构之累加应用(配套练习后续更新~~~~~)
  • 使用 F5-TTS 生成指定人物的声音:一步步指南
  • 国产AI模型“Yi-Lightning”逆袭超越GPT-4!