Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega8 Bascom - MPU 6050 poprawność kodu i wyników

maximus22_kr 02 Lut 2015 23:53 1362 1
  • #1 02 Lut 2015 23:53
    maximus22_kr
    Poziom 18  

    Witam
    Z ciekawości uruchomiłem czujnik MPU6050, kod wykorzystałem z jednej z niemieckich stron - poniżej. Nie jestem pewien, czy kod jest poprawny, bo wyniki są bardzo "ruchliwe". Tzn. gdy płytka czujnika leży nieruchomo na stole to wyniki się zmieniają i o to sporo.
    Przykładowo:
    Accx zmienia się od np 10 do 270
    Accy cały czas jest duże - nawet ponad 400
    Accz zmienia się od np 50 do 300

    natomiast wskazania żyroskopu są bardziej stabilne - dla leżącej płytki
    Gyrox około 300
    Gyroy - 450
    Gyroz - 440

    o ile dobrze wyczytałem żyroskop pokazuje przyśpieszenie kątowe, Całkując te dane otrzymuje się prędkość kątową, a całkując je dalej kąt obrotu po czasie.
    Akcelerometr natomiast przyspieszenie liniowe.

    Może ktoś to przerabiał i potwierdzi lub nie, że tak powinno być.
    Liczyłem na coś takiego, że akcelerometr będzie się inaczej zachowywał, bo przecież płytka czujnika leży nieruchomo, nikt jej nie dotyka, Accx potrafi pokazać, 11, 47, a nagle skoczy do 198. Zapewne to wynika z braku mojej wiedzy na temat niektórych zagadnień.



    Program:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    4 1
  • #2 17 Sie 2015 18:16
    satanistik
    Poziom 27  

    Problem leży po stronie scalania danych - wartości tmp_accx(1) i tmp_accx(2) nie mogą być dodane do siebie. Należy pamiętać że są to dwie połówki zmiennej typu integer, wartość tmp_accx(2) należy pomnożyć przez 255 lub przesunąć w lewo o 8 pozycji. Następnie obie połówki łączymy instrukcją OR (+ tu nie zadziała gdyż w przypadku liczb ujemnych będą głupoty).
    Gotowa procedura wygląda tak:

    Accx = Tmp_accx(2)
    Shift Accx , Left , 8
    Accx = Accx Or Tmp_accx(1)


    Accy = Tmp_accy(2)
    Shift Accy , Left , 8
    Accy = Accy Or Tmp_accy(1)


    Accz = Tmp_accz(2)
    Shift Accz , Left , 8
    Accz = Accz Or Tmp_accz(1)

    dla przyspieszenia możemy zrobić to samo tylko zmieniając nazwy.

    1
  Szukaj w 5mln produktów