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²).