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



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

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

    关注

    2525

    文章

    48069

    浏览量

    739977
  • 芯片
    +关注

    关注

    446

    文章

    47769

    浏览量

    409066
收藏 人收藏

    评论

    相关推荐

    关于MS5837-02BA压力传感器低功耗配置

    MS5837-02BA传感器是一款专为健身跟踪器、无人机和可穿戴设备等消费类设备优化的基于MEMS的传感器。它具有高线性压力传感器和低功率24位数字输出(I2C),使用户能够优化转换速
    的头像 发表于 12-14 11:08 268次阅读
    关于<b class='flag-5'>MS5837-02BA</b><b class='flag-5'>压力传感器</b>低功耗配置

    高压灭菌器的MS5803-01BA压力传感器

    MS5803-01BA压力传感器是检测和验证高压灭菌器中蒸汽温度和其他条件的关键组件,通常用于对医疗和牙科设备进行消毒。标称条件约1bar,85°C(最大压力约 3.8 bar/55 psi)来自
    的头像 发表于 06-09 15:39 379次阅读
    高压灭菌器的<b class='flag-5'>MS5803-01BA</b><b class='flag-5'>压力传感器</b>

    适用于腐蚀性环境的MS5837-30BA传感器

    MS5837-30BA压力传感器的典型结构是由化学物质或干蚀刻形成的平面硅隔离膜。压阻式传感器放置在传感器线性工作范围以内且靠近薄膜边缘的位置。
    的头像 发表于 06-06 17:58 296次阅读
    适用于腐蚀性环境的<b class='flag-5'>MS5837-30BA</b><b class='flag-5'>传感器</b>

    MS580330BA01-00压力传感器检测洗衣机水位

    MS580330BA01-00压力传感器水深分辨率为1cm,该传感器模块包含一个高线性压力传感器和一个带有内部校准系数的低功率24位ADC。
    的头像 发表于 06-03 10:24 474次阅读
    <b class='flag-5'>MS580330BA</b>01-00<b class='flag-5'>压力传感器</b>检测洗衣机水位

    MS5837-30BA26传感器在咖啡机测量液位

    MS5837-30BA26传感器采用I2C总线作为通信接口,几乎可以连接任何微控制器,通信协议简单,且无需对传感器内部寄存器编程。由于传感器内部集成振荡器,因此无需额外元件,节省了设计
    的头像 发表于 06-02 17:17 300次阅读
    <b class='flag-5'>MS5837-30BA</b>26<b class='flag-5'>传感器</b>在咖啡机测量液位

    MS5840-02BA压力传感器在工业及医疗上的应用

    MS5840-02BA压力传感器模块包含高线性压力传感器和采用内部工厂标定系数的超低功率24位ADC。 它提供准确的24位压力和温度值和不同的操作模式,可以根据转换速度和电流消耗进行优
    的头像 发表于 06-01 10:07 226次阅读
    <b class='flag-5'>MS5840-02BA</b><b class='flag-5'>压力传感器</b>在工业及医疗上的应用

    MS5837MS5803压力高度计测量

    MS5837-30BA传感器模块包含一个高线性压力传感器和一个带有内部工厂校准系数的超低功率24位ADC。 提供精确的24位数字压力和温度值及不同的操作模式,可根据需要配置转换速度和电
    的头像 发表于 05-24 09:38 309次阅读
    <b class='flag-5'>MS5837</b>和<b class='flag-5'>MS</b>5803<b class='flag-5'>压力</b>高度计测量

    TE压力传感器MS5837-02BA软件读取数据不准的问题分析

    压力传感器MS5837-02BA属于超小型的微型高度计,海平面的海拔分辨率为13cm。内置24bit的ADC,校准的数据存储在112bit的PROM中。工程师在读取校准数据进行温度和压力换算的过程中
    的头像 发表于 05-19 11:24 315次阅读
    TE<b class='flag-5'>压力传感器</b><b class='flag-5'>MS5837-02BA</b>软件读取数据不准的问题分析

    MS5803-30BA压力传感器在油罐液位计上应用

    MS5803-30BA压力传感器模块已针对高度计和气压表进行优化,高度分辨率为 10 cm。传感器模块包含一个高线性压力传感器和一个带有内部校准系数的超低功率 24 位 ΔΣ ADC。
    的头像 发表于 05-11 16:46 297次阅读
    <b class='flag-5'>MS5803-30BA</b><b class='flag-5'>压力传感器</b>在油罐液位计上应用

    MS5803-01BA压力传感器应用

    车辆行人安全保护装置主要包括机械发射部分,气动控制回路和电气控制回路和数据采集计算四个部分组成。其中MS5803-01BA压力传感器等电器元件构成数据采集部分,与MCU一起进行数据处理。当行人
    的头像 发表于 05-11 16:46 448次阅读
    <b class='flag-5'>MS5803-01BA</b><b class='flag-5'>压力传感器</b>应用

    MS583730BA01-50水深传感器MS583702BA01-50压力传感器的O型圈

    压力传感器MS583730BA01-50水深传感器MS583702BA01-50压力传感器的密
    的头像 发表于 05-06 17:48 595次阅读
    <b class='flag-5'>MS583730BA</b>01-50<b class='flag-5'>水深</b><b class='flag-5'>传感器</b>和<b class='flag-5'>MS583702BA</b>01-50<b class='flag-5'>压力传感器</b>的O型圈

    MS5837-30BA水深传感器使用指南

    MS5837-3030BA水深传感器由于得到的标定参数都是固化的,所以只需在初始化的时候读一次即可。在获取标定参数之后,分为两个步骤,第一步是利用标定参数和测量的值,获取压力和温度值,
    的头像 发表于 05-06 17:48 546次阅读
    <b class='flag-5'>MS5837-30BA</b><b class='flag-5'>水深</b><b class='flag-5'>传感器</b>使用指南

    MS5837-02BA压力传感器环境监测应用方案

    MS5837-02BA压力传感器也有很出色的表现,其中MS5837-02BA01内置了一个24bit的Σ-Δ型ADC,25℃(750 to 1100 mbar)时精度可以达到±2mbar
    的头像 发表于 05-06 17:19 438次阅读
    <b class='flag-5'>MS5837-02BA</b><b class='flag-5'>压力传感器</b>环境监测应用方案

    MS5805-02BA压力传感器温压补偿

    MS5805-02BA压力传感器温压补偿集成温度和压力测量的可完美解决温度和压力影响所引起的计量误差,下图是基于温压补偿燃气表原理框图
    的头像 发表于 05-06 17:19 304次阅读
    <b class='flag-5'>MS5805-02BA</b><b class='flag-5'>压力传感器</b>温压补偿

    MS5837-30BA

    输出:I²C量程:0~30bar,-20℃~85℃封装:陶瓷工作温度范围:-20~85℃精确度:分辨率0.2mbar供电电源:1.5~3.6V特点:陶瓷-金属封装,3.3×3.3×2.5mm
    发表于 05-06 15:05 0次下载