lsm9ds1 — 9-осьовий IMU LSM9DS1

Драйвер для інерціального модуля iNEMO ST LSM9DS1 через I2C. LSM9DS1 поєднує в одному корпусі 3-осьовий акселерометр, 3-осьовий гіроскоп і 3-осьовий магнетометр; акселерометр і гіроскоп мають спільну I2C-адресу, тоді як магнетометр відповідає на другу адресу. Цей драйвер також вмикає вбудований FIFO глибиною 16 для гіроскопа/акселерометра, щоб можна було ефективно зчитувати останні зразки через 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

Частота виведення даних гіроскопа в Гц. Має бути одним із значень: 0 (вимкнено), 14.9, 59.5, 119, 238, 476 або 952.

gyro_scale

Діапазон повної шкали гіроскопа в градусах на секунду. Має бути одним із значень: 245, 500 або 2000.

accel_odr

Частота виведення даних акселерометра в Гц. Той самий набір значень, що й у gyro_odr.

accel_scale

Діапазон повної шкали акселерометра в g. Має бути одним із значень: 2, 4, 8 або 16.

magnet_odr

Частота виведення даних магнетометра в Гц. Має бути одним із значень: 0.625, 1.25, 2.5, 5, 10, 20, 40 або 80.

magnet_scale

Діапазон повної шкали магнетометра в гаусах. Має бути одним із значень: 4, 8, 12 або 16.

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 м/с²).

magnet() tuple[float, float, float]

Повертає вектор магнітного поля (x, y, z) у гаусах.

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

Генератор, що видає кортежі (gyro, accel) для кожного зразка, наявного в FIFO, і зупиняється після спустошення FIFO. Кожен компонентний вектор має ті самі одиниці, що й gyro() та accel() відповідно.