lsm9ds1 — LSM9DS1 9-axlig IMU

Drivrutin för ST:s iNEMO tröghetsmodul LSM9DS1 över I2C. LSM9DS1 kombinerar en 3-axlig accelerometer, ett 3-axligt gyroskop och en 3-axlig magnetometer i ett enda paket; accelerometern och gyroskopet delar en I2C-adress medan magnetometern svarar på en andra adress. Denna drivrutin aktiverar även chipets 16 poster djupa FIFO för gyro/accel så att de senaste samplen kan tömmas effektivt via iter_accel_gyro().

Exempel:

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)

Klasser

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)

Skapar en LSM9DS1-instans, verifierar WHO_AM_I-registren för båda delenheterna, konfigurerar alla tre sensorerna och aktiverar FIFO för accel/gyro i kontinuerligt läge.

bus

En konfigurerad machine.I2C-buss som sensorn är ansluten till.

address_imu

7-bitars I2C-adress för accelerometer-/gyroskopdelenheten. Är som standard 0x6B.

address_magnet

7-bitars I2C-adress för magnetometerdelenheten. Är som standard 0x1E.

gyro_odr

Gyroskopets utdatahastighet i Hz. Måste vara en av 0 (av), 14.9, 59.5, 119, 238, 476 eller 952.

gyro_scale

Gyroskopets fullskaleområde i grader per sekund. Måste vara en av 245, 500 eller 2000.

accel_odr

Accelerometerns utdatahastighet i Hz. Samma uppsättning värden som gyro_odr.

accel_scale

Accelerometerns fullskaleområde i g. Måste vara en av 2, 4, 8 eller 16.

magnet_odr

Magnetometerns utdatahastighet i Hz. Måste vara en av 0.625, 1.25, 2.5, 5, 10, 20, 40 eller 80.

magnet_scale

Magnetometerns fullskaleområde i gauss. Måste vara en av 4, 8, 12 eller 16.

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

Skriver en hård-järn-offsetvektor in i magnetometerns OFFSET_REG_*_M-register. Offseten anges i samma enheter som magnet() returnerar (gauss); varje komponent konverteras till råa LSB med den konfigurerade magnetometerskalan innan den skrivs.

gyro_id() bytes

Returnerar enbytevärdet i registret WHO_AM_I för accelerometer-/gyroskopdelenheten.

magent_id() bytes

Returnerar enbytevärdet i registret WHO_AM_I för magnetometerdelenheten.

gyro() tuple[float, float, float]

Returnerar gyroskopvektorn (x, y, z) i grader per sekund.

accel() tuple[float, float, float]

Returnerar accelerationsvektorn (x, y, z) i enheter av standardtyngdacceleration (1 g = 9,81 m/s²).

magnet() tuple[float, float, float]

Returnerar magnetfältsvektorn (x, y, z) i gauss.

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

Generator som ger (gyro, accel)-tupler för varje sampel som för närvarande är tillgängligt i FIFO:n och stoppar så snart FIFO:n är tom. Varje komponentvektor har samma enheter som gyro() respektive accel().