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

news2024/11/27 11:42:48

文章目录

    • 一.概要
    • 二.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.coloradmin.cn/o/2219389.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型常见算子定义

本文将汇总大模型常用的算子定义&#xff0c;方便快速根据定义公式评估其计算量。 LayerNorm 这是在BERT、GPT等模型中广泛使用的LayerNorm&#xff1a; RMSNorm RMSNorm(root mean square)发现LayerNorm的中心偏移没什么用(减去均值等操作)。将其去掉之后&#xff0c;效果几乎…

51系列--人体身高体重BMI指数检测健康秤

本文主要介绍基于51单片机实现的人体身高体重BMI指数检测健康秤称设计&#xff08;程序、电路图、PCB以及文档说明书见文末链接&#xff09; 一、简介 本系统由STC89C52单片机、LCD1602液晶显示、按键、超声波测距、HX711称重传感器模块&#xff08;0-1000KG&#xff09;以及…

O(1)调度算法与CFS

目录 引言 linux内核的O&#xff08;1&#xff09;进程调度算法介绍 主要特点 工作原理 优点 缺点 运行队列 活动队列 过期队列 active指针和expired指针 O(1)调度器&#xff0c;两个队列的机制 两个队列的机制如下&#xff1a; 这个算法后期被CFS替代 CFS 工作原…

进阶篇-Redis集群算法详细介绍

目录 一 、集群是什么1.1 主从复制与集群的架构区别 二、Redis集群的作用三、集群算法3.1.分片-槽位slot3.2 分片是什么3.3如何找到找到给定的key值分片3.4分片的优势 四、槽位映射的三中国解决方案4.1 哈希取余分区算法4.2 哈希一致性算法4.2.1 背景以及概念4.2.2 算法的步骤4…

【Python加密与解密】深入了解Python中的数据加密技术!

Python加密与解密&#xff1a;深入了解Python中的数据加密技术 在现代信息时代&#xff0c;数据加密成为保障网络和通信安全的重要手段之一。无论是在保护个人隐私还是在保证企业数据的安全性方面&#xff0c;加密技术都发挥着关键作用。Python 作为一种流行的编程语言&#x…

(10) GTest c++单元测试(mac版)

文章目录 概要安装实现机制-断言&#xff08;简单、独立的测试&#xff09;实现机制-测试套件实现机制-Test Fixture和事件 概要 官方文档 https://google.github.io/googletest/ 安装 git clone https://github.com/google/googletestcd googletestmkdir build && c…

鸿蒙开发 四十五 鸿蒙状态管理(嵌套对象界面更新)

当运行时的状态变量变化&#xff0c;UI重新渲染&#xff0c;在ArkUI中称为状态管理机制&#xff0c;前提是变量必须被装饰器修饰。不是状态变量的所有更改都会引起刷新&#xff0c;只有可以被框架观测到的更改才会引起UI刷新。其中boolen、string、number类型&#xff0c;可观察…

PyQt 入门教程(3)基础知识 | 3.2、加载资源文件

文章目录 一、加载资源文件1、PyQt5加载资源文件2、PyQt6加载资源文件 一、加载资源文件 常见的资源文件有图像、图标、样式表&#xff0c;下面分别介绍下加载资源文件的常用方法 1、PyQt5加载资源文件 创建.qrc文件&#xff1a; 可以使用QtCreator或手动创建一个.qrc文件&…

注意LED亚型号区分

一. 前言 最近产品试产遇到一次批量事故&#xff1a;全部绿光LED的光功率不达标。最终定位到的原因就是未注意LED的细分型号&#xff0c;试产采用的批次与研发时的亚型号不一样&#xff0c;光功率范围不一致。在此记录下来&#xff0c;供大家做参考&#xff0c;避免走弯路。 …

桂林旅游一点通:SpringBoot平台应用

3系统分析 3.1可行性分析 通过对本桂林旅游景点导游平台实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本桂林旅游景点导游平台采用SSM框架&#xff0c;JAVA作…

uniapp结合uview-ui创建项目

准备工作&#xff1a; 下载HBuilderX;官网地址:HBuilderX-高效极客技巧 安装node.js;官网地址&#xff1a;Node.js — 在任何地方运行 JavaScript,下载所需版本&#xff0c;安装后配置好环境变量即可 方式一&#xff08;NPM安装方式&#xff09;&#xff1a; 1、打开开发者…

OpenRTP 乱序排包和差分抖动计算

OpenRTP 开源地址 OpenRTP 开源地址 暂时使用h264 aac 的音频去测试&#xff0c;点开配置去选择 1 音视频同步问题 先要解决一个音视频同步问题&#xff0c;否则包排不排序都不对&#xff0c;这是因为视频时间戳不一定能够对上音频&#xff0c;为什么呢&#xff1f;因为大部…

前端考试总结

1HTML标签 h标题标签 块级标签 独占一行 p段落标签 同上 br换行标签 单标签 img图片标签 内联标签:不独占一行(src图片地址 alt图片的替代文字 title鼠标悬停提示文字) a超链接标签 同上 (href跳转路径 target属性{_blank新窗口打开 _self在当前窗口打开}) 列表标签(ul无…

诺贝尔物理学奖与机器学习、神经网络:一场跨时代的融合与展望

诺贝尔物理学奖与机器学习、神经网络&#xff1a;一场跨时代的融合与展望 机器学习与神经网络的崛起 机器学习与神经网络的发展前景 机器学习和神经网络的研究与传统物理学的关系 总结 2024年&#xff0c;诺贝尔物理学奖颁给了机器学习与神经网络&#xff0c;这一具有里程碑…

JAVA就业笔记5——第二阶段(2)

课程须知 A类知识&#xff1a;工作和面试常用&#xff0c;代码必须要手敲&#xff0c;需要掌握。 B类知识&#xff1a;面试会问道&#xff0c;工作不常用&#xff0c;代码不需要手敲&#xff0c;理解能正确表达即可。 C类知识&#xff1a;工作和面试不常用&#xff0c;代码不…

房屋租赁管理系统|基于java和小程序的房屋租赁管理系统小程序设计与实现(源码+数据库+文档)

房屋租赁管理系统小程序 目录 基于java和小程序的房屋租赁管理系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设…

asp.net core _ViewStart.cshtml 和 _ViewImports.cshtml

_ViewStart.cshtml asp.net mvc 就出现了 》》/Views/ViewStart.cshtml _ViewStart.cshtml 是默认模板&#xff0c;当页面没有指定 Layout 时&#xff0c;会自动调用此默认模板‌&#xff0c;如果要取消 在当页面设定 &#xff08;如下&#xff09;&#xff0c;则表示 当前页面…

线下陪玩导游系统软件源码,家政预约服务源码(h5+小程序+app)

游戏陪玩系统源码陪玩小程序源码搭建基于PHP&#xff0b;MySQL陪玩系统app源码陪玩系统定制开发服务、成品陪玩系统源码 系统基于Nginx或者Apache PHP7.3 数据库mysql5.6 前端为uniapp-vue2.0 后端为thinkphp6 有域名授权加密&#xff0c;其他开源可二开 演示源码下载 开…

Collection 单列集合 List Set

集合概念 集合是一种特殊类 ,这些类可以存储任意类对象,并且长度可变, 这些集合类都位于java.util中,使用的话必须导包 按照存储结构可以分为两大类 单列集合 Collection 双列集合 Map 两种 区别如下 Collection 单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两…

包子凑数

类似完全背包求方案数&#xff0c;再加上点数论知识&#xff0c;裴蜀定理。 #include<bits/stdc.h> using namespace std; #define int long long #define endl \n const int N300000; bool f[N]; int a[120]; signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.…