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ที่กำหนดค่าแล้วcsmachine.Pinสำหรับ chip-select ที่ใช้ในโหมด SPI จำเป็นเมื่อbusเป็นอินสแตนซ์ SPI ไม่สนใจในกรณีอื่นaddressที่อยู่ I2C 7 บิตของอุปกรณ์ ค่าเริ่มต้นคือ
0x6A; บางบอร์ดดึงพิน SDO ขึ้น high ซึ่งเลือก0x6Bgyro_odrอัตราข้อมูลเอาต์พุตของ gyroscope ในหน่วย Hz ต้องเป็นหนึ่งใน
0(ปิด),1.6,3.33,6.66,12.5,26,52,104,208,416หรือ888accel_odrอัตราข้อมูลเอาต์พุตของ accelerometer ในหน่วย Hz ชุดค่าเดียวกับ
gyro_odrgyro_scaleช่วง full-scale ของ gyroscope ในหน่วยองศาต่อวินาที ต้องเป็นหนึ่งใน
250,500,1000หรือ2000accel_scaleช่วง full-scale ของ accelerometer ในหน่วย g ต้องเป็นหนึ่งใน
2,4,8หรือ16ucfเส้นทางเพิ่มเติมไปยังไฟล์
.ucfregister-dump ของ ST Unico-GUI หากกำหนด ไฟล์จะถูกแยกวิเคราะห์และนำไปใช้กับ MLC ระหว่างการสร้างผ่านload_mlc()
- reset() None¶
ออก software reset ผ่าน
CTRL3_Cและบล็อกจนกว่าบิต reset จะล้าง RaisesOSErrorหากอุปกรณ์ไม่สามารถกลับมาได้ภายในสิบครั้ง
- 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เป็นTruetuple สองไบต์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ถูกตั้ง) คืนค่าเนื้อหาของ eightMLC0_SRC..MLC7_SRCregisters เป็นออบเจ็กต์คล้าย 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_CONFint1_enableหาก
Trueกำหนดเส้นทางเหตุการณ์ pedometer ไปยังพินINT1int2_enableหาก
Trueกำหนดเส้นทางเหตุการณ์ pedometer ไปยังพินINT2