lsm6dsox --- وحدة قياس بالقصور الذاتي LSM6DSOX سداسية المحاور

مُشغِّل لوحدة القياس بالقصور الذاتي iNEMO سداسية المحاور من ST من طراز LSM6DSOX (مقياس تسارع ثلاثي المحاور مع جيروسكوب ثلاثي المحاور) عبر I2C أو SPI. وبالإضافة إلى خرج وحدة القياس الأساسي، يوفِّر المُشغِّل الدوال المضمَّنة داخل الشريحة: عدّاد خطوات (pedometer) قابل للضبط ونواة التعلّم الآلي (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. تُجرى إعادة ضبط برمجية للشريحة، ويُبرمَج معدل ODR والمقياس المطلوبان، ويُحمَّل ملف MLC UCF إن قُدِّم.

bus

إما ناقل machine.I2C أو machine.SPI مُعَدّ.

cs

دبوس اختيار الشريحة machine.Pin المُستخدَم في نمط SPI. مطلوب عندما يكون bus نسخة SPI، ويُتجاهَل خلاف ذلك.

address

عنوان I2C ذو 7 بتات للجهاز. قيمته الافتراضية 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.

pedometer_reset() None

تعيد ضبط عدّاد الخطوات إلى الصفر.

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²).