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 ค่าเริ่มต้นคือ
0x6Baddress_magnetที่อยู่ I2C 7 บิตของ sub-device magnetometer ค่าเริ่มต้นคือ
0x1Egyro_odrอัตราข้อมูลเอาต์พุตของ gyroscope ในหน่วย Hz ต้องเป็นหนึ่งใน
0(ปิด),14.9,59.5,119,238,476หรือ952gyro_scaleช่วง full-scale ของ gyroscope ในหน่วยองศาต่อวินาที ต้องเป็นหนึ่งใน
245,500หรือ2000accel_odrอัตราข้อมูลเอาต์พุตของ accelerometer ในหน่วย Hz ชุดค่าเดียวกับ
gyro_odraccel_scaleช่วง full-scale ของ accelerometer ในหน่วย g ต้องเป็นหนึ่งใน
2,4,8หรือ16magnet_odrอัตราข้อมูลเอาต์พุตของ magnetometer ในหน่วย Hz ต้องเป็นหนึ่งใน
0.625,1.25,2.5,5,10,20,40หรือ80magnet_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 ที่กำหนดค่าไว้ก่อนที่จะถูกเขียน