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() 相同的單位。