lsm6dsox --- IMU 6 trục LSM6DSOX

Driver cho bộ đo quán tính 6 trục (IMU) ST LSM6DSOX iNEMO (gia tốc kế 3 trục cộng con quay hồi chuyển 3 trục) qua I2C hoặc SPI. Ngoài đầu ra IMU cơ bản, driver còn cung cấp các hàm nhúng trên chip: máy đo bước (step counter) có thể cấu hình và Machine Learning Core (MLC), có thể được lập trình qua các tệp UCF xuất từ công cụ Unico-GUI của ST.

Ví dụ:

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)

Lớp

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)

Khởi tạo một thực thể LSM6DSOX. Loại bus được phát hiện tự động: nếu busreadfrom_mem thì được coi là machine.I2C, ngược lại được coi là machine.SPIcs phải được cung cấp. Chip được reset mềm, ODR và thang đo được yêu cầu được lập trình, và tệp UCF MLC được tải nếu được cung cấp.

bus

Một bus machine.I2C hoặc machine.SPI đã được cấu hình.

cs

Chân chọn chip machine.Pin được dùng ở chế độ SPI. Bắt buộc khi bus là thực thể SPI, bỏ qua trong trường hợp khác.

address

Địa chỉ I2C 7-bit của thiết bị. Mặc định là 0x6A; một số bo mạch nối chân SDO lên cao để chọn 0x6B.

gyro_odr

Tốc độ dữ liệu đầu ra của con quay hồi chuyển tính bằng Hz. Phải là một trong các giá trị 0 (tắt), 1.6, 3.33, 6.66, 12.5, 26, 52, 104, 208, 416 hoặc 888.

accel_odr

Tốc độ dữ liệu đầu ra của gia tốc kế tính bằng Hz. Cùng tập hợp giá trị như gyro_odr.

gyro_scale

Phạm vi đo toàn thang của con quay hồi chuyển tính bằng độ-trên-giây. Phải là một trong các giá trị 250, 500, 1000 hoặc 2000.

accel_scale

Phạm vi đo toàn thang của gia tốc kế tính bằng g. Phải là một trong các giá trị 2, 4, 8 hoặc 16.

ucf

Đường dẫn tùy chọn đến tệp dump thanh ghi .ucf của ST Unico-GUI. Nếu được cung cấp, tệp được phân tích và áp dụng vào MLC trong quá trình khởi tạo thông qua load_mlc().

reset() None

Thực hiện reset phần mềm qua CTRL3_C và chặn cho đến khi bit reset được xóa. Ném OSError nếu thiết bị không phản hồi trong vòng mười lần thử lại.

set_mem_bank(bank: int) None

Chuyển đổi bank thanh ghi FUNC_CFG. Được sử dụng nội bộ để truy cập các trang thanh ghi hàm nhúng và sensor-hub; hiếm khi cần thiết trong mã ứng dụng.

set_embedded_functions(enable: bool, emb_ab: tuple[int, int] | None = None) tuple[int, int]

Bật hoặc tắt khối hàm nhúng. Khi enableTrue, bộ đôi emb_ab hai byte được ghi vào EMB_FUNC_EN_A/EMB_FUNC_EN_B. Khi là False, các giá trị hiện tại được đọc, các bit bật MLC/pedometer được xóa, và các giá trị trước đó được trả về để có thể khôi phục sau.

load_mlc(ucf: str) None

Áp dụng chương trình UCF MLC từ tệp tại đường dẫn ucf. Driver duyệt qua tệp từng dòng, áp dụng mỗi lần ghi Ac <reg> <val>, sau đó bật BDU, định tuyến sự kiện MLC đến chân ngắt 1 và bật lại các hàm nhúng.

mlc_output() bytes | None

Nếu có kết quả MLC mới (bit MLC_STATUS được đặt), trả về nội dung của tám thanh ghi MLC0_SRC..MLC7_SRC dưới dạng đối tượng giống bytes. Ngược lại trả về None.

pedometer_config(enable: bool = True, debounce: int = 10, int1_enable: bool = False, int2_enable: bool = False) None

Cấu hình máy đo bước nhúng.

enable

Bật hoặc tắt phát hiện bước trên khối hàm nhúng.

debounce

Giá trị khử rung bước được ghi vào PEDO_DEB_STEPS_CONF.

int1_enable

Nếu là True, định tuyến sự kiện pedometer đến chân INT1.

int2_enable

Nếu là True, định tuyến sự kiện pedometer đến chân INT2.

pedometer_reset() None

Đặt lại bộ đếm bước về không.

steps() int

Trả về giá trị hiện tại của bộ đếm bước 16-bit.

gyro() tuple[float, float, float]

Trả về vector con quay hồi chuyển (x, y, z) tính bằng độ trên giây.

accel() tuple[float, float, float]

Trả về vector gia tốc (x, y, z) tính bằng đơn vị trọng lực chuẩn (1 g = 9.81 m/s²).