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匯流排。csSPI 模式下使用的晶片選擇
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。