bno055 — מנהל התקן BNO055 IMU

מודול זה מספק מנהל התקן לחיישן הכיוון המוחלט 9-צירי BNO055 של Bosch דרך I2C. ה-BNO055 ממזג נתוני מד-תאוצה, מגנטומטר וגירוסקופ על השבב וחושף פלטי קווטרניון, זווית-אוילר, תאוצה-לינארית וכבידה בנוסף לערוצי החיישן הגולמיים.

דוגמת שימוש:

import time
from machine import I2C
import bno055

bus = I2C(1)
imu = bno055.BNO055(bus)

while True:
    print(imu.euler())
    time.sleep_ms(100)

מחלקות

class bno055.BNO055(bus: machine.I2C, address: int = 0x28, mode: int = NDOF_MODE, axis: bytes = AXIS_P4)

בונה מופע של מנהל התקן BNO055.

  • bus הוא אובייקט אפיק machine.I2C מוגדר המשמש לתקשורת עם החיישן.

  • address היא כתובת ה-I2C בת 7-bit של ההתקן. ברירת המחדל היא 0x28.

  • mode הוא מצב הפעולה שאליו ההתקן מוכנס לאחר איפוס. ראו את קבועי מצב-הפעולה למטה. ברירת המחדל היא NDOF_MODE.

  • axis הוא ערך תצורת מיפוי-צירים בן 2 בתים. ראו את קבועי מיקום-הצירים למטה. ברירת המחדל היא AXIS_P4.

הבנאי מאמת את מזהה השבב, מבצע איפוס רך, עובר להספק רגיל, מחיל את תצורת הצירים, ונכנס למצב הפעולה המבוקש באמצעות המתנד החיצוני. מעלה RuntimeError אם ערכי אוגר המזהה הצפויים אינם נקראים בחזרה.

read_registers(register: int, size: int = 1) bytes

קורא size בתים מאוגר ההתקן הנתון ומחזיר אותם כאובייקט bytes.

write_registers(register: int, data: bytes) None

כותב את בתי ה-data הנתונים להתקן החל מ-register.

operation_mode(mode: int = None) int

מקבל או קובע את אוגר מצב הפעולה. ללא ארגומנט, מחזיר את המצב הנוכחי כ-int. עם ארגומנט mode, כותב את המצב החדש להתקן. ראו את קבועי מצב-הפעולה למטה.

system_trigger(data: int) None

כותב data לאוגר ה-trigger של המערכת (0x3F). זה משמש פנימית להנפקת איפוס רך (0x20) ולבחירת המתנד החיצוני (0x80).

power_mode(mode: int = None) bytes

מקבל או קובע את אוגר מצב ההספק. ללא ארגומנט, מחזיר את תוכן אוגר מצב-ההספק הנוכחי. עם ארגומנט mode, כותב את מצב ההספק החדש להתקן.

page(num: int = None) None

מקבל או קובע את עמוד האוגר. ללא ארגומנט, קורא את אוגר העמוד הנוכחי. עם ארגומנט num, בוחר את העמוד.

temperature() int

מחזיר את ערך אוגר טמפרטורת השבב כבית ללא סימן.

read_id() bytes

מחזיר את בלוק המזהה בן 4 הבתים שנקרא מאוגר 0x00. הערך הצפוי הוא b'\xA0\xFB\x32\x0F'.

axis(placement: bytes = None) bytes

מקבל או קובע את תצורת מיפוי הצירים. ללא ארגומנט, מחזיר את תצורת הצירים הנוכחית בת 2 הבתים. עם ארגומנט placement, כותב את תצורת הצירים בת 2 הבתים שסופקה. השתמשו באחד מהקבועים AXIS_P0..AXIS_P7 שלמטה.

quaternion() list

מחזיר את הכיוון הממוזג כרשימה בת 4 איברים [w, x, y, z] של מספרים ממשיים מותאמים לטווח הקווטרניון היחידתי.

euler() list

מחזיר את הכיוון הממוזג כרשימה בת 3 איברים [yaw, roll, pitch] של מספרים ממשיים במעלות.

accelerometer() list

מחזיר את קריאת מד-התאוצה כרשימה בת 3 איברים [x, y, z] של מספרים ממשיים ב-m/s^2.

magnetometer() list

מחזיר את קריאת המגנטומטר כרשימה בת 3 איברים [x, y, z] של מספרים ממשיים במיקרו-טסלה.

gyroscope() list

מחזיר את קריאת הגירוסקופ כרשימה בת 3 איברים [x, y, z] של מספרים ממשיים במעלות לשנייה.

linear_acceleration() list

מחזיר את התאוצה הלינארית המתוקנת לכבידה כרשימה בת 3 איברים [x, y, z] של מספרים ממשיים ב-m/s^2.

gravity() list

מחזיר את וקטור הכבידה כרשימה בת 3 איברים [x, y, z] של מספרים ממשיים ב-m/s^2.

קבועים

מצבי פעולה

bno055.CONFIG_MODE: int

מצב תצורה (0x00). ההתקן חייב להיות במצב זה כדי לשנות אוגרי תצורה.

bno055.ACCONLY_MODE: int

מצב ללא-מיזוג של מד-תאוצה בלבד (0x01).

bno055.MAGONLY_MODE: int

מצב ללא-מיזוג של מגנטומטר בלבד (0x02).

bno055.GYRONLY_MODE: int

מצב ללא-מיזוג של גירוסקופ בלבד (0x03).

bno055.ACCMAG_MODE: int

מצב ללא-מיזוג של מד-תאוצה + מגנטומטר (0x04).

bno055.ACCGYRO_MODE: int

מצב ללא-מיזוג של מד-תאוצה + גירוסקופ (0x05).

bno055.MAGGYRO_MODE: int

מצב ללא-מיזוג של מגנטומטר + גירוסקופ (0x06).

bno055.AMG_MODE: int

מצב ללא-מיזוג של מד-תאוצה + מגנטומטר + גירוסקופ (0x07).

bno055.IMUPLUS_MODE: int

מצב מיזוג IMU המשתמש במד-תאוצה + גירוסקופ (0x08).

bno055.COMPASS_MODE: int

מצב מיזוג מצפן המשתמש במד-תאוצה + מגנטומטר (0x09).

bno055.M4G_MODE: int

מצב מיזוג מגנט-לגירוסקופ (0x0A).

bno055.NDOF_FMC_OFF_MODE: int

מצב מיזוג 9-DOF עם כיול מגנטומטר מהיר מושבת (0x0B).

bno055.NDOF_MODE: int

מצב מיזוג 9-DOF עם כיול מגנטומטר מהיר מאופשר (0x0C). זהו מצב ברירת המחדל שבו משתמש הבנאי.

מיקומי צירים

הערכים הבאים בני 2 הבתים מועברים אל BNO055.axis() כדי למפות מחדש את מערכת הקואורדינטות של ההתקן. כל קבוע הוא זוג האוגרים (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) מגיליון הנתונים של BNO055 (סעיף 3.4, Axis remap), מקודד מראש עבור אחד משמונת כיווני המיקום הסטנדרטיים.

בחרו את הקבוע שצירי הפלט שלו תואמים לאופן שבו השבב מותקן פיזית על ה-PCB המארח:

קבוע

פלט X

פלט Y

פלט Z

בתים

התקנה

AXIS_P0

-Yc

+Xc

+Zc

21 04

פנים-למעלה, 90° נגד כיוון השעון מ-P1

AXIS_P1

+Xc

+Yc

+Zc

24 00

פנים-למעלה, ברירת המחדל של גיליון הנתונים

AXIS_P2

-Xc

-Yc

+Zc

24 06

פנים-למעלה, מסובב 180°

AXIS_P3

+Yc

-Xc

+Zc

21 02

פנים-למעלה, 90° עם כיוון השעון מ-P1

AXIS_P4

+Xc

-Yc

-Zc

24 03

פנים-למטה, הפוך סביב X (ברירת המחדל של הבנאי)

AXIS_P5

+Yc

+Xc

-Zc

21 01

פנים-למטה, מסובב 90° נגד כיוון השעון מ-P4

AXIS_P6

-Yc

-Xc

-Zc

21 07

פנים-למטה, מסובב 180° מ-P4

AXIS_P7

-Xc

+Yc

-Zc

24 05

פנים-למטה, מסובב 90° עם כיוון השעון מ-P4

Xc / Yc / Zc מציינים את הצירים האינטרינזיים של השבב (כפי שמודפסים בגיליון הנתונים של BNO055). עמודות ה-”Output“ הן הצירים שההתקן מספק דרך BNO055.euler(), BNO055.gyro() וכו«. P0 עד P3 הם ארבעת הסיבובים בני 90° של השבב בכיוון צד-הרכיבים-למעלה; P4 עד P7 הם אותם ארבעה סיבובים לאחר היפוך השבב על גבו.

bno055.AXIS_P0: bytes

פני השבב למעלה, מסובב 90° נגד כיוון השעון מ-AXIS_P1. צירי פלט: X = -Yc, Y = +Xc, Z = +Zc.

bno055.AXIS_P1: bytes

פני השבב למעלה בכיוון ברירת המחדל של גיליון הנתונים של BNO055. לא מוחל מיפוי מחדש: X = +Xc, Y = +Yc, Z = +Zc.

bno055.AXIS_P2: bytes

פני השבב למעלה, מסובב 180° מ-AXIS_P1. צירי פלט: X = -Xc, Y = -Yc, Z = +Zc.

bno055.AXIS_P3: bytes

פני השבב למעלה, מסובב 90° עם כיוון השעון מ-AXIS_P1. צירי פלט: X = +Yc, Y = -Xc, Z = +Zc.

bno055.AXIS_P4: bytes

השבב הפוך על גבו (צד הרכיבים למטה) ביחס ל-AXIS_P1. צירי פלט: X = +Xc, Y = -Yc, Z = -Zc. זהו המיקום שבו משתמש הבנאי של BNO055 כאשר לא מסופק ארגומנט axis.

bno055.AXIS_P5: bytes

פני השבב למטה, מסובב 90° נגד כיוון השעון מ-AXIS_P4. צירי פלט: X = +Yc, Y = +Xc, Z = -Zc.

bno055.AXIS_P6: bytes

פני השבב למטה, מסובב 180° מ-AXIS_P4. צירי פלט: X = -Yc, Y = -Xc, Z = -Zc.

bno055.AXIS_P7: bytes

פני השבב למטה, מסובב 90° עם כיוון השעון מ-AXIS_P4. צירי פלט: X = -Xc, Y = +Yc, Z = -Zc.