气压BST-BMP280-DS001-10 阅读 - 图文

更新时间:2024-04-04 03:01:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

BMP280:数据表 文档修订1.12

文档发布日期7月11日,2014年 文件编号BST-BMP280-DS001-10

技术参考代码(s)0 273 300 354 0273 300 391,0273 300 416

备注:本文档中的数据如有更改,恕不另行通知。产品照片和图片仅供演示目的,可能不同实际产品的外观。

BMP280 数字压力传感器(DIGITAL PRESSURE SENSOR) 关键参数 压力范围 包有

300…1100 hPa (equiv. + 9000…-500高于/低于海平面) LGA metal-lid

引脚规格:2.0×2.5毫米,高度:0.95毫米 ±0.12 hPa equiv.±1 m typ。±1 hPa

1.5 Pa / K,equiv. 12.6cm/ K I2C(3.4兆赫) SPI(3和4线,10 MHz) 2.7μA @ 1 Hz采样率 -40…+ 85°C

相对精度 绝对精度

(950…1050 hpa @25°C) (950…1050 hPa 0…+ 40°C) 温度系数补偿 数字接口

电流消耗 温度范围

(25…40°C @900hPa)

通过无铅认证无卤 标准一级湿度感应

典型的应用

?增强GPS导航(例如time-to-first-fix改进、船位推算,斜率检测) ?室内导航(地板检测、电梯检测) ?户外导航、休闲和运动的应用程序 ?天气预报

?医疗保健应用程序(如肺量测定法) ?垂直速度指示(如上升/下沉速度) 目标设备

?手机,如手机、平板电脑、GPS设备 ?便携式医疗设备 ?飞行玩具

?导航系统 ?家里气象站 ?手表

一般的描述

罗伯特?博世是世界上为压力传感器在汽车和消费市场的领导者应用程序。博世的专有APSM MEMS(先进的多孔硅膜)生产过程完全是CMOS兼容,并允许一个密封的密封腔的全硅的过程。BMP280基于博世的压阻压力传感器技术EMC稳健性高、准确度高、线性和长期稳定性。

BMP280是绝对气压传感器特别是在易变环境中的应用。传感器模块是装在一个非常紧凑的栅格阵列封装, 包的封装只有2.0×2.5毫米2和0.95毫米包高度。它的小尺寸和低功耗的2.7μA @1Hz允许电池

中的实现驱动的设备,如手机、GPS模块或手表。

广泛采用BMP180继承者,BMP280提供高性能需要精确的压力测量的应用程序。BMP280运行低噪音,新兴的室内导航的应用、医疗保健以及GPS细化要求相对精度高和低的TCO在同一时间。BMP180支持新过滤器模式和SPI接口在一个BMP180引脚小于63%。

和BMP280是适合应用与如地板检测,因为传感器特性优良,相对的hPa精度±0.12,相当于±1米高度的差异。非常低的补偿温度系数(TCO) 1.5 Pa / K的转化为只有12.6厘米/ K的温度漂移。 BMP280 各项性能指标 封装2.0 × 2.5 mm 最低电压 1.71V IO口最低电压 1.20V 电流损耗(3Pa均方根噪声) 1.2uA

均方根噪声 1.3 Pa 压力分辨率 1.6Pa

温度分辨率 0.01 。C

接口 I2C & SPI(3和4线,模式“00”和“11”) 测量模式 P&T, forced or periodic 测量速率 可达 175Hz

筛选器选项

五个带宽

1. 设计规格

?全电压范围内所有的值是有效的 ?最小/最大值都给出完整的准确温度范围

?最大值/最小值的漂移,补偿和温度系数是±3在运行中 ?电流和状态机的典型值确定计时25°C

?最小/最大电流的值确定使用区域很多在温度范围完成

?最小/最大值状态机的计时决心使用范围很多在0…+ 65°C的温度范围 规范表分成BMP280压力和温度的一部分

表2:参数规范

参数 标志 条件 最小值 典型值 最大值 操作温度范围 TA 操作 -40 25 +85

满精度 0

+65 工作压力范围 P

满精度

300

1100 传感器电源电压 V_DD 波动最大值50mV 1.71

1.8 3.6 接口电源电压 V_IODD

1.2

1.8 3.6 电源电流 I_DDLP 1赫兹强制模式中,压力 2.8 4.2

和温度,最低的能量 峰值电流 I_peak 压力测量期间 720 1100 电流在温度测量

I_DDT

325

睡眠电流

I_DDSL 25。C

0.1 0.3 待机电流(不活跃的 I_DDSB 25。C

0.2 0.5 时期正常模式2) 相对精读的压力值 A_rel 700 … 900hPa +-0.12 V_DD = 3V

25 . . . 40 °C

+-1.0

1典型值VDD = VDDIO = 1.8 V,最大价值VDD = VDDIO = 3.6 V。 2典型值VDD = VDDIO = 1.8 V,最大价值VDD = VDDIO = 3.6 V。 3目标值

单位

。C

Hpa V V uA uA uA uA uA hPa

m

温度补偿系数 绝对压力精度

TCO A P ext A P full

900hPa25 . . . 40 °C +1.5 12.6 +1.7 +1.0 0.0016 0.01 0.2 1.7 ±0.5 ±1.0

1.0

2

Pa/K cm/K Pa/K Pa/K hPa 。C Pa cm °C °C Pa/Mv hPa hPa ms

300 . . . 1100 hPa-20 . . . 0 °C 300 . . . 1100 hPa0 . . . 65 °C

在超高分辨率的输出 数据分辨率模式4 噪声压力

R_H 压力 R_T 温度

V p,full A T

PSRR

完整的带宽,超高分辨率 最低带宽、超高分辨率 25 °C

0 . . . +65 °C 完整的V DD范围 12个月

V p,filtered

绝度温度精读 PSRR (DC) 长期稳定性 Solder drifts 启动时间

±0.005 +2

?P_stab t startup f sample ?t standby

最小焊接高度50μm 0.5

和0.65 V DDIO > V

时间先沟通后V DD > 1.58 V osrs_t = osrs_p = 1

可能的采样率 待机时间的准确性

绝对最大额定参数

参数

157 +5

182 +25

tdp Hz

%

(绝对最大额定参数表3中提供。)

表3:绝对最大额定参数

最小值

最大值

单位

V V 。C hPa KV

-0.3 -0.3 -45

0

4.25 +85 20000 +-2

条件

提供接口电压 所有接口电压 储存温度 压力

功能性说明

V DD and V DDIO 接口 ≤ 65% rel. H.

V_IODD+0.3

静电释放(ESD) HBM在任何接口接口类型

BMP280由压阻压力传感元件和一个混合信号集成电路。ASIC执行A / D转换,并提供转换结果通过数BMP280为设计师提供最高的灵活性,可以适应对于精度要求,测量时间和能耗通过选择从大量的可能BMP280可以在三种权力模式操作(见章节3.6): ?睡眠模式 ?正常模式 ?强制模式

在睡眠模式下,则不执行测量。正常模式由一个自动不断循环在活跃的测量周期和不活跃的待机时间之一组过采样设置可从超低功率超高分辨率设置从而适应目标应用的传感器。该设置是预定义的组合压

字接口和传感器特定的补偿数据。 的组合传感器的设置。

间。在强制模式下,执行单一度量值。当测量完成后,传感器返回睡眠模式。

力测量过采样和温度测量采样过密。压力和温度测量过采样可以单独选择从0到16倍过采样(见3.3.1和3.3.2章):

温度测量? 低功率? 高分辨率?

超低功率? 标准分辨率? 超高分辨率?

BMP280配备了一个内置的IIR滤波器,以减少短期扰动造成的输出数据溢出。滤波器系数范围从0 为了简化设备的使用,减少能量的大量可能的组合模式,过采样率和过滤设置, 博世Sensortec提供了

?手持设备低功耗(如运行Android的智能手机) ?手持动态设备(如运行Android的智能手机) ?天气监测(设置最低功耗) ?电梯/地板变化检测 ?下降检测 ?室内导航

(off)到16。

一套经过验证的常见用例在智能手机、移动气象站或飞行玩具(见章节3.4):

框图(图1显示了一个简化的BMP280框图)

电源管理

BMP280有两个单独的电源引脚

?V DD是所有内部的主电源模拟和数字功能块 ?V DDIO是一个单独的电源销,用于数字接口的供应

加电复位生成器是建在重置后的逻辑电路和寄存器值接通电源的序列。没有限制提高VDD的斜率和警告:持有任何接口类型(SDI,SDO,SCK或CSB)逻辑高水平当V_DDIO关掉可能永久损坏设备(由于如果V_DDIO提供电源,而不是V_DD,接口保持高电平。总线因此已经可以自由使用前BMP280 V DD序列和VDDIO水平。驱动后,传感器落定在睡眠模式(见3.6.1)。 过度引起的电流通过二极管ESD保护。) 供应。 3.3 测量流

BMP280测量周期由温度和压力测量与可选择的过采样。测量周期后,数据是通过一个可选的IIR滤波器,消除短期波动压力(如造成的溢出)。流程如下图中描述。

1.开始周期测量 2. 测量温度 (osrs_t设定的采样过密;如果osrs_t = 0跳过) 3. 测量压力 (osrs_p设定的采样过密;如果osrs_p = 0跳过) 4. IIR滤波器使能

否 跳9

是 5. IIR滤波器初始化? 否 跳9

是 6.更新过滤器内存使用,过滤内存,ADC值和滤波器系数 否 跳10 9. ADC值复制到过滤器的内存(initalises IIR滤波器) 10. 过滤内存复制到输出寄存器 11. 结束周期循环测量

压力测量

上面的图块将在以下分章详细。 3.3.1

压力测量可以启用或跳过。跳过测量可能是有用的,如果BMP280作为温度传感器。启用时,几个过采

样选项存在。每个过采样步骤减少噪音和增加一个比特的输出分辨率,这是存储在XLSB 0Xf9数据寄存器。启用/禁用测量和过采样设置选择通过osrs_p(2:0)位0 xf4控制寄存器。

表4:osrs_p设置 压力过采样

x1 x2

典型的解决压力

16bit/2.62Pa 17bit/1.31Pa 18bit/0.66Pa 19bit/0.33Pa 20bit/0.16Pa

建议温度过采样 根据需要

x1 x1 x1 x1 x2

过采样设置 超低功耗 低功率 分辨率

跳过压力测试 跳过(输出设置为0 x80000)

x4 x8 x16

高分辨率 超高分辨率

3.3.2温度测量

osrs_p为了找到一个合适的设置,请参考章节3.4。

温度测量可以启用或跳过。跳过测量可能是有用的测量压力非常迅速。启用时,几个过采样选项存在。每个过采样步骤减少噪音和增加一个比特的输出分辨率,这是存储在XLSB 0xfc数据寄存器。启用/禁用温度测量和过采样设置选择通过osrs_t 2:0位控制0 xf4登记。

表4:osrs_t设置

典型的解决温度

osrs_t[2:0] 000

温度过采样

跳过(输出设置为0 x80000)

建议osrs_t的价值基础的选择价值osrs_p按表4所示。

以上温度采样过密×2是可能的,但不会显著提高进一步压力输出的准确性。

原因是噪声补偿压力值取决于原始压力比原始温度噪声。以下推荐的设置会导致最优noise-to-power比率。 3.3.2

IIR滤波器

环境压力是许多短期变化,如造成摔门或窗(数据溢出?),或风吹到传感器。抑制这些干扰在输出数

据而不造成额外的接口流量和处理器工作负载,BMP280特性内部IIR滤波器。它有效地降低了输出信号的带宽。下一步测量的输出滤波器是使用以下公式:

data_filtered_old的数据来自前面的获得(数据) data_ADC 的数据来自IIR滤波前的ADC。

使用滤波器的IIR滤波器可以配置(2:0)比特控制寄存器0 xf5以下选项:

表6:过滤器设置

带宽(ODR计算见表14)

过滤系数

filter[2:0]

为了找到一个合适的设置过滤器,请参考章节3.4。

当写寄存器过滤器,该过滤器是重置。下一个值将通过过滤器和过滤器的初始内存值。如果温度或压力测量是跳过,相应的过滤内存将保持不变,即使输出寄存器设置为0x80000。以前跳过测量重新启用时,输出将使用过滤器过滤内存从上次测量没有跳过。

3.4过滤选择

使用案例 手持低功耗

为了选择最佳设置,建议以下用例:

IIR滤波器多 I DD[μA]

ODR[Hz] RMSNoise[cm]

表7:推荐基于用例的过滤器设置(模式都为正常)

项式系数。(see3.3.3)(see3.7)(3.8.2)(3.5) 4 247 10 40 16

577

83.3 1/60 7.3 128 26.3

2.4 26.4 6.4 20.8 1.6

过采样设置 osrs_p osrs_t

设备(例如安卓) 超高分辨率 手持动态(力) 设备(android) 天气监测 (最低)强迫模式

x16 x2 x4 x1 1

1

超低功率 off 0.14 4

50.9 509 650

电梯/地板变化检测 标准分辨率 x4 x1 下降检测 室内导航 3.5噪声

低功率

x2 x1 x16 x2

off 16

超高分辨率

噪音取决于选择的过采样和过滤设置。在控制压力表示值测定环境和基于连续32个测量的平均标准

表8:噪音压力

偏差点在最高采样速度。这是需要为了排除长期漂移噪声的测量。

3.6 电源模式

BMP280提供三个权力模式:睡眠模式,强制模式和正常模式。这些可以选择使用模式(1:0)位0xf4控制

寄存器。

3.6.1睡眠模式Sleep mode

睡眠模式上电复位后默认设置。在睡眠模式下,不进行测量和功耗(I_DDSM)最低。所有寄存器都可以访问;Chip-ID和补偿系数可以读取。 3.6.2 强迫模式

在强制模式下,执行单一度量值根据选定的测量和过滤选项。当完成测量,传感器返回到睡眠模式,可从

数据寄存器获得测量结果。下一个测量,迫使模式需要再次选择。这类似于BMP180操作。强制模式建议应用程序需要低采样率或基于主机的同步。

3.6.3 正常模式

正常模式之间的连续周期(主动)测量周期和一个备用(不活跃)时期,他们的时间被定义为t_standy备

用。当前在备用期间(I_DDSB)略高于睡眠模式。设置模式后,测量和过滤选项,最后可获得测量结果从数据寄存器,无需进一步的写访问。正常模式建议使用IIR滤波器时,和有用的应用程序中,短期扰动(如吹到传感器)应该被过滤。

待机时间是由t_sb的内容(2:0)比特控制寄存器0xf5根据下表

3.6.4模式转换图

支持的模式转换显示如下。如果设备目前执行测量,执行模式切换命令推迟到当前运行的测量周期的结束。下(进?)一步模式更改命令忽略到最后执行模式更改命令。模式转换除了下面所示的是测试稳定但不代表推荐使用的设备。

3.7电流损耗

当前的电流损耗取决于ODR和过采样设置。下面给出的值归一化的ODR 1 Hz。实际的消费可以计算在给定的ODR乘以ODR的表12中消费使用。实际的ODR是通过定义用户设置强制的频率测量或由过采样和t备用设置在正常模式在表14。

3.8 测量时间

测量的速度可以在强制执行模式取决于osrs_t和osrs_p过采样设置。他们在正常模式下执行的速度取决于osrs_t osrs_p和过采样设置设置待机时间t备用。在给出下表生成的odr的建议osr的组合。 间。

下表说明了典型和最大测量时间的基础上选定的过采样设置。最低可实现的频率取决于最大测量时

3.8.2 正常模式的测量速率

下表说明了测量利率预计将会在正常模式基于过采样设置和t_standy备用。

表15:传感器时间根据推荐设置(基于用例)

3.9 数据读出

读出数据转换后,强烈建议使用突发读因为他不需要每一个单独寄存器的地址。这将防止可能属于不同的字节混乱测量流量,减少接口。读出的数据是通过开始从0xf7到0xfc突发读取。一个无符号的20位格式的数据读出的压力和温度。强烈建议使用BMP280 API,可以从博世Sensortec读出和补偿。内存映射和接口的详细信息,请参考章节分别为3.12和5。

数据读出的时间应该选择强迫模式,最大测量时间(见3.8.1章)是比较推崇的。在正常模式下,读出速度

可以做类似于预期的数据输出率(见3.8.2章)。后“ut”和“up”的值已经阅读,实际压力和温度需要计算使用补偿参数存储在设备。在3.11章阐述的过程。

3.10 数据寄存器shadowing 阴子数据寄存器??

在正常模式下,测量时间不一定是同步的读出。这意味着新的测量结果可能会出现在用户阅读之前的测

量结果。在这种情况下,跟踪执行,以保证数据的一致性。(shadowing)阴影只会工作,如果所有数据寄存器读取一个阅读。因此,用户必须使用突发(burst)读取如果他不同步数据读出测量周期。使用几个独立的读命令可能会导致不一致的数据。

如果完成一个新的测量和数据寄存器仍在阅读,新的测量结果转移到阴影数据寄存器。影子寄存器传输

到数据寄存器的内容当用户结束阅读,即使不是所有的数据寄存器读。读出数据跨多个数据寄存器,因此只能保证一致的在一个测量周期如果使用单一读出读取命令。突发读出的结束标记的前沿CSB销在SPI情况下或停止条件I2C的识别情况。突发阅读结束后,所有用户数据寄存器更新。 3.11 输出补偿

BMP280输出由ADC输出值。然而,每个传感元件的行为不同,和实际压力和温度必须使用一组计算校

正参数。推荐的计算在3.11.3章使用定点算术。在高级语言Matlab?或虚拟仪器?,定点的代码可能不支持。在这种情况下,浮点代码在附录8.1中可以作为一个替代选择。对于8位微控制器,变量的大小可能是有限的。在这种情况下,一个简化的32位整数代码与降低精度在附录8.2中给出。 3.11.1 计算消耗

下表显示了所需的时钟周期数量补偿计算与GCC 32位微控制器Cortex-M3优化级别- 02。该控制器

不包含浮点单元,因此所有浮点计算模拟。浮点PC应用程序只建议在FPU存在。

3.11.3补偿公式

请注意,强烈建议使用API可以从博世Sensortec执行读出和补偿。如果这不是想要的,下面的代码可

以应用在用户的风险(risk)。压力和温度的值都将收到20位格式,积极的,存储在一个32位带符号整数。

变量t_fine(32位)带有温度高分辨率值压力补偿公式,可以实现为一个全局变量。数据类型“BMP280_

S32_t”应该定义一个32位带符号整数变量类型,通常可以定义为“long singed int”。

数据类型“BMP280_U32_t”应该定义一个32位无符号整数变量类型,通常可以定义为“long unsigned i

nt”。最好的计算精度,64位整数支持是必要的。如果这是不可能的在你的平台上,请见附件8.2一个32位的选择。

数据类型“BMP280_S64_t”应该定义一个64位带符号整数变量类型,这在大多数支持平台可以被定义

为“长长的签署int”。rev.1.1代码的修改。 3.12 计算压强跟温度 伴。

4.全局内存映射和寄存器描述

给出了内存映射表18所示。保留寄存器没有显示。 下面的图显示了压力和温度测量的详细算法。

这个算法C源代码提供给客户作为参考(从博世Sensortec BMP28x_ API)和通过其销售和分销合作伙

4.1总论

所有通信设备是由读取或写入寄存器。寄存器具有一个8位的宽度。有几个寄存器保留;他们不应该

写,不保证特定值时读出数据。在接口的详细信息,请参考第5章。 4.2内存映射

给出了内存映射表18所示。保留寄存器没有显示

4.3寄存器说明

4.3.1 寄存器 0xd0 “id” //0xd0是内存映射地址

“id”寄存器包含了芯片身份证号码chip_id 7:0,0x58。这个数字就可以读取设备完成上电复位。

4.3.2 寄存器 0xe0 复位 4.3.2 Register 0xE0 “reset”

“重置”寄存器包含软复位复位(7:0)。如果该值0xb6写入寄存器,设备使用完整的上电复位复位程序。

写其他值比0xb6没有影响。读出的值总是0x00。 4.3.3 状态寄存器

4.3.3 Register 0xF3 “status” //等待寄存器为零

“状态”寄存器包含两位表示设备的状态。 Register 0xF3 “status” Bit 3 Bit 0

measuring[0] 自动转换运行时设置为' 1 ',' 0 '那时候结果已经转移到数据寄存器。 im_update[0] 自动设置为' 1 '当NVM数据被复制到映像寄存器和'复制完成

后置0。在上电复位和数据复制每一个转换。

名字

描述

4.3.4 寄存器 0xF4 “ctrl_meas”

“ctrl_meas”寄存器设置数据采集设备的选择。

名字

描述

Register 0xF4 “ctrl_meas” Bit 7, 6, 5 Bit 4, 3, 2 Bit 1, 0

osrs_t[2:0] osrs_p[2:0] mode[1:0]

控制温度数据的采样过密。看到章3.3.2详情。 控制采样过密的压力数据。详情见3.3.1章。 控制设备的电源模式。详情见3.6章。

4.3.5 寄存器 0xF5 “配置”

写不被忽视。 Register 0xF5 “config” Bit 7, 6, 5 Bit 4, 3, 2 Bit 0

t_sb[2:0] filter[2:0] spi3w_en[0] Name

4.3.5 Register 0xF5 “config”

“配置”设置寄存器、过滤和接口设备的选择。写入“配置”注册在正常模式可能被忽略。在睡眠模式下

Description

控制活动时间t在正常模式下备用。有关详细信息,请参阅3.6.3章。 IIR滤波器的控制时间常数。有关详细信息,请参阅3.3.3章。 使能SPI接口,当设置为“1”。详情见5.3章。

4.3.6 寄存器 0xF7…0xF9 “press” (_msb, _lsb, _xlsb)//数据读出

“压力”寄存器包含原始压力测量输出数据(19:0)。有关如何阅读设备的压力和温度信息,请咨询chapt

er3.9。

Register 0xF7-0xF9 “press” 0xF7 0xF8

press_msb[7:0] press_lsb[7:0]

包含MSB部分(19:12)原始压力测量的输出数据。 包含LSB部分(12:4)原始压力测量的输出数据。

Name Description

0xF9 (bit 7, 6, 5, 4) pressxlsb[3:0]

4.3.7 临时寄存器

包含XLSB部分(3:0)原始压力测量的输出数据。内容取决于温度分辨率,见表5。

4.3.7 Register 0xFA…0xFC “temp” (_msb, _lsb, _xlsb) //不用

“临时”寄存器包含原始温度测量输出数据ut[19:0]。有关如何阅读设备的压力和温度信息,请参考章节

3.9。

Register 0xF7-0xF9 Name “press” 0XFA 0XFB

temp_msb[7:0] temp_lsb[7:0]

包含MSB ut(19:12)部分原始温度测量输出数据。 包含LSB ut(12:4)部分原始温度测量输出数据。

包含XLSB ut(3:0)部分原始温度测量输出数据。决议内容取决压力,见表4。

Description

0XFC(bit 7, 6, 5, 4) pressxlsb[3:0] 于

5. 数字接口

BMP280支持I2C和SPI数字接口;它作为一个从机的协议。I2C接口支持的标准、快速和高速模式。

SPI接口支持SPI模式“00”(CPOL = CPHA = 0)和模式“11”(CPOL = CPHA = ' 1 ')在四线和电话配置。 支持以下事务: ?单字节写

?多个字节写(使用成对的注册地址和注册数据) ?单一字节读

?多个字节读(使用一个注册地址自动递增) 5.1 接口选择

界面选择自动完成基于CSB(芯片选择)的地位。如果连接到V_DDIO CSB,I2C接口是活跃的。如果C

SB拉低(低电平),SPI接口被激活。CSB推倒一次后(无论发生任何时钟周期),I2C接口是禁用的,直到下一次上电复位。这样做是为了避免无意中解码SPI交通到另一个从机I2C数据。因为上电复位时才执行V_DD和V_DDIO都建立,没有错误的协议序列检测由于升高的风险。然而,如果使用I2C和CSB不是直接连接到V_DDIO而是通过可编程销,它必须确保这个销已经输出V_DDIO水平在上电复位装置。如果不是这种情况,设备将被锁定在SPI模式并没有回应I2C命令。 5.2 I2C接口

I2C从机接口是兼容飞利浦I2C规范2.1版本。详细计时参考表27。所有模式(标准、快速、高速)支

持。SDA和SCL并非纯粹的开路(漏极?)。里面包含VDDIO ESD保护二极管和接地。设备不执行时钟拉伸,SCL结构是高电平的输入没有拉低能力。

7位设备地址是111011 x。6 位MSB是固定的。SDO的最后一点改变的值,可以改变在操作期间。S

DO连接到接地导致从机地址1110110(0 x76),连接到V_DDIO导致从机地址1110111(0 x77),也就是BMP180 I2C的地址。SDO接口类型不能左浮动;如果左浮动,I2C地址将无定义。

I2C接口使用以下接口类型: ?SCK:串行时钟(sci) ?SDI:数据(SDA)

?SDO:从机地址LSB(接地= ' 0 ',V DDIO = ' 1 ')

CSB必须连接到V_DDIO选择I2C接口。SDI是双向流通到GND:它必须通过把外部连接到V_DDIO

电阻器。请参考第6章连接指令。 以下缩写将用于I2C协议的数据:

?S 开始 ?P停止

?ACKS 从机应答 ?ACKM 主机应答 ?NACKM 主机无应答

5.2.1 I2C写

写是通过发送从机地址以写模式(RW = 0),导致从机地址111011 x0(“X”是由SDO接口状态。然后主

发送对寄存器地址和寄存器数据。传输结束后停止条件。这是图7所示。

5.2.2 I2C读 /*******************/

能够读取寄存器,首先寄存器地址必须被发送以写模式(从机地址111011 x0)。然后一个停止或重复开始必须生成条件(等待应答)。解决该从机后以读模式(RW = ' 1 ')地址111011 x1,从机发出数据后自动递增寄存器地址,直到NOACKM发生和停止条件。图8所示,两个字节读取从0xf6和0xf7寄存器。/**翻译的乱七八糟的*/

5.4接口技术规格 5.4.1通用接口技术

给出了通用接口参数表26所示

5.4.2 I2C时间控制

因为I2C计时,以下使用缩写: ? “S?&F模式”=标准和快速模式 ? “HS模式”=高速模式 ? Cb =总线电容在SDA行

所有其他的命名是指I2C规范2.1(2000年1月)

I2C计时图如图12所示。表27给出相应的值。

.

上述I2C特定时间对应于以下内部添加延迟:

?SDI和SCK输入之间的输入延迟:SDI比SCK延迟通常100 ns的标准和快速模式和一般20 ns高速模式。 ?输出延迟SCK下降沿SDI输出传播通常是140 ns标准和快速模式,通常在高速模式下70纳秒。 补偿公式 32位

// Returns temperature in DegC, resolution is 0.01 DegC. Output value of “5123” equals 51.23 DegC.

// t_fine carries fine temperature as global value BMP280_S32_t t_fine;

BMP280_S32_t bmp280_compensate_T_int32(BMP280_S32_t adc_T) {

BMP280_S32_t var1, var2, T;

var1 = ((((adc_T>>3) – ((BMP280_S32_t)dig_T1<<1))) * ((BMP280_S32_t)dig_T2)) >> 11; var2 = (((((adc_T>>4) – ((BMP280_S32_t)dig_T1)) * ((adc_T>>4) – ((BMP280_S32_t)dig_T1))) >> 12) *

((BMP280_S32_t)dig_T3)) >> 14;

t_fine = var1 + var2;

T = (t_fine * 5 + 128) >> 8; return T; }

// Returns pressure in Pa as unsigned 32 bit integer. Output value of “96386” equals 96386 Pa = 963.86 hPa

BMP280_U32_t bmp280_compensate_P_int32(BMP280_S32_t adc_P) {

BMP280_S32_t var1, var2; BMP280_U32_t p;

var1 = (((BMP280_S32_t)t_fine)>>1) – (BMP280_S32_t)64000; var2 = (((var1>>2) * (var1>>2)) >> 11 ) * ((BMP280_S32_t)dig_P6); var2 = var2 + ((var1*((BMP280_S32_t)dig_P5))<<1); var2 = (var2>>2)+(((BMP280_S32_t)dig_P4)<<16);

var1 = (((dig_P3 * (((var1>>2) * (var1>>2)) >> 13 )) >> 3) + ((((BMP280_S32_t)dig_P2) * var1)>>1))>>18;

var1 =((((32768+var1))*((BMP280_S32_t)dig_P1))>>15); if (var1 == 0) {

return 0; // avoid exception caused by division by zero }

p = (((BMP280_U32_t)(((BMP280_S32_t)1048576)-adc_P)-(var2>>12)))*3125; if (p < 0x80000000) {

p = (p << 1) / ((BMP280_U32_t)var1); } else {

p = (p / (BMP280_U32_t)var1) * 2; }

var1 = (((BMP280_S32_t)dig_P9) * ((BMP280_S32_t)(((p>>3) * (p>>3))>>13)))>>12; var2 = (((BMP280_S32_t)(p>>2)) * ((BMP280_S32_t)dig_P8))>>13; p = (BMP280_U32_t)((BMP280_S32_t)p + ((var1 + var2 + dig_P7) >> 4)); return p; } 64位

// Returns temperature in DegC, double precision. Output value of “51.23” equals 51.23 DegC. // t_fine carries fine temperature as global value

BMP280_S32_t t_fine;

double bmp280_compensate_T_double(BMP280_S32_t adc_T) {

double var1, var2, T;

var1 = (((double)adc_T)/16384.0 – ((double)dig_T1)/1024.0) * ((double)dig_T2); var2 = ((((double)adc_T)/131072.0 – ((double)dig_T1)/8192.0) *

(((double)adc_T)/131072.0 – ((double) dig_T1)/8192.0)) * ((double)dig_T3); t_fine = (BMP280_S32_t)(var1 + var2); T = (var1 + var2) / 5120.0; return T; }

// Returns pressure in Pa as double. Output value of “96386.2” equals 96386.2 Pa = 963.862 hPa double bmp280_compensate_P_double(BMP280_S32_t adc_P) {

double var1, var2, p;

var1 = ((double)t_fine/2.0) – 64000.0;

var2 = var1 * var1 * ((double)dig_P6) / 32768.0; var2 = var2 + var1 * ((double)dig_P5) * 2.0; var2 = (var2/4.0)+(((double)dig_P4) * 65536.0);

var1 = (((double)dig_P3) * var1 * var1 / 524288.0 + ((double)dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0)*((double)dig_P1); if (var1 == 0.0) {

return 0; // avoid exception caused by division by zero }

p = 1048576.0 – (double)adc_P;

p = (p – (var2 / 4096.0)) * 6250.0 / var1; var1 = ((double)dig_P9) * p * p / 2147483648.0; var2 = p * ((double)dig_P8) / 32768.0;

p = p + (var1 + var2 + ((double)dig_P7)) / 16.0; return p; }

以上是本人使用数据手册时,简单翻译,如果有误,望指出,轻喷,谢谢!

BMP280_S32_t t_fine;

double bmp280_compensate_T_double(BMP280_S32_t adc_T) {

double var1, var2, T;

var1 = (((double)adc_T)/16384.0 – ((double)dig_T1)/1024.0) * ((double)dig_T2); var2 = ((((double)adc_T)/131072.0 – ((double)dig_T1)/8192.0) *

(((double)adc_T)/131072.0 – ((double) dig_T1)/8192.0)) * ((double)dig_T3); t_fine = (BMP280_S32_t)(var1 + var2); T = (var1 + var2) / 5120.0; return T; }

// Returns pressure in Pa as double. Output value of “96386.2” equals 96386.2 Pa = 963.862 hPa double bmp280_compensate_P_double(BMP280_S32_t adc_P) {

double var1, var2, p;

var1 = ((double)t_fine/2.0) – 64000.0;

var2 = var1 * var1 * ((double)dig_P6) / 32768.0; var2 = var2 + var1 * ((double)dig_P5) * 2.0; var2 = (var2/4.0)+(((double)dig_P4) * 65536.0);

var1 = (((double)dig_P3) * var1 * var1 / 524288.0 + ((double)dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0)*((double)dig_P1); if (var1 == 0.0) {

return 0; // avoid exception caused by division by zero }

p = 1048576.0 – (double)adc_P;

p = (p – (var2 / 4096.0)) * 6250.0 / var1; var1 = ((double)dig_P9) * p * p / 2147483648.0; var2 = p * ((double)dig_P8) / 32768.0;

p = p + (var1 + var2 + ((double)dig_P7)) / 16.0; return p; }

以上是本人使用数据手册时,简单翻译,如果有误,望指出,轻喷,谢谢!

本文来源:https://www.bwwdw.com/article/0hvr.html

Top