很多时候我们需要检测流量和压力这些参数,比如我们要检测大气压,或者通过测量差压来获得输送流体的流量等,都需要用到压力传感器。这一篇我们就来讨论MS4525DO-DS5AI001DP压力传感器的数据获取。
MS4525DO-DS5AI001DP
1、功能概述
MS4525DO-DS5AI001DP压力传感器TE可提供指定满量程压力范围和温度范围读取压力的数字输出。MS4525DO-DS5AI001DP压力传感器TE通过使用板载专用集成电路(ASIC)针对传感器偏移、灵敏度、温度效应和非线性进行了充分校准和温度补偿。经校准的压力输出值会在1kHz左右更新。传感器在0℃到60℃的温度范围内进行校准。该传感器可在3.3Vdc或5.0Vdc的单电源条件下工作。可以测量绝压、差压和表压。绝压型号的传感器具备内部真空参照以及与绝压成比例的输出值。差压型号的传感器允许向感应模片的任意一侧加压。表压型号的传感器以大气压力为参考,提供与大气压力变化成比例的输出值.4525DO压力传感器适用于无腐蚀性、非离子气体(例如空气和其他干燥气体)。提供的选件可延伸这些传感器的性能,使其适用于无腐蚀性、非离子的液体。
1.1、MS4525DO-DS5AI001DP的I2C地址
作为I2C接口的设备都会有一个设备地址,MS4525DO压力传感器也不例外。而MS4525DO-DS5AI001DP传感器的I2C地址在出厂时已特定写入,并根据型号中的字母来指示其地址设定。
预设的设备地址是7位的,不包含读写位的指示。我们使用时需要将其左移一位并根据读写操作来定义读写位,0为写,1为读。
1.2、数据输出格式
在I2C通讯模式下,MS4525DO-DS5AI001DP压力传感器有四个I2C读取命令,分别为:Read_MR、Read_DF2、Read_DF3和Read_DF4。
所以想要获取MS4525DO-DS5AI001DP传感器的数据就需要通过上述命令来实现。从上述的命令报文格式可以看出,这些命令在本质上是没有差别的,都多少数据完全由主机来控制,也就是我们开发的驱动程序来控制。事实上,我们只需要考虑Read_DF4这个命令就可以涵盖所有想要的数据。
我们需要注意的是,上述的报文中有两位存储的是状态信息,该状态信息表示获取的数据是最新的数据还是旧数据或者错误报警。通过判断这个数据可以决定我们在数据解析时如何处理相应的报文。
2、驱动设计与实现
我们已经了解了MS4525DO传感器的结构、接口方式、设备地址以及数据输出格式。接下来我们就可以考虑如何实现MS4525DO-DS5AI001DP传感器的驱动程序了。
2.1、对象定义
我们依然还是先来考虑MS4525DO-DS5AI001DP传感器的对象定义。我们定义一个对象无非考虑属性和操作两个部分。
首先我们来考虑MS4525DO传感器对象的属性。MS4525DO-DS5AI001DP传感器采用I2C接口通讯,所以每台都有一个设备地址。这个地址标识了I2C总线上该设备的唯一性,所以我们将设备地址作为MS4525DO-DS5AI001DP传感器对象的一个属性。对于MS4525DO传感器来说存在多种类型,而不同的类型对应不同的数据计算方式,所以针对某一具体实例,我们需要记录它的类型,所以我们为其定义一个类型属性。我们在计算压力值时,不同的量程最后得到的压力值与测量量程有关,所以我们还需要记录实例的量程上下限,所以将这两个数据也定义为对象的属性。为了操作方便我们将最终得到的温度和压力数据也都作为对象的属性。
从前面的描述中,我们知道MS4525DO-DS5AI001DP传感器的数据输出格式是固定的,这为我们解析这一数据提供了思路。我们将读出的4个字节与我们想要得到的数据组成联合体,利用结构体和联合体在内存中的关系可以方便的解析数据对象
这些个数据即是我们想要的先要得到的,同时他们也记录了MS4525DO传感器对象当前的状态,所以我们将其也作为对象的属性。
其次我们来考虑MS4525DO-DS5AI001DP传感器对象的操作。我们需要将对象的哪些行为定义为操作呢?一般的我们考虑那些不能直接实现,而是要依赖特定的软硬件平台才能实现的对象行为。我们需要向MS4525DO传感器发送命令,也需要从传感器获取对象,而无论读还是写都是依赖于具体的软硬件平台才能去定的,所以我们将向传感器写信息和从传感器读信息作为对象的2个操作。为了控制时序,我们一般需要演示处理函数,而演示处理函数的实现也是依赖于具体的软硬件平台的,所以我们将延时函数定义为对象的一个操作。