lsm6dsox — LSM6DSOX 6축 IMU

I2C 또는 SPI를 통한 ST LSM6DSOX iNEMO 6축 관성 측정 장치(3축 가속도계와 3축 자이로스코프) 드라이버입니다. 기본 IMU 출력 외에도 이 드라이버는 온칩 임베디드 기능을 제공합니다: 구성 가능한 보수계(걸음 수 카운터)와 Machine Learning Core(MLC)로, 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 인스턴스를 생성합니다. 버스 유형은 자동으로 감지됩니다: busreadfrom_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 핀을 high로 스트랩하여 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

초당 각도(degrees-per-second) 단위의 자이로스코프 풀스케일 범위입니다. 250, 500, 1000 또는 2000 중 하나여야 합니다.

accel_scale

g 단위의 가속도계 풀스케일 범위입니다. 2, 4, 8 또는 16 중 하나여야 합니다.

ucf

ST Unico-GUI .ucf 레지스터 덤프 파일의 선택적 경로입니다. 제공되면 파일이 파싱되어 load_mlc()를 통해 생성 중에 MLC에 적용됩니다.

reset() None

CTRL3_C를 통해 소프트웨어 리셋을 실행하고 리셋 비트가 해제될 때까지 차단합니다. 장치가 10회의 재시도 내에 복귀하지 못하면 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이면 2바이트 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 비트가 설정됨) 8개의 MLC0_SRC..MLC7_SRC 레지스터의 내용을 bytes 유사 객체로 반환합니다. 그렇지 않으면 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

걸음 수 카운터를 0으로 재설정합니다.

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²)로 반환합니다.