MPL3115A2大气压温度采集芯片的工作原理与特点详解

news2024/9/22 17:19:42

目录

一、引言

二、MPL3115A2主要特点和功能

三、主要优势

3.1 内部自动补偿

3.2 FIFO

四、硬件原理图

4.1 硬件连接

五、软件配置

六、资料获取


一、引言

MPL3115A2是一款高精度的大气压力传感器,能够测量大气压力、海拔高度和温度。它采用了MEMS(微机电系统)技术,具有低功耗和高精确度的特点

MPL3115A2的核心部分是一个压阻式的压力敏感元件,它的电阻值随着外界压力的变化而变化。通过一个高精度的模数转换器(ADC),将电阻值转换为数字信号,然后通过I2C总线接口输出给外部设备

MPL3115A2有两种工作模式,气压计模式和高度计模式,在不同的工作模式下,输出的数据含义不同。在气压计模式下,输出的数据表示当前的大气压力值,单位是Pa(帕斯卡)。在高度计模式下,输出的数据表示当前的海拔高度值,单位是m(米)

MPL3115A2的工作模式可以通过控制寄存器0x26来设置,其中的ALT位决定了是气压计模式还是高度计模式。如果ALT位为0,表示气压计模式;如果ALT位为1,表示高度计模式

MPL3115A2还有一些其他的功能,如过采样设置、FIFO数据模式、中断输出等,可以通过其他的控制寄存器来配置。具体的寄存器地址和功能说明,可以参考MPL3115A2的芯片手册。

二、MPL3115A2主要特点和功能

特点

功能

高精度/高分辨率

可测量气压范围为20 kPa至110 kPa,分辨率高达1.5 Pa。

数字输出

通过I2C接口与主控芯片进行数据交互,将气压和温度信息以数字信号的形式输出。

可配置性

MPL3115A2可以设置不同的工作模式(气压计模式或高度计模式)、过采样率(1到128)、数据更新频率(1秒到9小时)等,满足不同的应用需求

FIFO功能

MPL3115A2可以存储最多32组气压和温度数据,支持FIFO中断和数据溢出检测,实现自动数据采集

低功耗

在待机模式下,电流消耗典型值2 uA,在激活模式下,电流消耗典型值8.5 uA

内部自动补偿

MPL3115A2通过内置温度传感器对MEMS压力传感器进行温度补偿,提高精度和稳定性。

小尺寸

MPL3115A2采用5mmx3mmx1.1mm的LGA封装,占用空间小,便于集成

特别注意:

海拔高度的参考标准是依据标准大气压来确定的。标准大气压是指在标准大气条件下海平面的气压,其数值为101.325kPa。这个压强单位被记作atm,是衡量大气压强的标准单位。

标准大气压受以下三个因素的影响:

  • 海拔高度:海拔越高,大气层越薄,空气重力越小,因此气压越低。一般来说,每上升9米,气压就会降低100Pa。
  • 大气温度:温度越高,空气分子的热运动越剧烈,空气密度越小,因此气压越低。一般来说,气温每升高1℃,气压就会降低0.4%。
  • 大气密度:密度越大,空气分子的数量越多,空气重力越大,因此气压越高。大气密度受温度、湿度、纬度等因素的影响。

因此,在一天中不同时间进行海拔高度测试时,可能会观察到明显的差异,甚至达到十几米。为确保数据的准确性,建议收集一天内不同时间的大气压数据作为参考,并采用适当的校准算法进行合理校准。

 

三、主要优势

3.1 内部自动补偿

MPL3115A2内部是通过一个片上的温度传感器来对MEMS压力传感器进行温度补偿的。温度传感器可以测量当前的环境温度,并将其输入到一个高分辨率的24位模数转换器中,与压力传感器的输出一起进行数字化处理。然后,通过一个内部的算法,根据温度的变化,对压力值或高度值进行校准,以提高精度和稳定性。MPL3115A2的内部处理消除了系统MCU的补偿和单位转换负载,从而简化了系统设计。

3.2 FIFO

MPL3115A2的FIFO功能是一种数据缓存机制,可以让模块存储最多32组气压和温度数据,按照先进先出的原则进行读取。FIFO功能有以下几个优点:

  • 对连续的数据流进行缓存,防止在传输和处理时丢失数据
  • 数据集中起来进行传输和处理,可避免频繁的总线操作,减轻CPU的负担
  • 允许系统进行DMA操作,提高数据的传输速度

要使用FIFO功能,您需要注意以下几点:

  • 您需要设置控制寄存器2(0x27)的FIFOMODE位为1,来启用FIFO数据模式
  • 您需要设置数据配置寄存器(0x13)的DREM、PDEFE和TDEFE位为1,来允许数据覆盖、数据准备好和FIFO溢出的事件更新标志
  • 您需要读取FIFO状态寄存器(0x0D)的F_WMRK_FLAG和F_OVF位,来检查FIFO是否达到设定的水位或者是否发生溢出
  • 您可以通过控制寄存器2(0x27)的F_WMRK位来设置FIFO的水位,从0到31,表示FIFO中的数据个数。当FIFO中的数据个数达到或超过设定的水位时,F_WMRK_FLAG标志位就会置1,表示FIFO已满或接近满。您可以通过读取FIFO状态寄存器(0x0D)的F_WMRK_FLAG位来检查FIFO的水位状态,如果为1,就可以读取FIFO中的数据,如果为0,就表示FIFO中的数据还不够多
  • 当FIFO中的数据个数超过32时,F_OVF标志位就会置1,表示FIFO已经满了,无法再存储新的数据。您可以通过读取FIFO状态寄存器(0x0D)的F_OVF位来检查FIFO是否溢出,如果为1,就表示需要清空FIFO中的数据,或者设置FIFO清除位(FIFOMODE的第一位)来自动清除FIFO中的数据
  • 您需要读取OUT_P_MSB寄存器(0x01)的值,来获取FIFO中的气压和温度数据。该寄存器的值会轮流按照“气压值/高度值高字节→中字节→低字节→温度高字节→低字节→下一组值的气压/高度值高字节”的形式一直循环读取,直到读取完毕所有FIFO数据的值

四、硬件原理图

4.1 硬件连接

MPL3115A2模块可以通过I2C接口与单片机进行连接。模块上有四个引脚,分别是VCC、GND、SCL和SDA。VCC和GND分别连接到开发板的电源和地,SCL和SDA分别连接到单片机的I2C时钟和数据线。模块的I2C地址是0x60。而I2C协议中,每个设备的地址都要左移一位,然后最低位用来表示读写操作。0表示写,1表示读。因此,0x60左移一位得到0xc0,表示写操作,0x60左移一位再加1得到0xc1,表示读操作。

五、软件配置

MPL3115A2模块需要配置一些寄存器来设置工作模式、过采样率、数据更新频率等参数。主要的寄存器有以下几个:

CTRL_REG1(0x26):控制寄存器1,用于设置工作模式(气压计模式或高度计模式)、过采样率(1到128)、激活模式(开始采样)或待机模式(停止采样)等。

CTRL_REG2(0x27):控制寄存器2,用于设置数据更新模式(单次采样或FIFO采样)、FIFO清除、软件复位等。

PT_DATA_CFG(0x13):数据配置寄存器,用于设置数据更新状态置位允许,即允许哪些情况产生事件更新标志,如数据覆盖、数据准备好、FIFO溢出等。

STATUS(0x00):状态寄存器,用于查看数据更新状态,即是否有事件更新标志,如数据覆盖、数据准备好、FIFO溢出等。

OUT_P_MSB(0x01):气压值或高度值的高字节寄存器,用于读取气压值或高度值的高8位。

OUT_P_CSB(0x02):气压值或高度值的中字节寄存器,用于读取气压值或高度值的中8位。

OUT_P_LSB(0x03):气压值或高度值的低字节寄存器,用于读取气压值或高度值的低4位。

OUT_T_MSB(0x04):温度值的高字节寄存器,用于读取温度值的高8位。

OUT_T_LSB(0x05):温度值的低字节寄存器,用于读取温度值的低4位。

 示例代码

现在我们将为您展示如何使用Arduino读取MPL3115A2传感器的数据。

  • 首先,您需要在Arduino IDE中导入Wire库,用于实现I2C通信。您可以在文件菜单中选择“导入库”-“Wire”,或者在代码中添加#include <Wire.h>语句。
  • 然后,您需要定义MPL3115A2的I2C地址和寄存器地址,以及一些常量和变量,用于设置和读取传感器的数据。您可以参考以下代码:
// 定义I2C地址
#define MPL3115A2_ADDRESS 0x60

// 定义寄存器地址
#define CTRL_REG1 0x26
#define CTRL_REG2 0x27
#define PT_DATA_CFG 0x13
#define STATUS 0x00
#define OUT_P_MSB 0x01
#define OUT_P_CSB 0x02
#define OUT_P_LSB 0x03
#define OUT_T_MSB 0x04
#define OUT_T_LSB 0x05

// 定义工作模式
#define MODE_BAROMETER 0x00 // 气压计模式
#define MODE_ALTIMETER 0x80 // 高度计模式

// 定义过采样率
#define OSR_1 0x00 // 1
#define OSR_2 0x08 // 2
#define OSR_4 0x10 // 4
#define OSR_8 0x18 // 8
#define OSR_16 0x20 // 16
#define OSR_32 0x28 // 32
#define OSR_64 0x30 // 64
#define OSR_128 0x38 // 128

// 定义数据更新模式
#define DATA_SINGLE 0x00 // 单次采样
#define DATA_FIFO 0x40 // FIFO采样

// 定义数据更新状态
#define DATA_READY 0x08 // 数据准备好
#define DATA_OVERWRITE 0x10 // 数据覆盖

// 定义气压和温度变量
float pressure; // 气压值,单位为Pa
float temperature; // 温度值,单位为°C

  • 接下来,您需要编写I2C读写函数,用于与传感器进行通信,读取或写入它的内部寄存器。您可以参考以下代码:
// 定义I2C读写函数
void I2C_Write(uint8_t addr, uint8_t reg, uint8_t data) {
  // 向指定的I2C地址和寄存器写入一个字节的数据
  Wire.beginTransmission(addr); // 开始传输
  Wire.write(reg); // 写入寄存器地址
  Wire.write(data); // 写入数据
  Wire.endTransmission(); // 结束传输
}

uint8_t I2C_Read(uint8_t addr, uint8_t reg) {
  // 从指定的I2C地址和寄存器读取一个字节的数据
  Wire.beginTransmission(addr); // 开始传输
  Wire.write(reg); // 写入寄存器地址
  Wire.endTransmission(false); // 结束传输,但不释放总线
  Wire.requestFrom(addr, (uint8_t)1); // 请求一个字节的数据
  return Wire.read(); // 读取数据
}
  • 然后,您需要编写MPL3115A2初始化函数,用于设置传感器的工作模式、过采样率和数据更新模式。您可以参考以下代码
// 定义MPL3115A2初始化函数
void MPL3115A2_Init(uint8_t mode, uint8_t osr, uint8_t data_mode) {
  // 初始化MPL3115A2模块,设置工作模式、过采样率和数据更新模式
  uint8_t ctrl_reg1, ctrl_reg2, pt_data_cfg;
  ctrl_reg1 = mode | osr; // 设置工作模式和过采样率
  ctrl_reg2 = data_mode; // 设置数据更新模式
  pt_data_cfg = DATA_READY | DATA_OVERWRITE; // 设置数据更新状态置位允许
  I2C_Write(MPL3115A2_ADDRESS, CTRL_REG1, ctrl_reg1); // 写入控制寄存器1
  I2C_Write(MPL3115A2_ADDRESS, CTRL_REG2, ctrl_reg2); // 写入控制寄存器2
  I2C_Write(MPL3115A2_ADDRESS, PT_DATA_CFG, pt_data_cfg); // 写入数据配置寄存器
}
  • 最后,您需要在主函数中调用上述函数,完成传感器的初始化。您可以参考以下代码
// 定义主函数
void setup() {
  // 初始化串口和I2C
  Serial.begin(9600);
  Wire.begin();
  // 初始化MPL3115A2
  MPL3115A2_Init(MODE_BAROMETER, OSR_128, DATA_SINGLE); // 设置为气压计模式,过采样率为128,单次采样模式
  Serial.println("MPL3115A2 initialized"); // 打印初始化信息
}

六、资料获取

通过点击以下链接,您可以获取STM32单片机读取MPL3115A2传感器模块原理图、源代码以及开发资料。链接地址将为您提供详细的文件资料,以供您进行参考和使用。

如果您在使用过程中遇到任何问题或疑虑,欢迎加我QQ ,一起探讨技术问题,我的QQ号是986571840,加的时候请注明CSDN。

MPL3115A2大气压温度采集模块 - 硬创社 (jlc.com)icon-default.png?t=N7T8https://x.jlc.com/platform/detail/e881619802364fe7b6696deb32631c92

感谢各位用户点赞、分享、在看,这些行为让知识得以更加广泛地传播,从而让更多人受益。

请在转载作品时注明出处,严禁抄袭行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1365542.html

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

相关文章

Redis内存策略:「过期Key删除策略」+ 「内存淘汰策略」

Redis之所以性能强&#xff0c;最主要的原因就是基于内存存储&#xff0c;然而单节点的Redis其内存大小不宜过大&#xff0c;否则会影响持久化或主从同步的性能。 Redis内存满了&#xff0c;会发生什么&#xff1f; 在Redis的运行内存达到了某个阈值&#xff0c;就会触发内存…

Linux - No space left on device

问题描述 No space left on device 原因分析 说明在服务器设备上的存储空间已经满了&#xff0c;不能再上传或者新建文件夹或者文件等。 解决方案 确认查看服务器系统的磁盘使用情况是否是真的已经没有剩余空间&#xff0c;复制下面命令在服务器上运行&#xff0c;然后发现如果…

CSS 彩虹按钮效果

<template><view class"content"><button class"btn">彩虹按钮</button></view> </template><script></script><style>body{background-color: #000;}.content {margin-top: 300px;}.btn {width: 1…

jenkins忘记密码后的操作

1、先停止 jenkins 服务 systemctl stop jenkins 关闭Jenkins服务 或者杀掉进程 ps -ef | grep jenkins &#xff5c;awk {print $2} | grep -v "grep" | xargs kill -9 2、找到 config.xml 文件 find /root -name config.xml3、备份config.xml文件 cp /root/.jen…

添加一个编辑的小功能(PHP的Laravel)

一个编辑的按钮可以弹出会话框修改断更天数 前台 加一个编辑按钮的样式&#xff0c;他的名字是固定好的 之前有人封装过直接用就好&#xff0c;但是一定放在class里面&#xff0c;不要放在id里面 看见不认识的方法一定要去看里面封装的是什么 之前就是没有看&#xff0c;所以…

包含自动轮播、点击切换、显示图片信息和页码方框显示码数的 HTML 和 JavaScript 示例:

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>轮播图</title><style>#carousel-conta…

hfish蜜罐docker部署

centos 安装 docker-CSDN博客Docker下载部署 Docker是我们推荐的部署方式之一&#xff0c;当前的版本拥有以下特性&#xff1a; 自动升级&#xff1a;每小时请求最新镜像进行升级&#xff0c;升级不会丢失数据。数据持久化&#xff1a;在宿主机/usr/share/hfish目录下建立dat…

AI ppt生成器 Tome

介绍 一款 AI 驱动的 PPT/幻灯片内容辅助生成工具。只需要输入一个标题或者一段特定的描述&#xff0c;AI 便会自动生成一套包括标题、大纲、内容、配图的完整 PPT。 Tome平台只需要用户输入一句话&#xff0c;就可以自动生成完整的PPT&#xff0c;包括文字和图片。功能非常强…

[AutoSar]基础部分 RTE 04 数据类型的定义及使用

目录 关键词平台说明一、数据类型分类二、Adt三、Idt四、Base 数据类型五、units六、compu methods七、data constraint 关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (GCC) 一、数据…

浅谈对Promise的理解。

一、Promise定义 JS中用于处理异步操作的编程模式。一个Promise是一个代理&#xff0c;它代表一个创建Promise时不一定已知的值。它允许我们将处理的程序与异步操作的最终成功值或失败值原因想关联起来。这使得异步方法可以像同步方法一样返回值&#xff1a;异步方法不会立即返…

【数据库分库分表思路】

一、数据切分介绍 关系型数据库本身比较容易成为系统瓶颈&#xff0c;单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后&#xff0c;由于查询维度较多&#xff0c;即使添加从库、优化索引&#xff0c;做很多操作时性能仍下降严重。此时就要考虑对其进…

JavaScript 中的数组过滤

在构建动态和交互式程序时&#xff0c;您可能需要添加一些交互式功能。例如&#xff0c;用户单击按钮以筛选一长串项目。 您可能还需要处理大量数据&#xff0c;以仅返回与指定条件匹配的项目。 在本文中&#xff0c;您将学习如何使用两种主要方法在 JavaScript 中过滤数组。…

4.2V线性500mA充电管理芯片WT4054

4.2V线性500mA充电管理芯片WT4054 WT4054&#xff0c;一款强大而小巧的锂电池充电IC&#xff0c;为你的便携式设备提供无忧充电。其SOT-23-5L封装小巧轻便&#xff0c;所占空间极小&#xff0c;而其强大的功能将为你的设备提供稳定、高效的电量供应。 这款充电器拥有众多令人惊…

第二证券:交易商协会优化 债券持有人集体行动机制

1月2日&#xff0c;交易商协会称&#xff0c;为更好发挥持有人集体行动机制在债券风险及违约处置中的重要作用&#xff0c;交易商协会组织商场成员修订了《银行间债券商场非金融企业债务融资东西持有人会议规程》《银行间债券商场非金融企业债务融资东西附和收集操作指引》&…

汪林望教授将于每周三以互动问答直播形式教您如何用龙讯旷腾计算软件PWmat计算不同材料性质

打开VX→搜索“汪林望计算讲座”&#xff0c;关注汪老师的频道&#xff0c;每周三下午16:00我们准时直播&#xff01; 大家提前准备好问题&#xff0c;可直接提问讨论&#xff0c;当面请教 汪林望教授 中科院半导体所首席科学家 北京龙讯旷腾科技有限公司创始人 美国劳伦斯…

Linux下配置静态ip地址

问题&#xff1a;虚拟机重启后ip地址动态更新&#xff0c;导致连shell十分麻烦 解决&#xff1a; 1. 进入配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 2.1 修改配置 BOOTPROTOstatic ONBOOTyes2.2 新增配置 #ip地址(自定义) IPADDR192.168.149.131 #子网掩码 …

C++入门教程,C++基础教程(第一部分:从C到C++)七

由C语言发展而来的一种面向对象的编程语言。 第一部分、从C语言到C 本章讲述 C 语言的简史&#xff0c;以及 C 语言中与面向对象关系不大、C语言中没有的特性。这些特性能够增加编程的便利性&#xff0c;提高程序的可扩充性。 十三、如何规范地使用C内联函数 inline 关键字…

Marching Cubes算法再回顾

1,确定包含等值面的体元 首先介绍一下 体元的概念&#xff0c;体元是三维图像中由相邻的八个体素点组成的正方体方格&#xff0c;英语也叫 Cube&#xff0c;体元中角点函数值分为两种情况&#xff0c;一种是大于等于给定等值面的值 C0 ,则将角点设为 1 称该角点在等值面内部&a…

在线数字文档签名平台DocuSeal

什么是 DocuSeal &#xff1f; DocuSeal 是一个开源平台&#xff0c;提供安全高效的数字文档签名和处理。允许你创建、填写和签署数字文档✍️&#xff0c;易于使用、并针对移动设备做了优化&#xff0c;是 DocuSign 的开源替代方案。可以将 DocuSeal 与您的产品无缝集成&#…

芯课堂 | LVGL基础知识(四)

概述 LVGL按钮是简单的矩形对象。它们源自容器&#xff0c;因此也可以提供布局和配合。此外&#xff0c;可以启用它以在单击时自动进入检查状态。 LVGL按钮讲解 零件和样式 这些按钮仅具有一种主要样式&#xff0c;称为 LV_BTN_PART_MAIN &#xff0c;并且可以使用以下组中的…