lsm9ds1 --- LSM9DS1 9 轴 IMU

用于通过 I2C 连接 ST LSM9DS1 iNEMO 惯性模块的驱动程序。LSM9DS1 将 3 轴加速度计、3 轴陀螺仪和 3 轴磁力计集成在单个封装中;加速度计和陀螺仪共用一个 I2C 地址,而磁力计在第二个地址上响应。该驱动程序还启用了片上 16 级深的陀螺仪/加速度计 FIFO,以便能够通过 iter_accel_gyro() 高效地排空最近的采样。

示例:

import time
from machine import Pin, I2C
from lsm9ds1 import LSM9DS1

imu = LSM9DS1(I2C(1, scl=Pin("P15"), sda=Pin("P14")))

while True:
    print("Accelerometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.accel()))
    print("Magnetometer:  x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.magnet()))
    print("Gyroscope:     x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.gyro()))
    time.sleep_ms(100)

class lsm9ds1.LSM9DS1(bus: machine.I2C, address_imu: int = 0x6B, address_magnet: int = 0x1E, gyro_odr: float = 952, gyro_scale: int = 245, accel_odr: float = 952, accel_scale: int = 4, magnet_odr: int = 80, magnet_scale: int = 4)

构造一个 LSM9DS1 实例,验证两个子器件的 WHO_AM_I 寄存器,配置全部三个传感器,并以连续模式启用加速度计/陀螺仪 FIFO。

bus

传感器所连接的已配置的 machine.I2C 总线。

address_imu

加速度计/陀螺仪子器件的 7 位 I2C 地址。默认为 0x6B

address_magnet

磁力计子器件的 7 位 I2C 地址。默认为 0x1E

gyro_odr

以 Hz 为单位的陀螺仪输出数据速率。必须为 0(关闭)、14.959.5119238476952 之一。

gyro_scale

以度每秒为单位的陀螺仪满量程范围。必须为 2455002000 之一。

accel_odr

以 Hz 为单位的加速度计输出数据速率。取值集合与 gyro_odr 相同。

accel_scale

以 g 为单位的加速度计满量程范围。必须为 24816 之一。

magnet_odr

以 Hz 为单位的磁力计输出数据速率。必须为 0.6251.252.5510204080 之一。

magnet_scale

以高斯为单位的磁力计满量程范围。必须为 481216 之一。

calibrate_magnet(offset: tuple[float, float, float]) None

将硬磁偏移矢量写入磁力计的 OFFSET_REG_*_M 寄存器。偏移量以与 magnet() 返回值相同的单位(高斯)给出;每个分量在写入之前都会使用已配置的磁力计量程转换为原始 LSB。

gyro_id() bytes

返回加速度计/陀螺仪子器件的单字节 WHO_AM_I 寄存器值。

magent_id() bytes

返回磁力计子器件的单字节 WHO_AM_I 寄存器值。

gyro() tuple[float, float, float]

返回以度每秒为单位的陀螺仪矢量 (x, y, z)

accel() tuple[float, float, float]

返回以标准重力加速度为单位的加速度矢量 (x, y, z)(1 g = 9.81 m/s²)。

magnet() tuple[float, float, float]

返回以高斯为单位的磁场矢量 (x, y, z)

iter_accel_gyro() Iterator[tuple[tuple[float, float, float], tuple[float, float, float]]]

为 FIFO 中当前可用的每个采样产出 (gyro, accel) 元组的生成器,一旦 FIFO 为空便停止。每个分量矢量分别与 gyro()accel() 具有相同的单位。