lsm6dsox --- IMU 6 แกน LSM6DSOX

ไดรเวอร์สำหรับหน่วยวัดความเฉื่อย (IMU) iNEMO 6 แกน รุ่น ST LSM6DSOX (accelerometer 3 แกนบวก gyroscope 3 แกน) ผ่าน I2C หรือ SPI นอกจากเอาต์พุต IMU พื้นฐานแล้ว ไดรเวอร์ยังเปิดเผยฟังก์ชันฝังตัวบนชิป: เครื่องนับก้าว (pedometer) ที่กำหนดค่าได้และ Machine Learning Core (MLC) ที่สามารถโปรแกรมได้ผ่านไฟล์ UCF ที่ส่งออกจากเครื่องมือ Unico-GUI ของ ST

ตัวอย่าง:

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 ชิปจะถูก soft-reset กำหนดโปรแกรม ODR และ scale ที่ร้องขอ และโหลดไฟล์ UCF ของ MLC หากมีการกำหนด

bus

บัส machine.I2C หรือ machine.SPI ที่กำหนดค่าแล้ว

cs

machine.Pin สำหรับ chip-select ที่ใช้ในโหมด SPI จำเป็นเมื่อ bus เป็นอินสแตนซ์ SPI ไม่สนใจในกรณีอื่น

address

ที่อยู่ I2C 7 บิตของอุปกรณ์ ค่าเริ่มต้นคือ 0x6A; บางบอร์ดดึงพิน SDO ขึ้น high ซึ่งเลือก 0x6B

gyro_odr

อัตราข้อมูลเอาต์พุตของ gyroscope ในหน่วย Hz ต้องเป็นหนึ่งใน 0 (ปิด), 1.6, 3.33, 6.66, 12.5, 26, 52, 104, 208, 416 หรือ 888

accel_odr

อัตราข้อมูลเอาต์พุตของ accelerometer ในหน่วย Hz ชุดค่าเดียวกับ gyro_odr

gyro_scale

ช่วง full-scale ของ gyroscope ในหน่วยองศาต่อวินาที ต้องเป็นหนึ่งใน 250, 500, 1000 หรือ 2000

accel_scale

ช่วง full-scale ของ accelerometer ในหน่วย g ต้องเป็นหนึ่งใน 2, 4, 8 หรือ 16

ucf

เส้นทางเพิ่มเติมไปยังไฟล์ .ucf register-dump ของ ST Unico-GUI หากกำหนด ไฟล์จะถูกแยกวิเคราะห์และนำไปใช้กับ MLC ระหว่างการสร้างผ่าน load_mlc()

reset() None

ออก software reset ผ่าน CTRL3_C และบล็อกจนกว่าบิต reset จะล้าง Raises OSError หากอุปกรณ์ไม่สามารถกลับมาได้ภายในสิบครั้ง

set_mem_bank(bank: int) None

สลับแบงก์รีจิสเตอร์ FUNC_CFG ใช้ภายในเพื่อเข้าถึงหน้าฟังก์ชันฝังตัวและ sensor-hub register; ไม่ค่อยจำเป็นสำหรับโค้ดแอปพลิเคชัน

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

เปิดหรือปิดใช้งานบล็อกฟังก์ชันฝังตัว เมื่อ enable เป็น True tuple สองไบต์ emb_ab จะถูกเขียนไปยัง EMB_FUNC_EN_A/EMB_FUNC_EN_B เมื่อ False ค่าปัจจุบันจะถูกอ่าน บิตเปิดใช้งาน MLC/pedometer จะถูกล้าง และคืนค่าก่อนหน้าเพื่อให้สามารถกู้คืนในภายหลัง

load_mlc(ucf: str) None

นำโปรแกรม MLC UCF จากไฟล์ที่เส้นทาง ucf ไปใช้งาน ไดรเวอร์จะเดินผ่านไฟล์ทีละบรรทัด ใช้การเขียน Ac <reg> <val> แต่ละรายการ จากนั้นเปิดใช้งาน BDU กำหนดเส้นทางเหตุการณ์ MLC ไปยังพิน interrupt 1 และเปิดใช้งานฟังก์ชันฝังตัวอีกครั้ง

mlc_output() bytes | None

หากผลลัพธ์ MLC ใหม่พร้อมใช้งาน (บิต MLC_STATUS ถูกตั้ง) คืนค่าเนื้อหาของ eight MLC0_SRC..MLC7_SRC registers เป็นออบเจ็กต์คล้าย bytes มิฉะนั้นคืนค่า None

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

กำหนดค่า pedometer ฝังตัว

enable

เปิดหรือปิดใช้งานการตรวจจับก้าวบนบล็อกฟังก์ชันฝังตัว

debounce

ค่า debounce ของก้าวที่เขียนเข้า PEDO_DEB_STEPS_CONF

int1_enable

หาก True กำหนดเส้นทางเหตุการณ์ pedometer ไปยังพิน INT1

int2_enable

หาก True กำหนดเส้นทางเหตุการณ์ pedometer ไปยังพิน INT2

pedometer_reset() None

รีเซ็ตตัวนับก้าวกลับเป็นศูนย์

steps() int

คืนค่าปัจจุบันของตัวนับก้าว 16 บิต

gyro() tuple[float, float, float]

คืนค่าเวกเตอร์ gyroscope (x, y, z) ในหน่วยองศาต่อวินาที

accel() tuple[float, float, float]

คืนค่าเวกเตอร์ความเร่ง (x, y, z) ในหน่วยของแรงโน้มถ่วงมาตรฐาน (1 g = 9.81 m/s²)