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

本文详细解析了MS5837-30BA压力传感器的工作原理、性能参数、I2C通信及深度数据解算算法,重点介绍了如何配置ADC转换精度和执行数据读取的步骤,对于无人机和水下航行器的定深导航具有指导价值。
摘要由CSDN通过智能技术生成

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


MS5837-30BA

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

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

2. 性能参数

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

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

3. 典型电路

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

4. 深度数据解算算法

(1) 一阶算法

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

翻译成算法语言:

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) 计算温度。

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

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

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

(2) 二阶算法

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

相应算法在框图中表示得很清楚哈,命名都为你命好了。最后得到的结果就是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)寄存器地址

寄存器地址在下表给出

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

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)通信时序

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

复位命令

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

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

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

数据D1/D2转换

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值