bno055 — BNO055-IMU-Treiber

Dieses Modul stellt einen Treiber für den Bosch BNO055 9-Achsen-Absolutorientierungssensor über I2C bereit. Der BNO055 fusioniert Beschleunigungssensor-, Magnetometer- und Gyroskopdaten auf dem Chip und liefert neben den rohen Sensorkanälen Quaternion-, Euler-Winkel-, Linearbeschleunigungs- und Schwerkraftausgaben.

Beispielverwendung:

import time
from machine import I2C
import bno055

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

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

Klassen

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

Konstruiert eine BNO055-Treiberinstanz.

  • bus ist ein konfiguriertes machine.I2C-Busobjekt, das zur Kommunikation mit dem Sensor verwendet wird.

  • address ist die 7-Bit-I2C-Adresse des Geräts. Standardwert ist 0x28.

  • mode ist der Betriebsmodus, in den das Gerät nach dem Reset versetzt wird. Siehe die Betriebsmodus-Konstanten unten. Standardwert ist NDOF_MODE.

  • axis ist ein 2-Byte-Achsen-Remap-Konfigurationswert. Siehe die Achsenplatzierungskonstanten unten. Standardwert ist AXIS_P4.

Der Konstruktor überprüft die Chip-ID, führt einen Soft-Reset durch, schaltet auf normalen Stromverbrauch um, wendet die Achsenkonfiguration an und tritt mithilfe des externen Oszillators in den angeforderten Betriebsmodus ein. Löst RuntimeError aus, wenn die erwarteten ID-Registerwerte nicht zurückgelesen werden.

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

Liest size Bytes aus dem angegebenen Geräteregister und gibt sie als bytes-Objekt zurück.

write_registers(register: int, data: bytes) None

Schreibt die angegebenen data-Bytes ab register auf das Gerät.

operation_mode(mode: int = None) int

Liest oder setzt das Betriebsmodus-Register. Ohne Argument wird der aktuelle Modus als int zurückgegeben. Mit einem mode-Argument wird der neue Modus auf das Gerät geschrieben. Siehe die Betriebsmodus-Konstanten unten.

system_trigger(data: int) None

Schreibt data in das System-Trigger-Register (0x3F). Dies wird intern verwendet, um einen Soft-Reset (0x20) auszulösen und den externen Oszillator (0x80) auszuwählen.

power_mode(mode: int = None) bytes

Liest oder setzt das Energiemodus-Register. Ohne Argument wird der aktuelle Inhalt des Energiemodus-Registers zurückgegeben. Mit einem mode-Argument wird der neue Energiemodus auf das Gerät geschrieben.

page(num: int = None) None

Liest oder setzt die Registerseite. Ohne Argument wird das aktuelle Seitenregister gelesen. Mit einem num-Argument wird die Seite ausgewählt.

temperature() int

Gibt den Wert des Chip-Temperaturregisters als vorzeichenloses Byte zurück.

read_id() bytes

Gibt den 4-Byte-ID-Block zurück, der aus dem Register 0x00 gelesen wird. Der erwartete Wert ist b'\xA0\xFB\x32\x0F'.

axis(placement: bytes = None) bytes

Liest oder setzt die Achsen-Remap-Konfiguration. Ohne Argument wird die aktuelle 2-Byte-Achsenkonfiguration zurückgegeben. Mit einem placement-Argument wird die angegebene 2-Byte-Achsenkonfiguration geschrieben. Verwenden Sie eine der unten aufgeführten Konstanten AXIS_P0..``AXIS_P7``.

quaternion() list

Gibt die fusionierte Orientierung als 4-elementige Liste [w, x, y, z] von Gleitkommazahlen zurück, skaliert auf den Bereich des Einheitsquaternions.

euler() list

Gibt die fusionierte Orientierung als 3-elementige Liste [yaw, roll, pitch] von Gleitkommazahlen in Grad zurück.

accelerometer() list

Gibt den Beschleunigungssensorwert als 3-elementige Liste [x, y, z] von Gleitkommazahlen in m/s^2 zurück.

magnetometer() list

Gibt den Magnetometerwert als 3-elementige Liste [x, y, z] von Gleitkommazahlen in Mikrotesla zurück.

gyroscope() list

Gibt den Gyroskopwert als 3-elementige Liste [x, y, z] von Gleitkommazahlen in Grad pro Sekunde zurück.

linear_acceleration() list

Gibt die schwerkraftkompensierte Linearbeschleunigung als 3-elementige Liste [x, y, z] von Gleitkommazahlen in m/s^2 zurück.

gravity() list

Gibt den Schwerkraftvektor als 3-elementige Liste [x, y, z] von Gleitkommazahlen in m/s^2 zurück.

Konstanten

Betriebsmodi

bno055.CONFIG_MODE: int

Konfigurationsmodus (0x00). Das Gerät muss sich in diesem Modus befinden, um die Konfigurationsregister zu ändern.

bno055.ACCONLY_MODE: int

Nur-Beschleunigungssensor-Nicht-Fusionsmodus (0x01).

bno055.MAGONLY_MODE: int

Nur-Magnetometer-Nicht-Fusionsmodus (0x02).

bno055.GYRONLY_MODE: int

Nur-Gyroskop-Nicht-Fusionsmodus (0x03).

bno055.ACCMAG_MODE: int

Beschleunigungssensor + Magnetometer Nicht-Fusionsmodus (0x04).

bno055.ACCGYRO_MODE: int

Beschleunigungssensor + Gyroskop Nicht-Fusionsmodus (0x05).

bno055.MAGGYRO_MODE: int

Magnetometer + Gyroskop Nicht-Fusionsmodus (0x06).

bno055.AMG_MODE: int

Beschleunigungssensor + Magnetometer + Gyroskop Nicht-Fusionsmodus (0x07).

bno055.IMUPLUS_MODE: int

IMU-Fusionsmodus mit Beschleunigungssensor + Gyroskop (0x08).

bno055.COMPASS_MODE: int

Kompass-Fusionsmodus mit Beschleunigungssensor + Magnetometer (0x09).

bno055.M4G_MODE: int

Magnet-für-Gyroskop-Fusionsmodus (0x0A).

bno055.NDOF_FMC_OFF_MODE: int

9-DOF-Fusionsmodus mit deaktivierter schneller Magnetometerkalibrierung (0x0B).

bno055.NDOF_MODE: int

9-DOF-Fusionsmodus mit aktivierter schneller Magnetometerkalibrierung (0x0C). Dies ist der vom Konstruktor verwendete Standardmodus.

Achsenplatzierungen

Die folgenden 2-Byte-Werte werden an BNO055.axis() übergeben, um das Gerätekoordinatensystem neu zuzuordnen. Jede Konstante ist das Registerpaar (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) aus dem BNO055-Datenblatt (Abschnitt 3.4, Axis remap), vorab codiert für eine der acht standardmäßigen Platzierungsorientierungen.

Wählen Sie die Konstante, deren Ausgabeachsen damit übereinstimmen, wie der Chip physisch auf der Host-Leiterplatte montiert ist:

Konstante

Ausgabe X

Ausgabe Y

Ausgabe Z

Bytes

Montage

AXIS_P0

-Yc

+Xc

+Zc

21 04

Vorderseite oben, 90° gegen den Uhrzeigersinn von P1

AXIS_P1

+Xc

+Yc

+Zc

24 00

Vorderseite oben, Datenblatt-Standard

AXIS_P2

-Xc

-Yc

+Zc

24 06

Vorderseite oben, um 180° gedreht

AXIS_P3

+Yc

-Xc

+Zc

21 02

Vorderseite oben, 90° im Uhrzeigersinn von P1

AXIS_P4

+Xc

-Yc

-Zc

24 03

Vorderseite unten, um X gespiegelt (Konstruktor-Standard)

AXIS_P5

+Yc

+Xc

-Zc

21 01

Vorderseite unten, um 90° gegen den Uhrzeigersinn von P4 gedreht

AXIS_P6

-Yc

-Xc

-Zc

21 07

Vorderseite unten, um 180° von P4 gedreht

AXIS_P7

-Xc

+Yc

-Zc

24 05

Vorderseite unten, um 90° im Uhrzeigersinn von P4 gedreht

Xc / Yc / Zc bezeichnen die intrinsischen Achsen des Chips (wie im BNO055-Datenblatt aufgedruckt). Die „Ausgabe“-Spalten sind die Achsen, die das Gerät über BNO055.euler(), BNO055.gyro() usw. liefert. P0 bis P3 sind die vier 90°-Drehungen des Chips in der Ausrichtung mit der Bauteilseite nach oben; P4 bis P7 sind dieselben vier Drehungen, nachdem der Chip auf seine Rückseite gedreht wurde.

bno055.AXIS_P0: bytes

Chip-Vorderseite oben, um 90° gegen den Uhrzeigersinn von AXIS_P1 gedreht. Ausgabeachsen: X = -Yc, Y = +Xc, Z = +Zc.

bno055.AXIS_P1: bytes

Chip-Vorderseite oben in der Standardausrichtung des BNO055-Datenblatts. Es wird kein Remap angewendet: X = +Xc, Y = +Yc, Z = +Zc.

bno055.AXIS_P2: bytes

Chip-Vorderseite oben, um 180° von AXIS_P1 gedreht. Ausgabeachsen: X = -Xc, Y = -Yc, Z = +Zc.

bno055.AXIS_P3: bytes

Chip-Vorderseite oben, um 90° im Uhrzeigersinn von AXIS_P1 gedreht. Ausgabeachsen: X = +Yc, Y = -Xc, Z = +Zc.

bno055.AXIS_P4: bytes

Chip auf die Rückseite gedreht (Bauteilseite unten) relativ zu AXIS_P1. Ausgabeachsen: X = +Xc, Y = -Yc, Z = -Zc. Dies ist die vom BNO055-Konstruktor verwendete Platzierung, wenn kein axis-Argument angegeben wird.

bno055.AXIS_P5: bytes

Chip-Vorderseite unten, um 90° gegen den Uhrzeigersinn von AXIS_P4 gedreht. Ausgabeachsen: X = +Yc, Y = +Xc, Z = -Zc.

bno055.AXIS_P6: bytes

Chip-Vorderseite unten, um 180° von AXIS_P4 gedreht. Ausgabeachsen: X = -Yc, Y = -Xc, Z = -Zc.

bno055.AXIS_P7: bytes

Chip-Vorderseite unten, um 90° im Uhrzeigersinn von AXIS_P4 gedreht. Ausgabeachsen: X = -Xc, Y = +Yc, Z = -Zc.