lsm9ds1 --- IMU 9 แกน LSM9DS1

ไดรเวอร์สำหรับโมดูลความเฉื่อย iNEMO รุ่น ST LSM9DS1 ผ่าน I2C LSM9DS1 รวม accelerometer 3 แกน gyroscope 3 แกน และ magnetometer 3 แกนในแพ็กเกจเดียว โดย accelerometer และ gyroscope ใช้ที่อยู่ I2C ร่วมกัน ในขณะที่ magnetometer ตอบสนองบนที่อยู่ที่สอง ไดรเวอร์นี้ยังเปิดใช้งาน FIFO ของ gyro/accel บนชิปขนาด 16 ลึกเพื่อให้สามารถดึงตัวอย่างล่าสุดออกได้อย่างมีประสิทธิภาพผ่าน iter_accel_gyro()

ตัวอย่าง:

import time
from machine import Pin, I2C
from lsm9ds1 import LSM9DS1

imu = LSM9DS1(I2C(1, scl=Pin("P15"), sda=Pin("P14")))

while True:
    print("Accelerometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.accel()))
    print("Magnetometer:  x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.magnet()))
    print("Gyroscope:     x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}".format(*imu.gyro()))
    time.sleep_ms(100)

คลาส

class lsm9ds1.LSM9DS1(bus: machine.I2C, address_imu: int = 0x6B, address_magnet: int = 0x1E, gyro_odr: float = 952, gyro_scale: int = 245, accel_odr: float = 952, accel_scale: int = 4, magnet_odr: int = 80, magnet_scale: int = 4)

สร้างอินสแตนซ์ LSM9DS1 ตรวจสอบ registers WHO_AM_I ของ sub-devices ทั้งสอง กำหนดค่า sensor ทั้งสามและเปิดใช้งาน FIFO ของ accel/gyro ในโหมดต่อเนื่อง

bus

บัส machine.I2C ที่กำหนดค่าแล้วซึ่ง sensor เชื่อมต่ออยู่

address_imu

ที่อยู่ I2C 7 บิตของ sub-device accelerometer/gyroscope ค่าเริ่มต้นคือ 0x6B

address_magnet

ที่อยู่ I2C 7 บิตของ sub-device magnetometer ค่าเริ่มต้นคือ 0x1E

gyro_odr

อัตราข้อมูลเอาต์พุตของ gyroscope ในหน่วย Hz ต้องเป็นหนึ่งใน 0 (ปิด), 14.9, 59.5, 119, 238, 476 หรือ 952

gyro_scale

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

accel_odr

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

accel_scale

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

magnet_odr

อัตราข้อมูลเอาต์พุตของ magnetometer ในหน่วย Hz ต้องเป็นหนึ่งใน 0.625, 1.25, 2.5, 5, 10, 20, 40 หรือ 80

magnet_scale

ช่วง full-scale ของ magnetometer ในหน่วยเกาส์ ต้องเป็นหนึ่งใน 4, 8, 12 หรือ 16

calibrate_magnet(offset: tuple[float, float, float]) None

เขียนเวกเตอร์ offset hard-iron เข้าไปใน registers OFFSET_REG_*_M ของ magnetometer offset จะถูกกำหนดในหน่วยเดียวกับที่ magnet() คืนค่า (เกาส์); แต่ละส่วนประกอบจะถูกแปลงเป็น LSB ดิบโดยใช้ scale ของ magnetometer ที่กำหนดค่าไว้ก่อนที่จะถูกเขียน

gyro_id() bytes

คืนค่ารีจิสเตอร์ WHO_AM_I หนึ่งไบต์ของ sub-device accelerometer/gyroscope

magent_id() bytes

คืนค่ารีจิสเตอร์ WHO_AM_I หนึ่งไบต์ของ sub-device magnetometer

gyro() tuple[float, float, float]

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

accel() tuple[float, float, float]

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

magnet() tuple[float, float, float]

คืนค่าเวกเตอร์สนามแม่เหล็ก (x, y, z) ในหน่วยเกาส์

iter_accel_gyro() Iterator[tuple[tuple[float, float, float], tuple[float, float, float]]]

Generator ที่ yields tuple (gyro, accel) สำหรับตัวอย่างทุกรายการที่มีอยู่ใน FIFO ในขณะนั้นและหยุดเมื่อ FIFO ว่างเปล่า เวกเตอร์ส่วนประกอบแต่ละตัวมีหน่วยเดียวกับ gyro() และ accel() ตามลำดับ