lsm6dsox — 6-осьовий IMU LSM6DSOX

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

Приклад:

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 підтягнутий до VCC, що вибирає 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. Використовується внутрішньо для доступу до сторінок вбудованих функцій і регістрів sensor-hub; рідко потрібний у коді програми.

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