lsm9ds1 --- IMU 9 trục LSM9DS1

Driver cho mô-đun quán tính ST LSM9DS1 iNEMO qua I2C. LSM9DS1 kết hợp gia tốc kế 3 trục, con quay hồi chuyển 3 trục và từ kế 3 trục trong một gói duy nhất; gia tốc kế và con quay hồi chuyển dùng chung một địa chỉ I2C trong khi từ kế phản hồi trên một địa chỉ thứ hai. Driver này còn bật FIFO 16 mẫu của gyro/accel trên chip để các mẫu gần nhất có thể được lấy ra hiệu quả qua iter_accel_gyro().

Ví dụ:

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)

Lớp

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)

Khởi tạo một thực thể LSM9DS1, xác minh các thanh ghi WHO_AM_I của cả hai thiết bị con, cấu hình cả ba cảm biến và bật FIFO accel/gyro ở chế độ liên tục.

bus

Một bus machine.I2C đã được cấu hình mà cảm biến được kết nối vào.

address_imu

Địa chỉ I2C 7-bit của thiết bị con gia tốc kế/con quay hồi chuyển. Mặc định là 0x6B.

address_magnet

Địa chỉ I2C 7-bit của thiết bị con từ kế. Mặc định là 0x1E.

gyro_odr

Tốc độ dữ liệu đầu ra của con quay hồi chuyển tính bằng Hz. Phải là một trong các giá trị 0 (tắt), 14.9, 59.5, 119, 238, 476 hoặc 952.

gyro_scale

Phạm vi đo toàn thang của con quay hồi chuyển tính bằng độ-trên-giây. Phải là một trong các giá trị 245, 500 hoặc 2000.

accel_odr

Tốc độ dữ liệu đầu ra của gia tốc kế tính bằng Hz. Cùng tập hợp giá trị như gyro_odr.

accel_scale

Phạm vi đo toàn thang của gia tốc kế tính bằng g. Phải là một trong các giá trị 2, 4, 8 hoặc 16.

magnet_odr

Tốc độ dữ liệu đầu ra của từ kế tính bằng Hz. Phải là một trong các giá trị 0.625, 1.25, 2.5, 5, 10, 20, 40 hoặc 80.

magnet_scale

Phạm vi đo toàn thang của từ kế tính bằng gauss. Phải là một trong các giá trị 4, 8, 12 hoặc 16.

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

Ghi một vector offset sắt cứng vào các thanh ghi OFFSET_REG_*_M của từ kế. Offset được cho theo cùng đơn vị mà magnet() trả về (gauss); mỗi thành phần được chuyển đổi sang LSB thô bằng thang đo từ kế đã cấu hình trước khi ghi.

gyro_id() bytes

Trả về giá trị thanh ghi WHO_AM_I một byte của thiết bị con gia tốc kế/con quay hồi chuyển.

magent_id() bytes

Trả về giá trị thanh ghi WHO_AM_I một byte của thiết bị con từ kế.

gyro() tuple[float, float, float]

Trả về vector con quay hồi chuyển (x, y, z) tính bằng độ trên giây.

accel() tuple[float, float, float]

Trả về vector gia tốc (x, y, z) tính bằng đơn vị trọng lực chuẩn (1 g = 9.81 m/s²).

magnet() tuple[float, float, float]

Trả về vector từ trường (x, y, z) tính bằng gauss.

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

Generator tạo ra các bộ (gyro, accel) cho mỗi mẫu hiện có trong FIFO và dừng khi FIFO trống. Mỗi vector thành phần có cùng đơn vị như gyro()accel() tương ứng.