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.I2C或machine.SPI总线。cs在 SPI 模式下使用的片选
machine.Pin。当bus是 SPI 实例时必需,否则忽略。address该器件的 7 位 I2C 地址。默认为
0x6A;某些电路板将 SDO 引脚拉高,从而选择0x6B。gyro_odr以 Hz 为单位的陀螺仪输出数据速率。必须为
0(关闭)、1.6、3.33、6.66、12.5、26、52、104、208、416或888之一。accel_odr以 Hz 为单位的加速度计输出数据速率。取值集合与
gyro_odr相同。gyro_scale以度每秒为单位的陀螺仪满量程范围。必须为
250、500、1000或2000之一。accel_scale以 g 为单位的加速度计满量程范围。必须为
2、4、8或16之一。ucf指向 ST Unico-GUI
.ucf寄存器转储文件的可选路径。如果提供,该文件会在构造期间通过load_mlc()被解析并应用到 MLC。
- 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¶
应用位于路径
ucf的文件中的 MLC UCF 程序。驱动程序逐行遍历该文件,应用每一个Ac <reg> <val>写入操作,然后启用 BDU,将 MLC 事件路由到中断引脚 1,并重新开启嵌入式功能。
- mlc_output() bytes | None¶
如果有新的 MLC 结果可用(
MLC_STATUS位被置位),则将八个MLC0_SRC..MLC7_SRC寄存器的内容作为类字节对象返回。否则返回None。