风筝
发表于: 2019-5-7 10:02:34 | 显示全部楼层

在github上面有几个BMI088加速度传感器的Arduino库,其中有一个库做的很棒 - bolderflight/BMI088。该库支持SPI和I2C连接方式。非常感谢Bolder Flight Systems做出的贡献。本文对github中该库的使用方法进行了翻译,如有错漏,敬请指正。



BMI088

本Arduino库用于与BMI088六轴惯性测量单元(IMU)通信。


简介

博世Sensortec BMI088是一款高性能六轴惯性测量单元(IMU),具有高振动稳定性,专为无人机和机器人应用而设计。 BMI088专门设计用于有效抑制由于PCB上的共振或整个系统的结构而可能发生的振动。除了高振动稳健性外,BMI088卓越的温度稳定性有助于提高估算滤波器性能,IMU具有极宽的24G加速度计范围。


BMI088是一种系统级封装(SiP),将加速度计和陀螺仪组合到一个封装中。 BMI088支持高达400 kHz的I2C和高达10 MHz的SPI通信。加速度计和陀螺仪可以单独访问,也可以同步输出数据。 BMI088还具有可编程满量程范围、输出数据速率和中断。


用法

该库支持与BMI088进行I2C和SPI通信。


安装

只需将此库克隆或下载到Arduino / libraries文件夹中即可。


功能说明

该库支持与BMI088进行I2C和SPI通信。类可用于加速度计、陀螺仪和两者的同步输出。


Bmi088Accel类

该类用于使用BMI088加速度计。 Bmi088Accel对象声明重载了I2C和SPI通信的不同声明。所有其他函数保持不变。


I2C对象声明

Bmi088Accel(TwoWire &bus,uint8_t address):应声明Bmi088Accel对象,指定I2C总线和Bmi088Accel I2C地址。如果SDO1引脚接地,则I2C地址为0x18;如果SDO1引脚拉高,则I2C地址为0x19。例如,以下代码声明一个名为accel的Bmi088Accel对象,其中BMI088传感器位于I2C总线0上,传感器地址为0x18(SDO1接地)。

  1. Bmi088Accel accel(Wire,0x18);
复制代码

SPI对象声明

Bmi088Accel(SPIClass &bus,uint8_t csPin):应声明Bmi088Accel对象,指定SPI总线和使用的芯片选择引脚。可以在同一SPI总线上使用多个BMI088或其他SPI对象,每个都有自己的片选引脚。片选引脚可以是任何可用的数字引脚。例如,以下代码声明了一个名为accel的Bmi088Accel对象,其中BMI088传感器位于SPI总线0上,芯片选择引脚10。

  1. Bmi088Accel accel(SPI,10);
复制代码

常用设置函数

以下函数用于设置BMI088传感器。这些应该在数据收集之前调用一次,通常这是在Arduino void setup()函数中完成的。应始终使用begin函数。以下函数可选地,setOdr可用于设置输出数据速率和数字低通滤波,setRange可用于设置传感器的满量程范围。 pinModeInt1和pinModeInt2可用于设置引脚1和引脚2中断引脚(推挽与开漏,高电平有效与低电平有效)。 mapDrdyInt1和mapDrdyInt2分别将数据就绪中断映射到引脚1和引脚2。如果不使用这些可选函数,则使用输出数据速率和数字低通滤波的默认值,而不配置数据就绪中断引脚。


int begin():这应该在你的setup函数中调用。它初始化与BMI088加速度计的通信,并设置传感器以读取数据。此函数在成功初始化时返回正值,并在不成功初始化时返回负值。如果不成功,请检查您的接线或尝试复位传感器的电源。以下是设置Bmi088Accel的示例。

  1. int status;
  2. status = accel.begin();
复制代码

(可选)bool setOdr(Odr odr) :BMI088具有可编程输出数据速率和数字低通滤波功能。支持以下枚举设置:

输出数据速率
DLPF带宽
ODR枚举名称
1600 Hz
280 Hz
ODR_1600HZ_BW_280HZ
1600 Hz
234 Hz
ODR_1600HZ_BW_234HZ
1600 Hz
145 Hz
ODR_1600HZ_BW_145HZ
800 Hz
230 Hz
ODR_800HZ_BW_230HZ
800 Hz
140 Hz
ODR_800HZ_BW_140HZ
800 Hz
80 Hz
ODR_800HZ_BW_80HZ
400 Hz
145 Hz
ODR_400HZ_BW_145HZ
400 Hz
75 Hz
ODR_400HZ_BW_75HZ
400 Hz
40 Hz
ODR_400HZ_BW_40HZ
200 Hz
80 Hz
ODR_200HZ_BW_80HZ
200 Hz
38 Hz
ODR_200HZ_BW_38HZ
200 Hz
20 Hz
ODR_200HZ_BW_20HZ
100 Hz
40 Hz
ODR_100HZ_BW_40HZ
100 Hz
19 Hz
ODR_100HZ_BW_19HZ
100 Hz
10 Hz
ODR_100HZ_BW_10HZ
50 Hz
20 Hz
ODR_50HZ_BW_20HZ
50 Hz
9 Hz
ODR_50HZ_BW_9HZ
50 Hz
5 Hz
ODR_50HZ_BW_5HZ
25 Hz
10 Hz
ODR_25HZ_BW_10HZ
25 Hz
5 Hz
ODR_25HZ_BW_5HZ
25 Hz
3 Hz
ODR_25HZ_BW_3HZ
12.5 Hz
5 Hz
ODR_12_5HZ_BW_5HZ
12.5 Hz
2 Hz
ODR_12_5HZ_BW_2HZ
12.5 Hz
1 Hz
ODR_12_5HZ_BW_1HZ

以下示例是将输出数据速率设置为100 Hz,带宽设置为19 Hz。

  1. bool status;
  2. status = accel.setOdr(Bmi088Accel::ODR_100HZ_BW_19HZ);
复制代码

(可选)bool setRange(Range range):BMI088可以编程满量程范围。支持以下枚举设置:

满量程范围
枚举变量名称
+/- 24 G
RANGE_24G
+/- 12 G
RANGE_12G
+/- 6 G
RANGE_6G
+/- 3 G
RANGE_3G

以下是将量程范围设置为+/- 6 G的示例。

  1. bool status;
  2. status = accel.setRange(Bmi088Accel::RANGE_6G);
复制代码

(可选)pinModeInt1(PinMode mode, PinLevel level) 、(可选)pinModeInt2(PinMode mode, PinLevel level) :BMI088加速度计具有两个中断引脚,数据就绪中断可以映射两个。这两个中断引脚的每一个都可以设置成输出是推挽还是漏极开路,以及引脚是高电平有效还是低电平有效。

引脚模式
名称
推拉(Push-Pull)
PUSH_PULL
漏极开路
OPEN_DRAIN

有效电平
名称
高电平
ACTIVE_HIGH
低电平
ACTIVE_LOW

下面是将中断引脚1设置为推挽和高电平有效的示例。

  1. bool status;
  2. status = accel.pinModeInt1(Bmi088Accel::PUSH_PULL,Bmi088Accel::ACTIVE_HIGH);
复制代码

(可选)mapDrdyInt1(bool enable) 、(可选)mapDrdyInt2(bool enable) :这些函数设置BMI088加速度计是否将其数据就绪中断映射到引脚1和/或引脚2。设置为true将数据就绪中断映射到引脚,或false表示禁用映射。

  1. bool status;
  2. status = accel.mapDrdyInt1(true);
复制代码

常用数据收集函数

以下函数用于从BMI088加速度计收集数据。将数据缩放到工程单位并转换为右手坐标系,Z轴正向下。请参阅“坐标系”部分。除加速度外,BMI088加速度计还提供BMI088芯片温度和传感器时间值。加速度计数据以m / s / s为单位返回,温度数据以摄氏度为单位返回,时间数据以皮秒为单位返回。 readSensor用于读取传感器并将最新数据存储在缓冲区中,每次要从传感器检索数据时都应调用它。 getAccelX_mss、getAccelY_mss、getAccelZ_mss、getTemperature_C和getTime_ps返回该缓冲区的加速度计值、温度和时间值。


bool readSensor() :读取传感器并将最新数据存储在缓冲区中,每次要从传感器检索数据时都应调用它。

  1. bool status;
  2. status = accel.readSensor();
复制代码

float getAccelX_mss() :从数据缓冲区中获取X方向的加速度计值,并以m / s / s为单位返回。

  1. float ax;
  2. ax = accel.getAccelX_mss();
复制代码

float getAccelY_mss() :从数据缓冲区中获取Y方向的加速度计值,并以m / s / s为单位返回。

  1. float ay;
  2. ay = accel.getAccelY_mss();
复制代码

float getAccelZ_mss():从数据缓冲区中获取Z方向的加速度计值,并以m / s / s为单位返回。

  1. float az;
  2. az = accel.getAccelZ_mss();
复制代码

float getTemperature_C():从数据缓冲区中获取die温度值,并以C为单位返回。

  1. float t;
  2. t = accel.getTemperature_C();
复制代码

uint64_t getTime_ps():从数据缓冲区获取传感器时间值,并以ps为单位返回。

  1. uint_64t time_ps;
  2. time_ps = accel.getTime_ps();
复制代码

跳转到指定楼层
风筝
发表于: 2019-5-7 10:28:15 | 显示全部楼层

Bmi088Gyro类

该类用于与BMI088陀螺仪配合使用。 Bmi088Gyro对象声明重载了I2C和SPI通信的不同声明。所有其他函数保持不变。


I2C对象声明

Bmi088Gyro(TwoWire &bus,uint8_t address) :声明Bmi088Gyro对象,指定I2C总线和Bmi088Gyro I2C地址。如果SDO2引脚接地,则I2C地址为0x68;如果SDO2引脚拉高,则I2C地址为0x69。例如,以下代码声明了一个名为gyro的Bmi088Gyro对象,其中BMI088传感器位于I2C总线0上,传感器地址为0x68(SDO2接地)。

  1. Bmi088Gyro gyro(Wire,0x68);
复制代码

SPI对象声明

Bmi088Gyro(SPIClass &bus,uint8_t csPin) :声明Bmi088Gyro对象,指定SPI总线和使用的芯片选择引脚。可以在同一SPI总线上使用多个BMI088或其他SPI对象,每个都有自己的片选引脚。片选引脚可以是任何可用的数字引脚。例如,以下代码声明了一个名为gyro的Bmi088Gyro对象,其中BMI088传感器位于SPI总线0上,芯片选择引脚9。

  1. Bmi088Gyro gyro(SPI,9);
复制代码

常用设置函数

以下函数用于设置BMI088传感器。这些应该在数据收集之前调用一次,通常这是在Arduino void setup()函数中完成的。应始终使用begin函数。可选地,setOdr可用于设置输出数据速率和数字低通滤波,setRange可用于设置传感器的满量程范围。 pinModeInt3和pinModeInt4可用于设置引脚3和引脚4中断引脚(推挽与开漏,高电平有效与低电平有效)。 mapDrdyInt3和mapDrdyInt4分别将数据就绪中断映射到引脚3和引脚4。如果不使用这些可选函数,则使用输出数据速率和数字低通滤波的默认值,并且不配置数据就绪中断引脚。


int begin():这应该在你的setup函数中调用。它初始化与BMI088陀螺仪的通信,并设置传感器以读取数据。此函数在成功初始化时返回正值,并在初始化不成功时返回负值。如果不成功,请检查您的接线或尝试复位传感器的电源。以下是设置Bmi088Gyro的示例。

  1. int status;
  2. status = gyro.begin();
复制代码

(可选)bool setOdr(Odr odr) :BMI088具有可编程输出数据速率和数字低通滤波功能。支持以下枚举设置:

输出数据速率
DLPF带宽
ODR枚举变量名称
2000 Hz
532 Hz
ODR_2000HZ_BW_532HZ
2000 Hz
230 Hz
ODR_2000HZ_BW_230HZ
1000 Hz
116 Hz
ODR_1000HZ_BW_116HZ
400 Hz
47 Hz
ODR_400HZ_BW_47HZ
200 Hz
64 Hz
ODR_200HZ_BW_64HZ
200 Hz
23 Hz
ODR_200HZ_BW_23HZ
100 Hz
32 Hz
ODR_100HZ_BW_32HZ
100 Hz
12 Hz
ODR_100HZ_BW_12HZ

以下是将输出数据速率设置为100 Hz,带宽设置为12 Hz的示例。

  1. bool status;
  2. status = gyro.setOdr(Bmi088Gyro::ODR_100HZ_BW_12HZ);
复制代码

(可选)bool setRange(Range range):BMI088具有可编程满量程范围的功能。支持以下枚举设置:

满量程范围
枚举名称
+/- 2000 deg/s
RANGE_2000DPS
+/- 1000 deg/s
RANGE_1000DPS
+/- 500 deg/s
RANGE_500DPS
+/- 250 deg/s
RANGE_250DPS
+/- 125 deg/s
RANGE_125DPS

以下是将范围设置为+/- 500 deg / s的示例。

  1. bool status;
  2. status = gyro.setRange(Bmi088Gyro::RANGE_500DPS);
复制代码

(可选)pinModeInt3(PinMode mode, PinLevel level)、(可选)pinModeInt4(PinMode mode, PinLevel level):BMI088陀螺仪具有两个中断引脚,数据就绪中断可以映射到两个中断。这些中断的每一个都可以根据输出是推挽还是漏极开路,以及引脚是高电平还是低电平来设置。

引脚模式
名称
推拉(Push-Pull)
PUSH_PULL
漏极开路
OPEN_DRAIN

有效电平
名称
高电平
ACTIVE_HIGH
低电平
ACTIVE_LOW

以下是将中断引脚3设置为推挽和高电平有效的示例。

  1. bool status;
  2. status = gyro.pinModeInt3(Bmi088Gyro::PUSH_PULL,Bmi088Gyro::ACTIVE_HIGH);
复制代码

mapDrdyInt3(bool enable)mapDrdyInt3(bool enable):这些函数设置BMI088陀螺仪是否将其数据就绪中断映射到引脚3和/或引脚4。设置为true以将数据就绪中断映射到引脚,或false表示禁用映射。

  1. bool status;
  2. status = gyro.mapDrdyInt3(true);
复制代码

通用数据收集函数

以下函数用于从BMI088陀螺仪收集数据。将数据缩放到工程单位并转换为右手坐标系,Z轴正向下。请参阅“坐标系”部分。陀螺仪数据以rad / s为单位返回。 readSensor用于读取传感器并将最新数据存储在缓冲区中,每次要从传感器检索数据时都应调用它。 getGyroX_rads、getGyroY_rads、getGyroZ_rads从该缓冲区返回陀螺仪值。


bool readSensor() :读取传感器并将最新数据存储在缓冲区中,每次要从传感器检索数据时都应调用它。

  1. bool status;
  2. status = gyro.readSensor();
复制代码

float getGyroX_rads():从数据缓冲区中获取陀X方向的螺仪值,并以rad / s为单位返回。

  1. float gx;
  2. gx = gyro.getGyroX_rads();
复制代码

float getGyroY_rads() :从数据缓冲区获取陀Y方向的螺仪值,并以rad / s为单位返回。

  1. float gy;
  2. gy = gyro.getGyroY_rads();
复制代码

float getGyroZ_rads() :从数据缓冲区中获取Z方向的陀螺仪值,并以rad / s为单位返回。

  1. float gz;
  2. gz = gyro.getGyroZ_rads();
复制代码

回复

使用道具 举报

风筝
发表于: 2019-5-7 11:06:11 | 显示全部楼层

Bmi088类

该类用于处理BMI088传感器的同步输出。在此模式下,其中一个陀螺仪中断与加速度计中断相关联,加速度计上的逻辑用于内插和同步数据输出。在同步模式下,仅支持加速度计和陀螺仪的单个输出数据速率和数字低通滤波器的子集。 Bmi088对象声明因I2C和SPI通信的不同声明而重载。所有其他函数保持不变。


I2C对象声明

Bmi088(TwoWire &bus,uint8_t accel_addr,uint8_t gyro_addr) :声明Bmi088对象,指定I2C总线和加速度计和陀螺仪的I2C地址。如果SDO1引脚接地,则加速度计的I2C地址为0x18;如果SDO1引脚被拉高,则加速度计的I2C地址为0x19。如果SDO2引脚接地,则I2C地址为0x68;如果SDO2引脚拉高,则I2C地址为0x69。例如,下面的代码声明一个名为bmi的Bmi088对象,其中BMI088传感器位于I2C总线0上,加速度计地址为0x18(SDO1接地),陀螺仪地址为0x68(SDO2接地);

  1. Bmi088 bmi(Wire,0x18,0x68);
复制代码

SPI对象声明

Bmi088(SPIClass &bus,uint8_t accel_cs,uint8_t gyro_cs):声明Bmi088对象,指定SPI总线和加速度计和陀螺仪的芯片选择引脚。可以在同一SPI总线上使用多个BMI088或其他SPI对象,每个都有自己的片选引脚。片选引脚可以是任何可用的数字引脚。例如,以下代码声明了一个名为bmi的Bmi088对象,其中BMI088传感器位于SPI总线0上,其中加速度计片上选择引脚10和陀螺仪芯片选择引脚9。

  1. Bmi088 bmi(SPI,10,9);
复制代码

常用设置函数

以下函数用于设置BMI088传感器。这些应该在数据收集之前调用一次,通常这是在Arduino void setup()函数中完成的。应始终使用begin函数。可选地,setOdr可用于设置输出数据速率和数字低通滤波,setRange可用于设置传感器的满量程范围。 mapDrdy设置用于同步数据就绪中断的引脚,然后另一个加速度计引脚用于与陀螺仪同步。 mapSync设置用于与加速度计同步的陀螺仪引脚。 pinModeDrdy设置数据就绪中断引脚(推挽与漏极开路,高电平有效与低电平有效)。如果不使用这些可选函数,则使用输出数据速率和数字低通滤波的默认值,加速度计引脚1和陀螺仪引脚3用于同步,加速度计引脚2用作同步数据就绪中断。


int begin():这应该在你的setup函数中调用。它初始化与BMI088的通信并设置传感器以读取数据。此函数在初始化成功时返回正值,并在初始化不成功时返回负值。如果不成功,请检查您的接线或复位重置传感器的电源。以下是设置Bmi088的示例。

  1. int status;
  2. status = bmi.begin();
复制代码

(可选)bool setOdr(Odr odr):BMI088具有可编程输出数据速率和数字低通滤波功能。支持以下枚举设置:

输出数据速率
加速度计DLPF带宽
陀螺仪DLPF带宽
枚举变量名称
2000 Hz
280 Hz
230 Hz
ODR_2000HZ
1000 Hz
230 Hz
116 Hz
ODR_1000HZ
400 Hz
145 Hz
47 Hz
ODR_400HZ

以下是将输出数据速率设置为400 Hz的示例。

  1. bool status;
  2. status = bmi.setOdr(Bmi088::ODR_400HZ);
复制代码

(可选)bool setRange(AccelRange accel_range,GyroRange gyro_range) :BMI088具有可编程的加速度计和陀螺满量程范围。支持以下枚举设置:

加速满量程范围
枚举名称
+/- 24 G
ACCEL_RANGE_24G
+/- 12 G
ACCEL_RANGE_12G
+/- 6 G
ACCEL_RANGE_6G
+/- 3 G
ACCEL_RANGE_3G

陀螺仪满量程范围
枚举名称
+/- 2000 deg/s
GYRO_RANGE_2000DPS
+/- 1000 deg/s
GYRO_RANGE_1000DPS
+/- 500 deg/s
GYRO_RANGE_500DPS
+/- 250 deg/s
GYRO_RANGE_250DPS
+/- 125 deg/s
GYRO_RANGE_125DPS

下面是将加速度计范围设置为+/- 6 G且陀螺仪范围设置为+/- 500 deg / s的示例。

  1. bool status;
  2. status = bmi.setRange(Bmi088::ACCEL_RANGE_6G,Bmi088::GYRO_RANGE_500DPS);
复制代码

(可选)bool mapDrdy(DrdyPin pin):两个引脚可用于同步数据就绪中断 - 引脚1或引脚2。此函数用于选择要使用的引脚,未选择的引脚自动配置为用作加速度计和陀螺仪两者之间的同步引脚。

引脚编号
名称
1
PIN_1
2
PIN_2

下面是设置引脚2用作同步数据就绪中断的示例。

  1. bool status;
  2. status = bmi.mapDrdy(Bmi088::PIN_2);
复制代码

(可选)bool mapSync(SyncPin pin):此函数用于选择哪个陀螺仪引脚用作加速度计和gyo之间的同步引脚。有两个引脚 - 引脚3或引脚4。

引脚编号
名称
3
PIN_3
4
PIN_4

下面是设置引脚3以用作同步引脚的示例。

  1. bool status;
  2. status = bmi.mapSync(Bmi088::PIN_3);
复制代码

(可选)pinModeDrdy(PinMode mode, PinLevel level):BMI088同步数据中断引脚可以根据输出是推挽还是漏极开路,以及引脚是高电平还是低电平来设置。

引脚模式
名称
推拉(Push-Pull)
PUSH_PULL
漏极开路
OPEN_DRAIN

有效电平
名称
高电平
ACTIVE_HIGH
低电平
ACTIVE_LOW

下面是将中断设置为推挽和高电平有效的示例。

  1. bool status;
  2. status = bmi.pinModeDrdy(Bmi088::PUSH_PULL,Bmi088::ACTIVE_HIGH);
复制代码

通用数据收集函数

以下函数用于从BMI088收集数据。将数据缩放到工程单位并转换为右手坐标系,Z轴正向下。请参阅“坐标系”部分。加速度计数据以m / s / s为单位返回,陀螺仪数据以rad / s为单位,温度数据以摄氏度为单位,时间数据以皮秒为单位。 readSensor用于读取传感器并将最新数据存储在缓冲区中,每次要从传感器检索数据时都应调用它。 getAccelX_mss、getAccelY_mss、getAccelZ_mss、getGyroX_rads、getGyroY_rads、getGyroZ_rads、getTemperature_C和getTime_ps从该缓冲区返回加速度计、陀螺仪、温度和时间值。


bool readSensor() :读取传感器并将最新数据存储在缓冲区中,每次要从传感器检索数据时都应调用它。

  1. bool status;
  2. status = accel.readSensor();
复制代码

float getAccelX_mss() :从数据缓冲区中获取X方向的加速度计值,并以m / s / s为单位返回。

  1. float ax;
  2. ax = accel.getAccelX_mss();
复制代码


float getAccelY_mss() :从数据缓冲区中获取Y方向的加速度计值,并以m / s / s为单位返回。

  1. float ay;
  2. ay = accel.getAccelY_mss();
复制代码

float getAccelZ_mss():从数据缓冲区中获取Z方向的加速度计值,并以m / s / s为单位返回。

  1. float az;
  2. az = accel.getAccelZ_mss();
复制代码

float getGyroX_rads():从数据缓冲区中获取陀X方向的螺仪值,并以rad / s为单位返回。

  1. float gx;
  2. gx = gyro.getGyroX_rads();
复制代码

float getGyroY_rads() :从数据缓冲区获取陀Y方向的螺仪值,并以rad / s为单位返回。

  1. float gy;
  2. gy = gyro.getGyroY_rads();
复制代码

float getGyroZ_rads() :从数据缓冲区中获取Z方向的陀螺仪值,并以rad / s为单位返回。

  1. float gz;
  2. gz = gyro.getGyroZ_rads();
复制代码

float getTemperature_C():从数据缓冲区中获取die温度值,并以C为单位返回。

  1. float t;
  2. t = accel.getTemperature_C();
复制代码

uint64_t getTime_ps():从数据缓冲区获取传感器时间值,并以ps为单位返回。

  1. uint_64t time_ps;
  2. time_ps = accel.getTime_ps();
复制代码

回复

使用道具 举报

风筝
发表于: 2019-5-7 11:23:21 | 显示全部楼层

传感器方向

该库在数据返回之前将所有数据转换为公共轴系统。该轴系统如下所示。它是一个右手坐标系,z轴正向下,在飞机动力学中很常见。

MPU-9250-AXIS.png

警告!该轴系统相对于BMI088传感器显示。传感器可以相对于分线板旋转。


示例列表

●    Basic_I2C:使用I2C与传感器通信的基础演示示例。

●    Basic_SPI:使用SPI与传感器通信的基础演示示例。

●    Int_I2C:设置输出数据速率和中断引脚。数据就绪中断用于读取传感器,通信是I2C。

●    Sync_SPI:通过Bmi088对象使用同步输出连接传感器。 使用SPI通信。


接线和上拉

请参考BMI088数据手册和微控制器的引脚图。


I2C

BMI088引脚应连接为:

●    VDD:电源引脚,1.7V至3.6V。

●    GND:接地。

●    VDDIO:数字I / O电源电压。1.2V至3.6V。

●    SDA / SDI:连接到SDA。

●    SCL / SCK:连接到SCL。

●    SDO1:该引脚接地,则选择加速度计I2C地址0x18。将高电平拉至VDD以选择I2C地址0x19。

●    SDO2:该引脚接地,则选择陀螺仪I2C地址0x68。将高电平拉至VDD以选择I2C地址0x69。

●    PS:将高电平拉至VDD选择I2C。

●    CSB1:浮空

●    CSB2:浮空

●    INT1 / INT2:根据需要用作加速度计的数据就绪中断。在同步模式下使用时,将其中一个引脚连接到INT3 / INT4。

●    INT3 / INT4:根据需要用作陀螺仪的数据就绪中断。在同步模式下使用时,将其中一个引脚连接到INT1 / INT2。

在SDA和SCL上应使用2.2 k - 4.7 kOhm电阻作为上拉电阻,这些电阻应使用3.3V电源上拉。


SPI

BMI088引脚应连接为:

●    VDD:电源引脚,1.7V至3.6V。

●    GND:接地。

●    VDDIO:数字I / O电源电压。1.2V至3.6V。

●    SDA / SDI:连接到MOSI。

●    SCL / SCK:连接到SCL。

●    SDO1:连接到MISO。

●    SDO2:连接到MISO。

●    PS:接地,选择SPI。

●    CSB1:连接到加速度计芯片选择引脚。

●    CSB2:连接陀螺仪芯片选择引脚。

●    INT1 / INT2:根据需要用作加速度计的数据就绪中断。在同步模式下使用时,将其中一个引脚连接到INT3 / INT4。

●    INT3 / INT4:根据需要用作陀螺仪的数据就绪中断。在同步模式下使用时,将其中一个引脚连接到INT1 / INT2。

回复

使用道具 举报

风筝
发表于: 2020-5-10 20:00:46 | 显示全部楼层

本帖最后由 风筝 于 2020-5-10 20:02 编辑

以下是两款BMI088传感器模块的淘宝链接:

●    YBX-BMI088(I2C接口)加速度传感器模块:https://item.taobao.com/item.htm?id=589447558027

●    YBX-BMI088(SPI接口)加速度传感器模块:https://item.taobao.com/item.htm?id=591903885679

YBX-BMI088(SPI)商品主图.jpg

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-21 22:51 , Processed in 0.070339 second(s), 5 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表