lsm6dsox --- LSM6DSOX 6 轴 IMU

用于通过 I2C 或 SPI 连接 ST LSM6DSOX iNEMO 6 轴惯性测量单元(3 轴加速度计加 3 轴陀螺仪)的驱动程序。除了基本的 IMU 输出外,该驱动程序还提供片上嵌入式功能:可配置的计步器(步数计数器)和机器学习核心(MLC),后者可以通过从 ST 的 Unico-GUI 工具导出的 UCF 文件进行编程。

示例:

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 和量程会被编程,如果提供了 MLC UCF 文件则会被加载。

bus

一条已配置的 machine.I2Cmachine.SPI 总线。

cs

在 SPI 模式下使用的片选 machine.Pin。当 bus 是 SPI 实例时必需,否则忽略。

address

该器件的 7 位 I2C 地址。默认为 0x6A;某些电路板将 SDO 引脚拉高,从而选择 0x6B

gyro_odr

以 Hz 为单位的陀螺仪输出数据速率。必须为 0(关闭)、1.63.336.6612.52652104208416888 之一。

accel_odr

以 Hz 为单位的加速度计输出数据速率。取值集合与 gyro_odr 相同。

gyro_scale

以度每秒为单位的陀螺仪满量程范围。必须为 25050010002000 之一。

accel_scale

以 g 为单位的加速度计满量程范围。必须为 24816 之一。

ucf

指向 ST Unico-GUI .ucf 寄存器转储文件的可选路径。如果提供,该文件会在构造期间通过 load_mlc() 被解析并应用到 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]

启用或禁用嵌入式功能块。当 enableTrue 时,会将两字节的 emb_ab 元组写入 EMB_FUNC_EN_A/EMB_FUNC_EN_B。当为 False 时,会读取当前值,清除 MLC/计步器使能位,并返回之前的值以便稍后恢复。

load_mlc(ucf: str) None

应用位于路径 ucf 的文件中的 MLC 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 m/s²)。