lsm6dsox — IMU de 6 eixos LSM6DSOX¶
Driver para a unidade de medição inercial iNEMO ST LSM6DSOX de 6 eixos (acelerómetro de 3 eixos mais giroscópio de 3 eixos) via I2C ou SPI. Para além da saída básica da IMU, o driver expõe as funções embebidas no chip: um pedómetro configurável (contador de passos) e o Machine Learning Core (MLC), que pode ser programado via ficheiros UCF exportados da ferramenta Unico-GUI da ST.
Exemplo:
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)
Classes¶
- 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)¶
Constrói uma instância
LSM6DSOX. O tipo de barramento é detetado automaticamente: sebusexpõereadfrom_mem, é tratado comomachine.I2C; caso contrário, é tratado comomachine.SPIecsdeve ser fornecido. O chip é reiniciado por software, o ODR e a escala pedidos são programados, e um ficheiro MLC UCF é carregado se fornecido.busUm barramento
machine.I2Coumachine.SPIconfigurado.csPino
machine.Pinde seleção de chip utilizado em modo SPI. Obrigatório quandobusé uma instância SPI; ignorado caso contrário.addressEndereço I2C de 7 bits do dispositivo. Por omissão é
0x6A; em algumas placas, o pino SDO está ligado ao nível alto, o que seleciona0x6B.gyro_odrTaxa de saída de dados do giroscópio em Hz. Deve ser um dos seguintes valores:
0(desligado),1.6,3.33,6.66,12.5,26,52,104,208,416ou888.accel_odrTaxa de saída de dados do acelerómetro em Hz. Mesmo conjunto de valores que
gyro_odr.gyro_scaleGama de escala completa do giroscópio em graus por segundo. Deve ser um dos seguintes valores:
250,500,1000ou2000.accel_scaleGama de escala completa do acelerómetro em g. Deve ser um dos seguintes valores:
2,4,8ou16.ucfCaminho opcional para um ficheiro
.ucfde dump de registos da ferramenta ST Unico-GUI. Se fornecido, o ficheiro é analisado e aplicado ao MLC durante a construção através deload_mlc().
- reset() None¶
Emite um reset por software via
CTRL3_Ce bloqueia até que o bit de reset se limpe. LançaOSErrorse o dispositivo não responder dentro de dez tentativas.
- set_mem_bank(bank: int) None¶
Comuta o banco de registos FUNC_CFG. Utilizado internamente para aceder às páginas de registos de funções embebidas e do sensor hub; raramente necessário pelo código de aplicação.
- set_embedded_functions(enable: bool, emb_ab: tuple[int, int] | None = None) tuple[int, int]¶
Ativa ou desativa o bloco de funções embebidas. Quando
enableéTrue, o par de bytesemb_abé escrito emEMB_FUNC_EN_A/EMB_FUNC_EN_B. QuandoFalse, os valores atuais são lidos, os bits de ativação MLC/pedómetro são limpos, e os valores anteriores são devolvidos para que possam ser restaurados posteriormente.
- load_mlc(ucf: str) None¶
Aplica um programa MLC UCF a partir do ficheiro no caminho
ucf. O driver percorre o ficheiro linha a linha, aplica cada escritaAc <reg> <val>, depois ativa BDU, encaminha eventos MLC para o pino de interrupção 1 e reativa as funções embebidas.
- mlc_output() bytes | None¶
Se novos resultados MLC estiverem disponíveis (bit
MLC_STATUSdefinido), devolve o conteúdo dos oito registosMLC0_SRC..MLC7_SRCcomo um objeto semelhante a bytes. Caso contrário, devolveNone.
- pedometer_config(enable: bool = True, debounce: int = 10, int1_enable: bool = False, int2_enable: bool = False) None¶
Configura o pedómetro embebido.
enableAtiva ou desativa a deteção de passos no bloco de funções embebidas.
debounceValor de debounce de passos escrito em
PEDO_DEB_STEPS_CONF.int1_enableSe
True, encaminha eventos do pedómetro para o pinoINT1.int2_enableSe
True, encaminha eventos do pedómetro para o pinoINT2.