bno055 — BNO055 IMU-drivrutin

Denna modul tillhandahåller en drivrutin för Bosch BNO055 9-axlig sensor för absolut orientering via I2C. BNO055 sammanför data från accelerometer, magnetometer och gyroskop på chippet och tillhandahåller utdata för kvaternion, Euler-vinklar, linjär acceleration och gravitation utöver de råa sensorkanalerna.

Exempelanvändning:

import time
from machine import I2C
import bno055

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

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

Klasser

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

Skapar en instans av BNO055-drivrutinen.

  • bus är ett konfigurerat machine.I2C-bussobjekt som används för att kommunicera med sensorn.

  • address är enhetens 7-bitars I2C-adress. Standardvärdet är 0x28.

  • mode är det driftläge som enheten försätts i efter återställning. Se driftlägeskonstanterna nedan. Standardvärdet är NDOF_MODE.

  • axis är ett 2-byte-konfigurationsvärde för axelomkoppling. Se konstanterna för axelplacering nedan. Standardvärdet är AXIS_P4.

Konstruktorn verifierar chip-ID:t, utför en mjuk återställning, växlar till normal strömförsörjning, tillämpar axelkonfigurationen och går in i det begärda driftläget med den externa oscillatorn. Utlöser RuntimeError om de förväntade ID-registervärdena inte läses tillbaka.

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

Läser size byte från det angivna enhetsregistret och returnerar dem som ett bytes-objekt.

write_registers(register: int, data: bytes) None

Skriver de angivna data-byten till enheten med början vid register.

operation_mode(mode: int = None) int

Hämtar eller ställer in driftlägesregistret. Utan argument returneras det aktuella läget som en int. Med ett mode-argument skrivs det nya läget till enheten. Se driftlägeskonstanterna nedan.

system_trigger(data: int) None

Skriver data till systemets utlösarregister (0x3F). Detta används internt för att utfärda en mjuk återställning (0x20) och för att välja den externa oscillatorn (0x80).

power_mode(mode: int = None) bytes

Hämtar eller ställer in strömlägesregistret. Utan argument returneras det aktuella strömlägesregistrets innehåll. Med ett mode-argument skrivs det nya strömläget till enheten.

page(num: int = None) None

Hämtar eller ställer in registersidan. Utan argument läses det aktuella sidregistret. Med ett num-argument väljs sidan.

temperature() int

Returnerar chippets temperaturregistervärde som en byte utan tecken.

read_id() bytes

Returnerar det 4-byte-stora ID-blocket som läses från register 0x00. Det förväntade värdet är b'\xA0\xFB\x32\x0F'.

axis(placement: bytes = None) bytes

Hämtar eller ställer in konfigurationen för axelomkoppling. Utan argument returneras den aktuella 2-byte-axelkonfigurationen. Med ett placement-argument skrivs den angivna 2-byte-axelkonfigurationen. Använd en av konstanterna AXIS_P0..AXIS_P7 nedan.

quaternion() list

Returnerar den sammanförda orienteringen som en lista med 4 element [w, x, y, z] av flyttal skalade till enhetskvaternionintervallet.

euler() list

Returnerar den sammanförda orienteringen som en lista med 3 element [yaw, roll, pitch] av flyttal i grader.

accelerometer() list

Returnerar accelerometeravläsningen som en lista med 3 element [x, y, z] av flyttal i m/s^2.

magnetometer() list

Returnerar magnetometeravläsningen som en lista med 3 element [x, y, z] av flyttal i mikro-Tesla.

gyroscope() list

Returnerar gyroskopavläsningen som en lista med 3 element [x, y, z] av flyttal i grader per sekund.

linear_acceleration() list

Returnerar den gravitationskompenserade linjära accelerationen som en lista med 3 element [x, y, z] av flyttal i m/s^2.

gravity() list

Returnerar gravitationsvektorn som en lista med 3 element [x, y, z] av flyttal i m/s^2.

Konstanter

Driftlägen

bno055.CONFIG_MODE: int

Konfigurationsläge (0x00). Enheten måste vara i detta läge för att ändra konfigurationsregister.

bno055.ACCONLY_MODE: int

Icke-fusionsläge med endast accelerometer (0x01).

bno055.MAGONLY_MODE: int

Icke-fusionsläge med endast magnetometer (0x02).

bno055.GYRONLY_MODE: int

Icke-fusionsläge med endast gyroskop (0x03).

bno055.ACCMAG_MODE: int

Icke-fusionsläge med accelerometer + magnetometer (0x04).

bno055.ACCGYRO_MODE: int

Icke-fusionsläge med accelerometer + gyroskop (0x05).

bno055.MAGGYRO_MODE: int

Icke-fusionsläge med magnetometer + gyroskop (0x06).

bno055.AMG_MODE: int

Icke-fusionsläge med accelerometer + magnetometer + gyroskop (0x07).

bno055.IMUPLUS_MODE: int

IMU-fusionsläge med accelerometer + gyroskop (0x08).

bno055.COMPASS_MODE: int

Kompassfusionsläge med accelerometer + magnetometer (0x09).

bno055.M4G_MODE: int

Magnet-för-gyroskop-fusionsläge (0x0A).

bno055.NDOF_FMC_OFF_MODE: int

9-DOF-fusionsläge med snabb magnetometerkalibrering inaktiverad (0x0B).

bno055.NDOF_MODE: int

9-DOF-fusionsläge med snabb magnetometerkalibrering aktiverad (0x0C). Detta är standardläget som konstruktorn använder.

Axelplaceringar

Följande 2-byte-värden skickas till BNO055.axis() för att koppla om enhetens koordinatsystem. Varje konstant är registerparet (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) från BNO055-databladet (Avsnitt 3.4, Axis remap), förkodat för en av de åtta standardplaceringsorienteringarna.

Välj den konstant vars utdataxlar matchar hur chippet är fysiskt monterat på värd-PCB:n:

Konstant

Utdata X

Utdata Y

Utdata Z

Byte

Montering

AXIS_P0

-Yc

+Xc

+Zc

21 04

uppåtvänd, 90° moturs från P1

AXIS_P1

+Xc

+Yc

+Zc

24 00

uppåtvänd, databladets standard

AXIS_P2

-Xc

-Yc

+Zc

24 06

uppåtvänd, roterad 180°

AXIS_P3

+Yc

-Xc

+Zc

21 02

uppåtvänd, 90° medurs från P1

AXIS_P4

+Xc

-Yc

-Zc

24 03

nedåtvänd, vänd kring X (konstruktorstandard)

AXIS_P5

+Yc

+Xc

-Zc

21 01

nedåtvänd, roterad 90° moturs från P4

AXIS_P6

-Yc

-Xc

-Zc

21 07

nedåtvänd, roterad 180° från P4

AXIS_P7

-Xc

+Yc

-Zc

24 05

nedåtvänd, roterad 90° medurs från P4

Xc / Yc / Zc betecknar chippets inneboende axlar (som de står tryckta i BNO055-databladet). Kolumnerna ”Utdata” är de axlar som enheten levererar via BNO055.euler(), BNO055.gyro() osv. P0 till P3 är chippets fyra 90°-rotationer i orienteringen med komponentsidan uppåt; P4 till P7 är samma fyra rotationer efter att chippet vänts på rygg.

bno055.AXIS_P0: bytes

Chippet uppåtvänt, roterat 90° moturs från AXIS_P1. Utdataxlar: X = -Yc, Y = +Xc, Z = +Zc.

bno055.AXIS_P1: bytes

Chippet uppåtvänt i BNO055-databladets standardorientering. Ingen omkoppling tillämpas: X = +Xc, Y = +Yc, Z = +Zc.

bno055.AXIS_P2: bytes

Chippet uppåtvänt, roterat 180° från AXIS_P1. Utdataxlar: X = -Xc, Y = -Yc, Z = +Zc.

bno055.AXIS_P3: bytes

Chippet uppåtvänt, roterat 90° medurs från AXIS_P1. Utdataxlar: X = +Yc, Y = -Xc, Z = +Zc.

bno055.AXIS_P4: bytes

Chippet vänt på rygg (komponentsidan nedåt) relativt AXIS_P1. Utdataxlar: X = +Xc, Y = -Yc, Z = -Zc. Detta är den placering som BNO055-konstruktorn använder när inget axis-argument anges.

bno055.AXIS_P5: bytes

Chippet nedåtvänt, roterat 90° moturs från AXIS_P4. Utdataxlar: X = +Yc, Y = +Xc, Z = -Zc.

bno055.AXIS_P6: bytes

Chippet nedåtvänt, roterat 180° från AXIS_P4. Utdataxlar: X = -Yc, Y = -Xc, Z = -Zc.

bno055.AXIS_P7: bytes

Chippet nedåtvänt, roterat 90° medurs från AXIS_P4. Utdataxlar: X = -Xc, Y = +Yc, Z = -Zc.