lsm6dsox — 6-осевой IMU LSM6DSOX

Драйвер для 6-осевого инерциального измерительного модуля ST LSM6DSOX iNEMO (3-осевой акселерометр плюс 3-осевой гироскоп) по I2C или SPI. Помимо базового вывода IMU, драйвер предоставляет встроенные в кристалл функции: настраиваемый шагомер (счётчик шагов) и Machine Learning Core (MLC), который можно программировать через файлы UCF, экспортированные из инструмента ST Unico-GUI.

Пример:

import time
from machine import I2C
from lsm6dsox import LSM6DSOX

# Use the I2C bus the LSM6DSOX is wired to on your board.
lsm = LSM6DSOX(I2C(1))

# SPI alternative (replace cs= with your board's chip-select pin):
# from machine import SPI, Pin
# lsm = LSM6DSOX(SPI(1), cs=Pin("CS"))

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

Классы

class lsm6dsox.LSM6DSOX(bus: machine.I2C | machine.SPI, cs: machine.Pin | None = None, address: int = 0x6A, gyro_odr: float = 104, accel_odr: float = 104, gyro_scale: int = 2000, accel_scale: int = 4, ucf: str | None = None)

Создаёт экземпляр LSM6DSOX. Тип шины определяется автоматически: если bus предоставляет readfrom_mem, он рассматривается как machine.I2C, иначе он рассматривается как machine.SPI, и необходимо указать cs. Микросхема программно сбрасывается, программируются запрошенные ODR и масштаб, и при наличии загружается файл UCF для MLC.

bus

Настроенная шина machine.I2C или machine.SPI.

cs

Вывод выбора кристалла machine.Pin, используемый в режиме SPI. Требуется, когда bus является экземпляром SPI, в остальных случаях игнорируется.

address

7-битный адрес I2C устройства. По умолчанию 0x6A; некоторые платы подтягивают вывод SDO к высокому уровню, что выбирает 0x6B.

gyro_odr

Выходная частота данных гироскопа в Гц. Должна быть одной из 0 (выкл.), 1.6, 3.33, 6.66, 12.5, 26, 52, 104, 208, 416 или 888.

accel_odr

Выходная частота данных акселерометра в Гц. Тот же набор значений, что и у gyro_odr.

gyro_scale

Полношкальный диапазон гироскопа в градусах в секунду. Должен быть одним из 250, 500, 1000 или 2000.

accel_scale

Полношкальный диапазон акселерометра в g. Должен быть одним из 2, 4, 8 или 16.

ucf

Необязательный путь к файлу дампа регистров .ucf из ST Unico-GUI. Если он указан, файл разбирается и применяется к MLC во время создания через load_mlc().

reset() None

Выполняет программный сброс через CTRL3_C и блокируется до сброса соответствующего бита. Вызывает OSError, если устройство не восстанавливается в течение десяти попыток.

set_mem_bank(bank: int) None

Переключает банк регистров FUNC_CFG. Используется внутренне для доступа к страницам регистров встроенных функций и концентратора датчиков; редко требуется в прикладном коде.

set_embedded_functions(enable: bool, emb_ab: tuple[int, int] | None = None) tuple[int, int]

Включает или отключает блок встроенных функций. Когда enable равно True, двухбайтовый кортеж emb_ab записывается в EMB_FUNC_EN_A/EMB_FUNC_EN_B. Когда False, считываются текущие значения, биты включения MLC/шагомера сбрасываются, и предыдущие значения возвращаются, чтобы их можно было восстановить позже.

load_mlc(ucf: str) None

Применяет программу MLC UCF из файла по пути ucf. Драйвер построчно проходит файл, применяет каждую запись Ac <reg> <val>, затем включает BDU, маршрутизирует события MLC на вывод прерывания 1 и снова включает встроенные функции.

mlc_output() bytes | None

Если доступны новые результаты MLC (установлен бит MLC_STATUS), возвращает содержимое восьми регистров MLC0_SRC..MLC7_SRC в виде байтового объекта. Иначе возвращает None.

pedometer_config(enable: bool = True, debounce: int = 10, int1_enable: bool = False, int2_enable: bool = False) None

Настраивает встроенный шагомер.

enable

Включает или отключает обнаружение шагов в блоке встроенных функций.

debounce

Значение подавления дребезга шагов, записываемое в PEDO_DEB_STEPS_CONF.

int1_enable

Если True, маршрутизирует события шагомера на вывод INT1.

int2_enable

Если True, маршрутизирует события шагомера на вывод INT2.

pedometer_reset() None

Сбрасывает счётчик шагов обратно в ноль.

steps() int

Возвращает текущее значение 16-битного счётчика шагов.

gyro() tuple[float, float, float]

Возвращает вектор гироскопа (x, y, z) в градусах в секунду.

accel() tuple[float, float, float]

Возвращает вектор ускорения (x, y, z) в единицах стандартной гравитации (1 g = 9.81 м/с²).