0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MS5837-30BA水深压力传感器详细解读

广州工控传感科技有限公司 2023-06-03 10:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

大家好,我是【广州工控传感★科技】MS5837-30BA传感器事业部,张工。

MS5837-30BA水深压力传感器模块包括一个高线性压力芯片和一个低功耗24位ADC,内部校准系数。提供精确的数字24位压力和温度值以及不同的操作模式,允许优化转换速度和电流消耗。高分辨率的温度输出允许在没有任何附加传感器的情况下实现高度计和温度计功能。MS5837-30BA可以通过IC总线接口连接到任何微控制器通信协议简单,无需对设备内部寄存器进行编程

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F7a86a58bj00rgfw2p00d3d000j900hwp.jpg&thumbnail=660x2147483647&quality=80&type=jpg


MS5837-30BA

一. MS5837-30BA水深传感器解读

1.简介:无人机实现定高飞行要依靠高度数据,那么水下航行器想要实现定深航行同样需要垂直方向的位置数据,也就是深度,我们使用MS5837-30BA这款压力传感器来测量水深。关于MS5837的使用网上有很多教程,其实都不用看,看数据手册就行了,写得非常非常全面。什么?看不懂英文?好的我已经把它翻译了一遍,可以说是非常非常详细了,相信我,看了数据手册,就会写驱动程序了。

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2Fd48b4abej00rgfw3100cud000j100gsp.jpg&thumbnail=660x2147483647&quality=80&type=jpg


MS5837-30BA

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F07db7703j00rgfzdo00btd000j100ibp.jpg&thumbnail=660x2147483647&quality=80&type=jpg


MS5837-30BA

2. 性能参数

电气特性,性能特征等请看手册,我们只关注算法

MS5837-30BA可以配置成不同的ADC转换精度,用OSR表示,精度越高转换越慢,下表显示了不同精度对应的转换时间。每次读ADC转换数据前要先发送转换命令,必须要按照最大的转换时间去写一个延时,延时时间够了才能继续发送读转换完成的数据,不然数据是错的。比如OSR=4096时转换时间是7.40-9.04,那么延时时间可以设置成10ms.

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F3d420fecj00rgg0am002cd000l10048p.jpg&thumbnail=660x2147483647&quality=80&type=jpg



3. 典型电路

MS5837使用IIC通讯,典型应用电路如下图。经典的IIC通讯电路。

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F5b972c09j00rgg0ax001od000hw009rp.jpg&thumbnail=660x2147483647&quality=80&type=jpg



4. 深度数据解算算法

(1) 一阶算法

数据解算算法说明书里给了流程图

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F0de97170j00rgg0bg009ed000kn00hlp.jpg&thumbnail=660x2147483647&quality=80&type=jpg



翻译成算法语言:

1) 开始。限定了工作条件,压力测量值0~ 30Bar,温度值范围-20~85℃,参考温度20℃。这个参考温度会用到。

2) 从PROM中读校准参数。一共六个值C1-C6,这组值出厂已经校准过了。其物理含义嘛请看英文表述,不懂也没关系,我们会计算就行了。后面给了推荐的数据类型都为unsigned int16,数据位数16位,数值范围0~65536,最后一列是示例值。这组校准参数是每次上电后必须从传感器内部的PROM中读取一次的,这6个数据C1-C6后面解算要用。

3)读数字压力D1与数字温度和D2,这是MS5837输出的24位模数转换值。推荐数据类型为unsigned int32。这两个数据是原始数据,还不准,需要经过C1-C6这组校准参数去校准。

4) 计算温度。

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2Fe7fadb46p00rgg0bu000ed000go0019p.png&thumbnail=660x2147483647&quality=80&type=jpg



好地,到这里读到校准后的温度值了。

5) 计算温度补偿后的压力。

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2Fff182b6ep00rgg0cg0010d000ga001vp.png&thumbnail=660x2147483647&quality=80&type=jpg



提到了一堆物理命名,不用管,应用公式去计算就行了。好的,到这里我们得到温度补偿后的压力值了。

(2) 二阶算法

上面使用的是一阶温度补偿算法,说明书里给了二阶温度补偿后的算法流程图:

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2Fe806aa99j00rgg0cs004sd000jc00fxp.jpg&thumbnail=660x2147483647&quality=80&type=jpg



相应算法在框图中表示得很清楚哈,命名都为你命好了。最后得到的结果就是TEMP2和P2,也就是二阶算法计算的温度和压力。

5. IIC读数据的寄存器与时序

仔细看看,算法其实很明了,数据的类型,命名都按说明书里推荐的来就行了。那么现在我们只关注怎么去读数据,IIC读数据的关键,一是寄存器地址,二是通信时序。 说明书里写得很详细。

(1)MS5837命令

MS5837只有5个基本命令:

1、复位

2、读取出厂校准值C1-C6

3、数据D1转换(压力值数据)

4、数据D2转换(温度值数据)

5、读取ADC的转换结果(24位温度值与压力值)

每条I2C通信消息已启动条件开始,以停止条件结束。MS5837-30BA地址是1110110x(写:x=0,读:x=1)。即写0xEC,读0xED.

(2)寄存器地址

寄存器地址在下表给出

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F85cf1c63j00rgg0d8007pd000jw00dtp.jpg&thumbnail=660x2147483647&quality=80&type=jpg



五个命令对应的寄存器地址显示的很详细了。

1、复位命令寄存器是0x1E ;

2、读取出厂校准值C1-C6,看最后一栏,bit4-bit6为000-111,C1-C6对应的地址为0xA2-0xAC;

3、数据D1转换(压力值数据),注意这是个写命令。这里不同的精度对应地址不一样,对应选择就行,比如OSR=4096,地址为0x48;

4、数据D2转换(温度值数据),注意这是个写命令。这里不同的精度对应地址不一样,对应选择就行,比如OSR=4096,地址为0x58;

5、读转换结果,地址0x00.

(3)通信时序

进一步,继续看通信时序,这里一步都不能错,包括有没有应答信号

复位命令

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2Ff0763d37p00rgg0dk001td000jt003op.png&thumbnail=660x2147483647&quality=80&type=jpg



写代码的时候按照其时序进行就可以了,示例如下:

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2Ff4cd7b46p00rgg0dx000qd000jn0023p.png&thumbnail=660x2147483647&quality=80&type=jpg



读PROM指令(读校准系数C1-C6)

PROM的读取命令由用户在复位后执行一次。校准参数存储在7个地址中,占据112bits的内存空间(每个数据16位)。读PROM命令是8bits,返回数据16bit(MSB模式,也就是高位在低地址)。PROM读指令包含两步,第一步设置系统进入PROM读模式,第二步读返回结果。

以读C3为例:寄存器地址0xA0+3*2

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F9a97e41bp00rgg0e7001nd000j7003hp.png&thumbnail=660x2147483647&quality=80&type=jpg



MS5837返回数据位16位:

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2Fba9cc4cbp00rgg0eh001hd000fs002kp.png&thumbnail=660x2147483647&quality=80&type=jpg



这一段同样的,写代码的时候按照其时序进行就可以了,注意前面提到了校准系数有6个,依次读六次就行了。示例如下:

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F9ec72a1fj00rgg0er002gd000jj007pp.jpg&thumbnail=660x2147483647&quality=80&type=jpg



好的,现在我们会读PROM中的校准系数了。

数据D1/D2转换

转换命令用于启动未补偿的压力(D1)或未补偿的温度(D2)转换。经过转换之后,使用ADC读命令,结果以MSB模式输出。注意了,每次必须先发送转换命令,而且需要等转换完成,再发送读ADC命令,这样就能读到正确的D1或D2数据。

比如 分辨率=4096,数据类型=D1,

IIC指令启动压力转换(地址0x48)

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F689847a0p00rgg0f1001cd000gi003ip.png&thumbnail=660x2147483647&quality=80&type=jpg



读ADC数据

等待10ms等转换完成(转换时间查表),转换完成之后发送ADC读命令(0x00)

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2Fa1067c77p00rgg0fb001id000hp0039p.png&thumbnail=660x2147483647&quality=80&type=jpg



MS5837的返回数据为24位:

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F8750280ep00rgg0fl001dd000in002dp.png&thumbnail=660x2147483647&quality=80&type=jpg



好的,用代码表示上面三步的时序

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F54efb5daj00rgg0fv0036d000jg009gp.jpg&thumbnail=660x2147483647&quality=80&type=jpg



好的,现在我们会读D1和D2了,结合前面读到的C1-C6,就可以开心的使用算法流程用一阶算法或二阶算法计算温度与压力了,知道了压力就可以计算深度了。

二. STM32读取水深传感器驱动程序

经过上面的解读,相信你已经啥都会了,现在一起来写一下驱动代码。

建立一个MS5837.h和MS5837.c的文件(IIC的驱动就略去不贴了,这里我用的IIC0用以与IIC区分)

MS5837.h文件内容:

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2Fb1871857p00rgg0g6000md000ji002hp.png&thumbnail=660x2147483647&quality=80&type=jpg



MS5837.h文件先按照说明书定义一些变量:

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F9d482060j00rgg0gh0040d000ji00fnp.jpg&thumbnail=660x2147483647&quality=80&type=jpg



然后添加初始换、复位、读数据等函数:

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F21c64794j00rgg0gt0055d000jj00frp.jpg&thumbnail=660x2147483647&quality=80&type=jpg



通过调用 void MS5837_Getdata(float * outTemp, float * outPress)就可以读到经过二阶算法解算的温度与压力值,当然了这个值是绝对压力值,与大气压结合经过计算就能算出深度了。

三. 传感任务增加读水深的应用程序

现在我们继续封装,回到我们之前创建的sensor.h和sensor.c文件,在sensor.c文件中添加以下代码

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2Fcce05e13p00rgg0j5001dd000jc002gp.png&thumbnail=660x2147483647&quality=80&type=jpg



这个地方我人为的给大气压赋了一个比正常偏小的值,这样算出来的深度永远为正的,对于定深控制是没有影响的。当然了你可以初始化时用MS5837将大气压读出来,再作为测量的大气压值。

当然了,可以滤一下波,还是滑动平均滤波

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F08f8aa89j00rgg0jf002rd000js007qp.jpg&thumbnail=660x2147483647&quality=80&type=jpg



现在,封装完毕,来到我们的main函数,在之前创建的 sensor_task中添加读深度的代码,更新后如下(建议与上一章对照看)

?url=http%3A%2F%2Fdingyue.ws.126.net%2F2022%2F0811%2F9238d983j00rgg0jr005pd000ji00fxp.jpg&thumbnail=660x2147483647&quality=80&type=jpg



到这里读水深的任务就完成啦。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2573

    文章

    54363

    浏览量

    785846
  • 芯片
    +关注

    关注

    462

    文章

    53530

    浏览量

    458886
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何优化气体压力传感器性能,提高传感器测量精度?

    气体压力传感器是一种用于测量气体压力的装置,其精度直接影响到工业自动化控制的效果。在生产过程中,气体压力传感器的精度越高,控制效果越好,生产效率也越高。因此,提高气体压力传感器的精度至
    的头像 发表于 10-18 17:21 1191次阅读

    TE Connectivity 耐水性、耐氯性、屏蔽层、低功耗的数字温度复合压力传感器MS5839-02BA

    MS5839-02BA是一款耐恶劣介质的超小型数字压力和温度传感器。微型化、性能和精度是嵌入在消费类设备(如游泳手表和潜水设备)中的传感器的关键,因此对高性能和异常精确的
    的头像 发表于 07-29 12:02 432次阅读
    TE Connectivity 耐水性、耐氯性、屏蔽层、低功耗的数字温度复合<b class='flag-5'>压力传感器</b><b class='flag-5'>MS5839-02BA</b>

    【经验合集】温度复合和压力传感器AS55H-02BA的部分使用注意事项

    1压力传感器AS55H-02BA是集成压力和温度一体的工业级传感器。量程范围为300~1200mbar,补偿温度范围-40~85ºС。密封可使用2.5*1mm的O型圈。客户在使用过程中
    的头像 发表于 07-16 12:03 423次阅读
    【经验合集】温度复合和<b class='flag-5'>压力传感器</b>AS55H-02<b class='flag-5'>BA</b>的部分使用注意事项

    几分钟带你搞懂什么是压力传感器

    一、引言 在现代工业、科研及日常生活中,压力传感器作为一种重要的测量工具,发挥着不可替代的作用。它能够将物体受到的压力压力变化转化为电信号,便于我们进行监测、控制或数据采集。本文将详细
    的头像 发表于 02-23 11:55 2341次阅读

    压力传感器的工作原理与应用

    在现代工业和日常生活中,压力传感器作为一种重要的测量工具,广泛应用于各种领域。它能够将压力信号转换为电信号,从而实现对压力的精确测量和控制。本文将详细介绍
    的头像 发表于 02-08 09:27 2614次阅读

    压力传感器怎么测试好坏

    详细介绍如何测试压力传感器的好坏,包括测试方法、测试步骤以及测试过程中需要注意的事项。 一、压力传感器的工作原理 在深入探讨测试方法之前,我们有必要了解压力传感器的工作原理。
    的头像 发表于 12-26 18:46 3217次阅读
    <b class='flag-5'>压力传感器</b>怎么测试好坏

    压力传感器怎么选型

    压力传感器是一种能感受压力信号,并能按照一定的规律将压力信号转换成可用的输出的电信号的器件或装置,压力传感器根据不同的原理可分为:压阻式、陶瓷电容式、不锈钢应变片式,下面我们将带大家
    的头像 发表于 12-17 11:25 1721次阅读

    压力传感器的特点和优势 水压力传感器的校准方法

    压力传感器的特点和优势 1. 高精度 水压力传感器通常具有高精度,能够准确测量微小的压力变化,这对于需要精确控制压力的应用场景至关重要。 2. 稳定性 高质量的水
    的头像 发表于 12-12 15:05 1340次阅读

    高精度压力传感器的工作原理 高精度压力传感器的校准方法

    高精度压力传感器的工作原理 高精度压力传感器的工作原理主要基于物理学中的压电效应、应变效应、电容效应等。以下是几种常见的高精度压力传感器工作原理: 压电效应 : 压电效应是指某些材料(如石英晶体)在
    的头像 发表于 12-12 14:42 2031次阅读

    隆旅无线压力传感器#传感器 #压力传感器

    压力传感器
    jf_41426726
    发布于 :2024年12月12日 11:15:35

    气体压力传感器的数据采集与分析

    气体压力传感器是工业和科研领域中常用的一种传感器,用于检测和测量气体的压力。随着技术的发展,气体压力传感器的应用范围越来越广泛,包括环境监测、医疗设备、汽车工业、航空航天等多个领域。
    的头像 发表于 12-09 16:31 2202次阅读

    气体压力传感器故障排查技巧 气体压力传感器和气体流量计的关系

    气体压力传感器故障排查技巧 气体压力传感器在工业自动化、汽车工业、医疗设备等领域有着广泛的应用。然而,在使用过程中,气体压力传感器可能会出现各种故障。以下是一些故障排查技巧: 检查压力
    的头像 发表于 12-09 16:28 1158次阅读

    气体压力传感器的种类和特点 气体压力传感器在环保监测中的应用

    气体压力传感器的种类和特点 气体压力传感器是一种用于检测气体压力的仪器,广泛应用于各种工业和环境监测领域。以下是一些常见的气体压力传感器种类及其特点: 1. 压电式
    的头像 发表于 12-09 16:25 2386次阅读

    气体压力传感器与液体压力传感器的区别

    在工业自动化和过程控制中,压力传感器是不可或缺的组件。它们能够测量气体或液体的压力,并将其转换为电信号,以便进行进一步的处理和控制。气体压力传感器和液体压力传感器虽然在功能上相似,但在
    的头像 发表于 12-09 16:23 1579次阅读

    气体压力传感器工作原理解析 气体压力传感器在工业应用中的作用

    气体压力传感器工作原理解析 1. 压力传感器的基本概念 压力传感器是一种将压力信号转换成电信号的装置。它可以测量绝对压力、差压或表
    的头像 发表于 12-09 16:19 2965次阅读