logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

GY-955 (BNO055) przejmuje magistralę I2C i UART - jak ustabilizować?

PitersonX 02 Maj 2018 16:06 1470 3
REKLAMA
  • #1 17199134
    PitersonX
    Poziom 12  
    Witam,

    Posiadam moduł IMU z układem Bosch BNO055 (GY-955), który obsługiwany jest przez ATMEGA328p za pomocą I2C. Problem w tym, że po podłączeniu, moduł przejmuje kontrolę nad magistralą i wysyła strumień danych, nie dając się skonfigurować wg instrukcji zawartych w nocie BNO055. Po resecie, w ciągu ułamka sekundy, zanim układ przejmie kontrolę, można zdążyć odczytać/zapisać kilka rejestrów BNO055, ale cokolwiek zmieni się w rejestrach - układ i tak przejmuje kontrolę nad magistralą i odcina tym samym dostęp do rejestrów. Podobnie dzieje się z UARTem. Po wysłaniu komendy z żądaniem odczytu jakiegoś rejestru, układ przejmuje kontrolę i wysyła bez przerwy strumień jakiś danych (po kilkunastu próbach interpretacji zachowanych liczb stwierdziłem, że najprawdopodobniej są to dane z akcelerometru). Wg dokumentacji BNO055, po włączeniu, czy resecie, powinien wejść w stan konfiguracji i czekać na komendy (tryb slave), a tymczasem moduł zachowuje się jak master. W goglach pełno jest sprzedawców GY-955, ale nie udało mi się znaleźć żadnej informacji o obsłudze tego modułu. Obawiam się, że Chińczycy wgrali jakiś "autorski" firmware do MCU BNO055 i tym samym nota BNO055 straciła aktualność. Chciałbym prosić Szanownych Forumowiczów, którzy mieli kontakt GY-955 (ale nie Adafruit, Atmel i inne markowe z BNO, tylko GY-955), o wsparcie informacją jak kontrolować ten moduł. Nie proszę o pomoc w szukaniu błędów we wsadzie, czy połączeniach, bo tych rzeczy jestem pewien, tylko o informację, czy te moduły tak mają i czy można je kontrolować. Być może mój jest zwyczajnie uszkodzony.

    Pozdrawiam,
    Piotr
  • REKLAMA
  • #2 17204319
    PitersonX
    Poziom 12  
    Widzę, że nie wzbudziłem zainteresowania. W międzyczasie poeksperymentowałem z GY-955: działa z napięciem 3.3V i 5V (na razie nie udało mi się go uszkodzić :)). Trochę posiedziałem nad danymi ściągniętymi z modułu i ustaliłem, że w przypadku transmisji UART ramka danych wygląda następująco (bajty):
    90 90 A B C0 C1 C2 C3 ... Cn
    gdzie:
    90 - wartość dziesiętna pierwszego i drugiego bajtu;
    A oznacza bajt z rodzajem otrzymywanych danych:
    bit 0 - akcelerometr
    bit 1 - magnetometr (tu mam wątpliwości, to może być tzw. liniowy akcelerometr)
    bit 2 - żyroskop
    bit 3 - kąty Eulera
    bit 4 - quaterniony
    pozostałe bity A są zawsze wyzerowane (jak się ustawi wszystkie bity, to moduł będzie wysyłał wszystkie możliwe pomiary w jednej ramce);
    B oznacza bajt, który jest numerem n ostatniej przesyłanej danej, tzn. B+1 jest liczbą przesyłanych bajtów C;
    C oznacza bajty danych, które po zdekodowaniu parami:
    np.
    C0 * 256 + C1
    lub
    (( C0 * 256 + C1 ) xor 32768 - 32768 ) / 100.0
    itd. w zależności od fizycznego znaczenia otrzymywanych danych
    dają wartości składowych x, y i z pomiarów,
    ostatnie dwa bajty C moim zdaniem niosą informację o jakości danych (kalibracja), zdaje się, że pierwszy z dwóch ostatnich bajtów to rejestr CALIB_STAT BNO055.

    Żeby moduł zaczął nadawać przez UART trzeba wysłać na niego sekwencję trzech bajtów:
    170 (start, jak w datasheecie BNO055);
    A (bajt określający rodzaj danych, jak w ramce);
    X (dowolny bajt, jeszcze nie ustaliłem na co ma wpływ).
    Przed inicjalizacją UARTu resetuję moduł zerując pin REST na 1ms.
    Mnie interesują przede wszystkim kąty Eulera, więc w moim przypadku inicjalizacja wygląda następująco:
    resetuję GY-955, wysyłam kolejno: 170 8 10 i po chwili odbieram ramki z danymi.
    Zatrzymanie transmisji realizuję wysyłając ramkę z A = 0, tj. 170 0 10.

    Jeśli kogoś mimo wszystko zainteresuje ten temat, to zajmę się też I2C.

    Pozdrawiam Wszystkich, którzy tu zaglądnęli :)
    Piter
  • REKLAMA
  • #3 17204415
    NoweMillennium
    Poziom 17  
    PitersonX napisał:
    Widzę, że nie wzbudziłem zainteresowania.

    Dlaczego nie?
    Jedna osoba (poza autorem) śledzi temat, 144 zajrzały tu. Brak odzewu spowodowany jest:
    a) Długim wekkendem (w ostatnim tygodniu mały ruch na Elektrodzie)
    b) Prawdopodobnie mało osób używało GY-955
  • #4 17204586
    PitersonX
    Poziom 12  
    A, to przepraszam :)
    W takim razie spróbuję rozkminić I2C tego modułu.
REKLAMA