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