lsm9ds1 — LSM9DS1 9-assige IMU

Driver voor de ST LSM9DS1 iNEMO inertiële module via I2C. De LSM9DS1 combineert een 3-assige versnellingsmeter, 3-assige gyroscoop en 3-assige magnetometer in een enkele behuizing; de versnellingsmeter en gyroscoop delen een I2C-adres terwijl de magnetometer op een tweede adres reageert. Deze driver schakelt ook de 16-diepe gyro/accel-FIFO op de chip in, zodat de meest recente samples efficiënt kunnen worden afgevoerd via iter_accel_gyro().

Voorbeeld:

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)

Klassen

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)

Construeer een LSM9DS1-instantie, verifieer de WHO_AM_I-registers van beide subapparaten, configureer alle drie de sensoren en schakel de accel/gyro-FIFO in continue modus in.

bus

Een geconfigureerde machine.I2C-bus waaraan de sensor is gekoppeld.

address_imu

7-bits I2C-adres van het subapparaat van de versnellingsmeter/gyroscoop. Standaard 0x6B.

address_magnet

7-bits I2C-adres van het subapparaat van de magnetometer. Standaard 0x1E.

gyro_odr

Output data rate van de gyroscoop in Hz. Moet een van de volgende zijn: 0 (uit), 14.9, 59.5, 119, 238, 476 of 952.

gyro_scale

Full-scale bereik van de gyroscoop in graden per seconde. Moet een van de volgende zijn: 245, 500 of 2000.

accel_odr

Output data rate van de versnellingsmeter in Hz. Dezelfde set waarden als gyro_odr.

accel_scale

Full-scale bereik van de versnellingsmeter in g. Moet een van de volgende zijn: 2, 4, 8 of 16.

magnet_odr

Output data rate van de magnetometer in Hz. Moet een van de volgende zijn: 0.625, 1.25, 2.5, 5, 10, 20, 40 of 80.

magnet_scale

Full-scale bereik van de magnetometer in gauss. Moet een van de volgende zijn: 4, 8, 12 of 16.

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

Schrijf een hard-iron offsetvector naar de OFFSET_REG_*_M-registers van de magnetometer. De offset wordt opgegeven in dezelfde eenheden als magnet() teruggeeft (gauss); elke component wordt naar ruwe LSB’s geconverteerd met behulp van de geconfigureerde magnetometerschaal voordat deze wordt geschreven.

gyro_id() bytes

Geeft de waarde van het enkele-byte WHO_AM_I-register van het subapparaat van de versnellingsmeter/gyroscoop terug.

magent_id() bytes

Geeft de waarde van het enkele-byte WHO_AM_I-register van het subapparaat van de magnetometer terug.

gyro() tuple[float, float, float]

Geeft de gyroscoopvector (x, y, z) in graden per seconde terug.

accel() tuple[float, float, float]

Geeft de versnellingsvector (x, y, z) terug in eenheden van standaard zwaartekracht (1 g = 9.81 m/s²).

magnet() tuple[float, float, float]

Geeft de magnetische-veldvector (x, y, z) in gauss terug.

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

Generator die (gyro, accel)-tuples oplevert voor elk sample dat momenteel beschikbaar is in de FIFO en stopt zodra de FIFO leeg is. Elke componentvector heeft respectievelijk dezelfde eenheden als gyro() en accel().