lsm6dsox — 6osá IMU LSM6DSOX

Ovladač pro 6osou inerciální měřicí jednotku ST LSM6DSOX iNEMO (3osý akcelerometr plus 3osý gyroskop) přes I2C nebo SPI. Kromě základního výstupu IMU ovladač zpřístupňuje vestavěné funkce na čipu: konfigurovatelný pedometr (počítadlo kroků) a Machine Learning Core (MLC), který lze programovat prostřednictvím souborů UCF exportovaných z nástroje ST Unico-GUI.

Příklad:

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)

Třídy

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)

Vytvoří instanci LSM6DSOX. Typ sběrnice se detekuje automaticky: pokud bus poskytuje readfrom_mem, je považována za machine.I2C, jinak je považována za machine.SPI a musí být zadáno cs. Čip se softwarově resetuje, naprogramují se požadované ODR a měřítko a načte se soubor MLC UCF, je-li zadán.

bus

Buď nakonfigurovaná sběrnice machine.I2C, nebo machine.SPI.

cs

Pin výběru čipu machine.Pin použitý v režimu SPI. Vyžadováno, je-li bus instancí SPI, jinak ignorováno.

address

7bitová I2C adresa zařízení. Výchozí hodnota je 0x6A; některé desky přivádějí pin SDO na vysokou úroveň, což volí 0x6B.

gyro_odr

Výstupní datová rychlost gyroskopu v Hz. Musí být jedna z hodnot 0 (vypnuto), 1.6, 3.33, 6.66, 12.5, 26, 52, 104, 208, 416 nebo 888.

accel_odr

Výstupní datová rychlost akcelerometru v Hz. Stejná sada hodnot jako gyro_odr.

gyro_scale

Plný rozsah gyroskopu ve stupních za sekundu. Musí být jedna z hodnot 250, 500, 1000 nebo 2000.

accel_scale

Plný rozsah akcelerometru v g. Musí být jedna z hodnot 2, 4, 8 nebo 16.

ucf

Volitelná cesta k souboru výpisu registrů .ucf z ST Unico-GUI. Je-li zadána, soubor se naparsuje a během konstrukce aplikuje na MLC prostřednictvím load_mlc().

reset() None

Provede softwarový reset přes CTRL3_C a blokuje, dokud se nevynuluje resetovací bit. Vyvolá OSError, pokud se zařízení nevrátí do provozu během deseti pokusů.

set_mem_bank(bank: int) None

Přepne banku registru FUNC_CFG. Používá se interně pro přístup k stránkám registrů vestavěných funkcí a sensor-hubu; v aplikačním kódu je potřeba zřídka.

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

Povolí nebo zakáže blok vestavěných funkcí. Je-li enable True, dvoubajtová n-tice emb_ab se zapíše do EMB_FUNC_EN_A/EMB_FUNC_EN_B. Je-li False, přečtou se aktuální hodnoty, vynulují se povolovací bity MLC/pedometru a vrátí se předchozí hodnoty, aby je bylo možné později obnovit.

load_mlc(ucf: str) None

Aplikuje program MLC UCF ze souboru na cestě ucf. Ovladač prochází soubor řádek po řádku, aplikuje každý zápis Ac <reg> <val>, poté povolí BDU, směruje události MLC na pin přerušení 1 a opět zapne vestavěné funkce.

mlc_output() bytes | None

Pokud jsou k dispozici nové výsledky MLC (nastaven bit MLC_STATUS), vrátí obsah osmi registrů MLC0_SRC..MLC7_SRC jako objekt typu bytes. Jinak vrátí None.

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

Nakonfiguruje vestavěný pedometr.

enable

Povolí nebo zakáže detekci kroků v bloku vestavěných funkcí.

debounce

Hodnota debounce kroků zapsaná do PEDO_DEB_STEPS_CONF.

int1_enable

Je-li True, směruje události pedometru na pin INT1.

int2_enable

Je-li True, směruje události pedometru na pin INT2.

pedometer_reset() None

Vynuluje počítadlo kroků zpět na nulu.

steps() int

Vrátí aktuální hodnotu 16bitového počítadla kroků.

gyro() tuple[float, float, float]

Vrátí vektor gyroskopu (x, y, z) ve stupních za sekundu.

accel() tuple[float, float, float]

Vrátí vektor zrychlení (x, y, z) v jednotkách standardní gravitace (1 g = 9.81 m/s²).