lsm6dsox — 6-осевой IMU LSM6DSOX¶
Драйвер для 6-осевого инерциального измерительного модуля ST LSM6DSOX iNEMO (3-осевой акселерометр плюс 3-осевой гироскоп) по I2C или SPI. Помимо базового вывода IMU, драйвер предоставляет встроенные в кристалл функции: настраиваемый шагомер (счётчик шагов) и Machine Learning Core (MLC), который можно программировать через файлы UCF, экспортированные из инструмента ST Unico-GUI.
Пример:
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 и масштаб, и при наличии загружается файл UCF для MLC.busНастроенная шина
machine.I2Cилиmachine.SPI.csВывод выбора кристалла
machine.Pin, используемый в режиме SPI. Требуется, когдаbusявляется экземпляром SPI, в остальных случаях игнорируется.address7-битный адрес I2C устройства. По умолчанию
0x6A; некоторые платы подтягивают вывод SDO к высокому уровню, что выбирает0x6B.gyro_odrВыходная частота данных гироскопа в Гц. Должна быть одной из
0(выкл.),1.6,3.33,6.66,12.5,26,52,104,208,416или888.accel_odrВыходная частота данных акселерометра в Гц. Тот же набор значений, что и у
gyro_odr.gyro_scaleПолношкальный диапазон гироскопа в градусах в секунду. Должен быть одним из
250,500,1000или2000.accel_scaleПолношкальный диапазон акселерометра в g. Должен быть одним из
2,4,8или16.ucfНеобязательный путь к файлу дампа регистров
.ucfиз ST Unico-GUI. Если он указан, файл разбирается и применяется к MLC во время создания черезload_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]¶
Включает или отключает блок встроенных функций. Когда
enableравноTrue, двухбайтовый кортежemb_abзаписывается вEMB_FUNC_EN_A/EMB_FUNC_EN_B. КогдаFalse, считываются текущие значения, биты включения MLC/шагомера сбрасываются, и предыдущие значения возвращаются, чтобы их можно было восстановить позже.
- load_mlc(ucf: str) None¶
Применяет программу MLC UCF из файла по пути
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.