【笔记】MS5837-30BA压力传感器调试笔记

2023-05-16

文章目录

  • 一、MS5837-30BA相关介绍
    • 1.技术参数
    • 2.典型应用电路
    • 3.PROM中的标定参数
  • 二、MS5837-30BA数据解算
    • 1.解算流程图
    • 2.初始化读取标定参数并进行CRC校验
      • ①MS5837复位
      • ②MS5837 CRC4-bit 校验官方示例
      • ③MS5837初始化 读取标定参数
    • 3.标定参数软件补偿并解算数据
      • ①MS5837压力参数补偿
      • ②MS5837温度转换
      • ③MS5837气压转换
    • 3.压力测试

一、MS5837-30BA相关介绍

1.技术参数

  • 陶瓷-金属封装,3.3 x 3.3 x 2.75 mm
  • 高分辨率模块,0.2 mbar (1mbar = 100pa)
  • 快速转换可达 0.5 ms
  • 低功率,0.6 µA(25°C 时待机功率 < 0.1 µA)
  • 集成式数字压力传感器(24 位 ΔΣ ADC
  • 电源电压:1.5 至 3.6 V
  • I2C 接口,地址:1110110x( Write:x = 0,Read:1 = x)
  • 量程:0-30Bar(0-3Mpa)
  • 水深分辨率:2mm

2.典型应用电路

在这里插入图片描述

3.PROM中的标定参数

每一个模块都是工厂在两种温度和两种压力下单独校准的。结果是6个系数必要的补偿过程变化和温度变化是计算和存储在112-bit每个模块的位PROM。MS5837-30BA包含一个112位的PROM存储器。实现了一个4位CRC来检查数据有效性,在内存中这些位(划分为6个系数C1到C6)必须由单片机软件,并在程序中将D1和D2转换成补偿压力和温度的值。系数C0表示工厂配置和CRC。

C0    CRC 与 工厂配置
C1    压力灵敏度 SENS|T1
C2    压力补偿  OFF|T1
C3	  温度压力灵敏度系数 TCS
C4	  温度系数的压力补偿 TCO
C5	  参考温度 T|REF
C6 	  温度系数的温度 TEMPSENS

在这里插入图片描述

二、MS5837-30BA数据解算

1.解算流程图

在这里插入图片描述

2.初始化读取标定参数并进行CRC校验

①MS5837复位

/**
  * @brief  MS583703BA 复位
  * @param  None
  * @retval None
  */
void MS583703BA_RESET(void)
{
	IIC_Start();
	IIC_Send_Byte(MS583703BA_SlaveAddress);//CSB接地,主机地址:0XEE,否则 0X77
    IIC_Wait_Ack();
    IIC_Send_Byte(MS583703BA_RST);//发送复位命令
	IIC_Wait_Ack();
    IIC_Stop();
	
}

②MS5837 CRC4-bit 校验官方示例

/**
  * @brief  MS5837_CRC4校验(4bit校验)【官方数据手册提供】
  * @param  MS5837 PROM标定参数数组
  * @retval 返回CRC校验码
  */
unsigned char MS5837_CRC4(unsigned int n_prom[]) // n_prom defined as 8x unsigned int (n_prom[8])
{
		int cnt; // simple counter
		unsigned int n_rem=0; // crc remainder
		unsigned char n_bit;
		n_prom[0]=((n_prom[0]) & 0x0FFF); // CRC byte is replaced by 0
		n_prom[7]=0; // Subsidiary value, set to 0
		for (cnt = 0; cnt < 16; cnt++) // operation is performed on bytes
		{ // choose LSB or MSB
				if (cnt%2==1) n_rem ^= (unsigned short) ((n_prom[cnt>>1]) & 0x00FF);
				else n_rem ^= (unsigned short) (n_prom[cnt>>1]>>8);
				for (n_bit = 8; n_bit > 0; n_bit--)
				{
						if (n_rem & (0x8000)) n_rem = (n_rem << 1) ^ 0x3000;
						else n_rem = (n_rem << 1);
				}
		}
		n_rem= ((n_rem >> 12) & 0x000F); // final 4-bit remainder is CRC code
		return (n_rem ^ 0x00);
}

③MS5837初始化 读取标定参数


/**
  * @brief  MS5837_Init
  * @param  None
  * @retval 返回MS5837初始化是否成功标志:1成功,0失败
  */

u8 MS5837_Init(void)
{	 
		u8  inth,intl,i;
		u8 CRC_Check = 0;
		for (i=0;i<=6;i++) 
		{
				IIC_Start();
				IIC_Send_Byte(MS583703BA_SlaveAddress);
				IIC_Wait_Ack();
				IIC_Send_Byte(0xA0 + (i*2));
				IIC_Wait_Ack();
				IIC_Stop();

				rt_hw_us_delay(5);
				IIC_Start();
				IIC_Send_Byte(MS583703BA_SlaveAddress+0x01);  //进入接收模式

				rt_hw_us_delay(1);
				IIC_Wait_Ack();
				inth = IIC_Read_Byte(1);  		//带ACK的读数据
				
				rt_hw_us_delay(1);
				intl = IIC_Read_Byte(0); 			//最后一个字节NACK
				IIC_Stop();
				Cal_C[i] = (((uint16_t)inth << 8) | intl);
				rt_kprintf("Cal_C[%d]:%d\r\n",i,Cal_C[i]);
		}
		CRC_Check = (u8)((Cal_C[0]&0xF000)>>12);
		rt_kprintf("CRC:%d   CRC_Check:%d\r\n",MS5837_CRC4(Cal_C),CRC_Check);

		if(CRC_Check == MS5837_CRC4(Cal_C)){

				return true;
		}
		else {return false;}
}

在这里插入图片描述

3.标定参数软件补偿并解算数据

①MS5837压力参数补偿

	//压力补偿参数
	OFF_=(uint32_t)Cal_C[2]*65536+((uint32_t)Cal_C[4]*dT)/128;//压力补偿参数
	SENS=(uint32_t)Cal_C[1]*32768+((uint32_t)Cal_C[3]*dT)/256;

②MS5837温度转换

/**
  * @brief  MS583703BA转换温度结果
  * @param  None
  * @retval None
  */
void MS583703BA_getTemperature(void)
{
	D2_Temp = MS583703BA_getConversion(MS583703BA_D2_OSR_2048);//4096  出现周期性尖峰(300+)     
	
	dT=D2_Temp - (((uint32_t)Cal_C[5])*256);
	MS_TEMP=2000+dT*((uint32_t)Cal_C[6])/8388608;  //问题在于此处没有出现负号
}

③MS5837气压转换

/**
  * @brief  MS583703BA转换气压结果
  * @param  None
  * @retval None
  */
void MS583703BA_getPressure(void)
{
		D1_Pres= MS583703BA_getConversion(MS583703BA_D1_OSR_8192);//2048
		
		OFF_=(uint32_t)Cal_C[2]*65536+((uint32_t)Cal_C[4]*dT)/128;
		SENS=(uint32_t)Cal_C[1]*32768+((uint32_t)Cal_C[3]*dT)/256;
		if(MS_TEMP<2000)  // LOW Temperature
		{
				Aux = (2000-MS_TEMP)*(2000-MS_TEMP);
				T2 = 3*(dT*dT) /0x80000000; 
				OFF2 = (uint32_t)1.5*Aux;
				SENS2 = 5*Aux/8;
				
				OFF_ = OFF_ - OFF2;
				SENS = SENS - SENS2;	
		}
		else{
				Aux = (2000-MS_TEMP)*(2000-MS_TEMP);
				T2=2*(dT*dT)/137438953472;
				OFF2 = 1*Aux/16;
				SENS2 = 0;
				OFF_ = OFF_ - OFF2;
				SENS = SENS - SENS2;	
			 
		}
		MS5837_Pressure = ((D1_Pres*SENS/2097152-OFF_)/8192)/10;
		MS_TEMP = (MS_TEMP-T2)/100;

}


3.压力测试

  • 高于20摄氏度测试
    在这里插入图片描述

  • 不知道为何 温度转换精度超过2048,温度会出现周期性脉冲尖峰,从而导致气压数据异常(还未找到原因)

  • 气压转换精度超过4096,气压数据非常大并且数据不变

  • 最后确定 温度精度为2048,气压精度为4096,数据测试正常 ,测试温度区间:4-50℃

  • 以上问题已经解决,可能是之前 连线不稳定,后面直接接在板子上,以精度8192可以正常读取数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【笔记】MS5837-30BA压力传感器调试笔记 的相关文章

  • Sallen-Key二阶低通滤波器——设计问题浅析

    目录 前言1 Sallen Key二阶低通滤波器结构2 截止频率3 结语 前言 这两天接了个简单的活 xff0c 关于设计一个Sallen Key二阶低通滤波器 xff0c 有一些体会 1 Sallen Key二阶低通滤波器结构 这个结构很
  • VsCode之常见操作01 修改背景颜色

    改变 Vscode的背景颜色 file 61 61 gt preferences 61 61 gt color theme 分别提供了亮色 xff0c 暗色主模版 也可以使用 快捷键 crtl 43 k crtl 43 t 61 61 gt
  • 学习Java一年的心得体会

    趁着这个时间 xff0c 写下我这一年来学习Java的总结 从17年的7月13号至今 xff0c 已经入坑一年了 xff0c 有汗水也有收获 最开始是在淘宝买了个五块钱的JAVA视频教程 xff0c 有基础 xff0c 进阶以及一些实战 说
  • 《Python数据结构与算法分析》读书笔记三——基本数据结构(一)

    文章目录 3 1 本章目标3 2 何谓线性数据结构3 3 栈3 3 1 何谓栈3 3 2 栈抽象数据类型3 3 3 用Python实现栈3 3 4 匹配括号3 3 5 普通情况 xff1a 匹配符号3 3 6 将十进制数转换成二进制数3 3
  • C++数据结构与算法——哈希表实现(链式法)

    解决散列冲突 文件结构字典类概念代码 哈希类概念代码 有序链表概念代码 哈希表实现概念代码 测试主函数代码输出 文件结构 字典类 概念 代码 span class token comment dictionary h span span c
  • Ubuntu编译安装LLVM(13.0.1)

    参考官方教程 xff1a https llvm org docs GettingStarted html 环境要求 我的电脑是Ubuntu 20 04虚拟机 xff0c 看一下官网的要求 xff1a 硬件要求 xff1a 软件要求 xff1
  • Ubuntu 20.04 安装docker报错

    在下载公钥后运行sudo apt update报错 xff0c 错误如图 xff1a 试了这两种方法都不好使 xff1a span class token function sudo span apt key adv keyserver k
  • 超声波传感器知识(第四部分):测量精度的影响

    摘要 xff1a 对于超声波传感器 xff0c 测量精度通常是指模拟输出的测量值的绝对精度 基于回波传输时间 xff0c 超声波传感器的测量精度依靠数个物理参数 这些参数通常与空气和内部偏差相关 对于超声波传感器 xff0c 测量精度通常是
  • STM32学习之旅④ USART串口和上位机通信

    STM32系列博客 xff1a STM32学习之旅 开发环境搭建STM32学习之旅 固件库的使用及工程模板的建立STM32学习之旅 从点灯到代码移植STM32学习之旅 USART串口和上位机通信STM32学习之旅 SPI控制TFT xff0
  • STM32-F407入门学习专题(五) STM32外设之DMA

    目录 1 DMA 2 DMA功能框图 2 1 外设通道选择 2 2 仲裁器 2 3 FIFO 2 4存储器端口 外设端口 3 DMA传输配置 1 DMA DMA xff08 Direct Memory Access xff09 xff0c
  • Linux修改用户名主机名

    首先修改主机名 george 64 George JI sudo vi etc hostname sudo password for george Daiver 修改hosts文件 george 64 George JI sudo vi e
  • SVO2安装,编译和运行q

    一 编译环境配置及安装 github address GitHub uzh rpg rpg svo pro open SVO2是在SVO的基础上的升级版 xff0c 其与SVO的不同在于 xff1a 1 SVO2 0支持透视 xff0c 鱼
  • 【统计学】Q1、Median、Q3含义

    五数概括法 xff08 Five number Summary xff09 是一种对数据离散程度的描述方法 1 Min xff1a 最小值 xff1b 2 Q1 xff1a 第一四分位数 xff08 又称 xff1a 下四分位数 xff0c
  • 【Android安全】Android app开发者证书和代码签名机制

    参考链接 xff1a 安卓证书相关验证机制 xff1a https duanqz github io 2017 09 01 Android Digital Signature xff08 部分内容不准确 xff09 关于META INF文件
  • 【Android安全】IDA 处理伪代码JUMPOUT指令(Undefine + Create Function)

    IDA 处理伪代码JUMPOUT指令 函数被IDA错误合并 IDA分析so时 xff0c 可能会遇到反编译结果不准确的情况 xff0c 如下 xff1a 这里的两个JUMPOUT其实解析有问题 xff0c 如下 xff1a 例如loc 18
  • 【Android安全】小米8刷机、救砖、root教程

    线刷 xff1a 通过计算机上的刷机软件把ROM 通过数据线传输 并安装到手机内存中 ROM包以tgz为后缀 卡刷 xff1a 把所需要的ROM下载或者复制到内存 SD卡根目录中 小米8救砖教程 xff08 线刷 xff09 按照https
  • 【Android抓包】Ubuntu mitmProxy配置

    Ubuntu 安装 mitmProxy 直接使用编译好的二进制包 参考 xff1a https cuiqingcai com 31053 html Linux E4 B8 8B E7 9A 84 E5 AE 89 E8 A3 85 直接下载
  • 【CSDN】查看自己的CSDN积分

    查看自己的CSDN积分 如何查看自己的CSDN博客积分 CSDN藏的比较深 xff0c 链接如下 xff1a https mp csdn net mp blog analysis article all CSDN博客积分与博客等级 参考 x
  • 【符号输入】打出撇号′

    打出撇号 撇号 xff08 apostrophe xff09 xff1a 搜狗输入法调成中文 xff0c 输入fen xff0c 第5个就是撇号
  • 【Android安全】xiaomi手机关闭adb安装应用时的确认提示

    xiaomi手机关闭adb安装应用时的确认提示 为了自动化测试 xff0c 需要关闭adb安装应用时的确认提示 需要分两步来关闭 xff1a 首先 xff0c 开发者选项 gt 启动MIUI优化 gt 关闭 xff08 第一步过后授权管理

随机推荐

  • 【python】报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte in position : illegal multibyte

    python读文件时报错 xff1a Traceback span class token punctuation span most recent call last span class token punctuation span F
  • STM32介绍

    目录 STM32 分类 STM8 和 STM32 分类 STM32 命名方法 STM32F103RCT6 寻找 IO 的功能 存储器映射 存储器 Block0 内部区域功能划分 存储器 Block1 内部区域功能划分 存储器 Block2
  • Putty串口打开无反应

    第一次使用putty的串口 xff0c 可能理所当然认为在Serial那里设置好参数 xff0c 然后点击Open就行了 但是显然不是 xff0c Putty的UI设计有问题 xff0c 不管你点击哪一个项 xff0c Open按钮始终都存
  • 【Android安全】r0capture使用

    r0capture使用 下载地址 xff1a https github com r0ysue r0capture 手机端启动frida server PC端安装frida client 命令 xff1a python r0capture s
  • MobaXterm或Xshell连接不上虚拟机ubuntu

    MobaXterm使用教程 xff1a MobaXterm官网下载 MobaXterm使用教程1 MobaXterm使用教程2 Xshell 使用教程 xff1a 恒源云远程登录Linux实例 包含下载地址和使用教程 Xshell使用教程
  • 591 标签验证器(模拟、栈匹配括号)

    1 问题描述 xff1a 给定一个表示代码片段的字符串 xff0c 你需要实现一个验证器来解析这段代码 xff0c 并返回它是否合法 合法的代码片段需要遵守以下的所有规则 xff1a 代码必须被合法的闭合标签包围 否则 xff0c 代码是无
  • 算法:最长公共子序列

    10 8算法实验报告 最长公共子序列 题目 输出两个字符串的最长公共子序列 要求1 不使用辅助数组 span class token comment 要求1 xff1a 不使用辅助数组 span span class token keywo
  • 呆呆和你谈谈入职CVTE一个月的感受

    呆呆和你谈谈入职CVTE一个月的感受 你盼世界 xff0c 我盼望你无bug Hello 大家好 xff01 我是霖呆呆 xff01 啊啊啊啊啊 至6 18日入职新公司CVTE已经一个多月了 xff0c 在 你盼世界 xff0c 我盼望你无
  • 编程就是调用API?如何成为造轮子的程序员

    是 xff0c 编程就是调用各种API 什么是API xff0c 就是别人把较复杂的代码封装成一个个函数 xff0c 你不用管函数怎么实现的 xff0c 直接用就好 从这个角度讲 xff0c 使用所有库 xff0c 框架 xff0c 模板
  • 【电赛】2019电子设计竞赛 纸张计数显示装置(F题)

    点击 Github项目地址 设计下载 内含 xff1a 电赛论文 程序设计 机械结构设计 硬件电路设计 综合测评相关设计 交互显示设计 设计详细说明 2019年全国大学生电子设计竞赛 纸张计数显示装置 xff08 F题 xff09 本科组
  • 【ARM裸板】LCD硬件原理、时序及初始化

    文章目录 1 LCD与OLED的区别2 LCD原理2 1 颜色如何确定 xff1f 2 2 LCD如何 行扫描 xff1f 2 3 如何跳到下一行进行 行扫描 xff1f 2 4 如何进行下一个 场扫描 xff1f 3 LCD时序4 LCD
  • 【电赛】2019电赛纸张计数显示装置Github仓库说明

    Github项目地址 设计下载 内含 xff1a 电赛论文 程序设计 机械结构设计 硬件电路设计 综合测评相关设计 交互显示设计 设计详细说明 纸张计数显示装置Github仓库说明 x1f604 个人主页 x1f57a 电赛论文 x1f4d
  • 【Linux】mjpg-streamer 源码分析

    文章目录 1 总体流程2 主进程的源码分析2 1 参数接收与解析2 2 获取参数2 3 调用输入函数2 3 1 程序手动中断信号2 3 2 strchr 函数2 3 3 strndup 函数2 3 4 分离参数 3 输入通道源码分析3 1
  • STM32之TIM 舵机控制PWM

    目录 大概步骤 定时器介绍 输入通道 输入滤波器和边沿检测器 捕获通道 定时器初始化结构体详解 1 TIM TimeBaseInitTypeDef 定时器基本初始化结构体 TIM OCInitTypeDef 定时器比较输出初始化结构体 3
  • 【树莓派】树莓派采用MJPG-Streamer双摄推流至上位机,实测延时低至200ms[CSI摄像头+USB摄像头]

    树莓派采用MJPG Streamer双摄推流至上位机 实测延时低至200ms CSI摄像头 43 USB摄像头 总体流程1 硬件连接与软件及驱动配置1 xff09 检测是否存在USB摄像头设备2 xff09 安装 MJPG Streamer
  • 【DIY】基于OpenMV的STM32追球小车

    目录 xff1a 总体设计1 基础硬件DIY设计1 xff09 整体原理图2 xff09 PCB电路 2 OpenMV简单识别程序设计 与 STM32控制程序设计1 xff09 OpenMV简单识别程序设计 microPython 2 xf
  • 【电赛】2017年电赛A题——三相逆变电源EG8030测试

    目录 xff1a 一 相关简介二 专用逆变芯片E8030控制板三 驱动板四 实物测试 xff1a Github项目地址 设计下载 注 xff1a 本文仅用于学习交流分享 xff0c 若有不妥之处 xff0c 请指正 xff0c 感谢 关键词
  • 【STM32】STM32 OLED打点划线画圆 OLED电子罗盘 程序

    目录 xff1a 一 画点函数二 动态划线效果演示 xff1a 三 画圆函数效果演示 四 实心圆函数 注 xff1a 本文仅用于学习分享 用到的工具 xff1a STM32 MCU Keil 5 用到的库函数为 正点原子 STM32F4 库
  • 【STM32】OV2640摄像头学习笔记

    目录 xff1a 一 OV2640 Camera二 读取OV2640模块图像数据过程 xff1a 三 DCMI xff08 Digital camera interface xff09 接口四 SCCB协议1 起始信号2 停止信号 五 OV
  • 【笔记】MS5837-30BA压力传感器调试笔记

    文章目录 一 MS5837 30BA相关介绍1 技术参数2 典型应用电路3 PROM中的标定参数 二 MS5837 30BA数据解算1 解算流程图2 初始化读取标定参数并进行CRC校验 MS5837复位 MS5837 CRC4 bit 校验