教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

气压BST-BMP280-DS001-10 阅读 - 图文(6)

来源:网络收集 时间:2026-08-24
导读: I2C从机接口是兼容飞利浦I2C规范2.1版本。详细计时参考表27。所有模式(标准、快速、高速)支 持。SDA和SCL并非纯粹的开路(漏极?)。里面包含VDDIO ESD保护二极管和接地。设备不执行时钟拉伸,SCL结构是高电平的输入

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; }

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

…… 此处隐藏:1652字,全部文档内容请下载后查看。喜欢就下载吧 ……
气压BST-BMP280-DS001-10 阅读 - 图文(6).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/519294.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)