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



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

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

    关注

    2551

    文章

    51097

    浏览量

    753555
  • 芯片
    +关注

    关注

    455

    文章

    50812

    浏览量

    423598
收藏 人收藏

    评论

    相关推荐

    压力传感器怎么测试好坏

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

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

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

    压力传感器属于什么类别

    压力传感器是一种将压力信号转换为电信号的传感器,广泛应用于各种工业、科研和医疗领域。本文将详细介绍压力传感器的分类、工作原理、性能指标、选型
    的头像 发表于 06-19 10:00 890次阅读

    常见的压力传感器有哪些

    压力传感器是一种将压力信号转换为电信号的传感器,广泛应用于工业、医疗、科研等领域。本文将详细介绍常见的压力传感器类型、工作原理、性能特点以及
    的头像 发表于 06-19 09:58 2341次阅读

    压力传感器芯片原理是什么

    压力传感器是一种将压力信号转换为电信号的传感器,广泛应用于工业、医疗、科研等领域。压力传感器芯片是压力传感器的核心部件,其工作原理和性能直接
    的头像 发表于 06-19 09:55 1078次阅读

    压力传感器芯片有哪些型号

    压力传感器芯片是一种将压力信号转换为电信号的半导体器件,广泛应用于工业自动化、医疗设备、汽车电子、环境监测等领域。本文将详细介绍压力传感器芯片的分类、工作原理、主要参数、常见型号及其应
    的头像 发表于 06-19 09:53 1758次阅读

    机油压力传感器怎么测量好坏

    的检测和维修是非常重要的。本文将详细介绍如何测量机油压力传感器的好坏。 一、了解机油压力传感器的工作原理 在进行机油压力传感器的检测之前,我们需要了解其工作原理。机油
    的头像 发表于 06-19 09:34 845次阅读

    压力传感器分类、原理及型号大全

    压力传感器是一种将压力信号转换为电信号的装置,广泛应用于工业、医疗、科研等领域。本文将详细介绍压力传感器的型号、工作原理、性能参数、应用领域等方面的内容。 一、
    的头像 发表于 06-19 09:19 3707次阅读

    压力传感器原理及应用介绍

    压力传感器是一种将压力信号转换为电信号的传感器,广泛应用于工业、医疗、科研等领域。本文将详细介绍压力传感器的原理、分类、性能指标、选型原则以
    的头像 发表于 06-19 09:18 3713次阅读

    如何选择压力传感器量程?如何选择压力传感器接头?

    压力传感器在实际中的应用非常之多,比如电子秤中就有压力传感器的身影。为增进大家对压力传感器的认识,本文将对压力传感器量程的选择方法、压力传感器
    的头像 发表于 03-20 08:38 1282次阅读
    如何选择<b class='flag-5'>压力传感器</b>量程?如何选择<b class='flag-5'>压力传感器</b>接头?

    你了解压力传感器压力威廉希尔官方网站 吗?压力传感器有哪些使用注意事项?

    压力传感器早在很久之前便进入了大众的视野,因此大家对压力传感器并不感到陌生。为增进大家对压力传感器的认识,本文将对压力传感器压力威廉希尔官方网站 、
    的头像 发表于 03-17 08:36 658次阅读
    你了解<b class='flag-5'>压力传感器</b>的<b class='flag-5'>压力</b>威廉希尔官方网站
吗?<b class='flag-5'>压力传感器</b>有哪些使用注意事项?

    压力传感器型号及参数 压力传感器分类及用途

    压力传感器型号及参数 压力传感器是一种用于测量压力变化的装置。根据不同的应用需求,市场上有各种不同类型的压力传感器,下面是一些常见的压力传感器
    的头像 发表于 02-04 15:30 7118次阅读

    压力传感器原理及应用 压力传感器容易坏的原因

    压力传感器原理及应用: 压力传感器是一种能够将被测压力转变成电信号的传感器。其原理主要是利用压力荷载物体上的变形或
    的头像 发表于 01-24 11:35 1648次阅读

    应变式压力传感器工作原理 应变式压力传感器由什么组成

    结构体和信号处理电路三部分组成。下面将详细介绍应变式压力传感器的工作原理和构成。 应变式压力传感器的工作原理是利用物体受力后产生的应变效应来测量压力的大小。应变效应是指当物体受到外力作
    的头像 发表于 01-23 14:21 2767次阅读

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

    压力传感器是工业实践中最为常用的一种传感器,其广泛应用于各种工业自控环境,涉及水利水电、铁路交通、智能建筑、生产自控、航空航天、军工、石化、油井、电力、船舶、机床、管道等众多行业,下面就简单介绍一些
    的头像 发表于 01-09 08:35 3269次阅读
    <b class='flag-5'>压力传感器</b>的工作原理及应用