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

STM32 - Jak efektywnie zapisywać dane 1KHz z sensorów na kartę SD Fatfs?

alexx600 16 Paź 2015 19:13 1227 6
REKLAMA
  • #1 15072323
    alexx600
    Poziom 10  
    Posty: 17
    Pomógł: 3
    Ocena: 1
    Witam,

    Mam następujący problem.

    Chciałbym próbkować dane z akcelerometru, żyroskopu oraz magnetometru z częstotliwością 1 KHz, przez okres 7 sekund. Dane te chciałbym zapisać na karcie SD.

    Dotychczas aby zapisać dane na kartę SD korzystałem z biblioteki Fatfs (SDIO). Teraz jest to dość problematyczne, ze względu na czas realizacji zapisu.

    Dane muszą być próbkowane z dokładnym odstępem czasu( całkowanie danych z żyroskopu), więc realizowałem to na przerwaniu od SysTicka. O ile odczyt sensorów nie jest jest problematyczne, to zapis nie jest już tak trywialny.

    Co oczywiste nie mogę zapisywać danych na kartę SD w tym samym przerwaniu co odczyt sensorów.

    Myślałem o gromadzeniu danych w tablicy i następnym zapisie. To jednak wymaga odpowiedniej wielkości pamięci mikroprocesora.

    7s = 7000 próbek
    9 DOF( 3 osie akcelerometru, żyroskopu oraz magnetometru), zapis w int. Więc jedna próbka 9 ×int32 = 9˜×4 bajty= 36 bajtów
    przez 7 sekund 252 000 bajtów !

    Ktoś ma może pomysł jak zrealizować takie zagadnienie?
  • REKLAMA
  • Pomocny post
    #2 15072527
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2203
    Ale w czym masz problem? Wychodzi, że zapisujesz 36kB/s, z taką prędkością to sobie prosty 8-bitowy MCU poradzi. Najlepiej zrobić ze dwie tablice po 512 bajtów (długość sektora na SD) i zapisaywać do nich naprzemiennie dane z czujników, drugą tablicę w tym samym czasie zrzucasz na SD. I tyle.
  • REKLAMA
  • Pomocny post
    #3 15072559
    Co_pat
    Poziom 15  
    Posty: 216
    Pomógł: 1
    Ocena: 2
    Dwa bufory uzupełniane danymi naprzemiennie najlepiej o rozmiarze będącym wielokrotnością jednego sektora SD ( chyba 512B ). Bufory muszą być na tyle duże aby w czasie zapisu na SD mieściły wszystkie dane z czujników.
    Coś więcej:
    FatFs -> Using Mutiple-Sector Write
    Uwaga, karta SD szczególnie większych rozmiarów >4GB z FatFs karta potrafi płatać figle i zapis może trwać ponad 1.5sec.

    @Edit widzę, że się spoźniłem, ale druga część mojej wypowiedzi moze być ważna.
  • REKLAMA
  • #4 15073328
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Jakoś nie wierzę, że te czujniki zwracają wartości 32-bitowe. po co używasz typu int do składowania krótkich danych (zapewne 16-bitowych)?
  • #5 15073771
    grko
    Poziom 33  
    Posty: 1386
    Pomógł: 247
    Ocena: 141
    @BlueDraco Rzeczywiście, to będzie miało wielki wpływ na długość zapisu na kartę SD.
  • REKLAMA
  • #6 15074112
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    No, będzie - zapisów będzie 2 razy mniej.
  • #7 15074162
    grko
    Poziom 33  
    Posty: 1386
    Pomógł: 247
    Ocena: 141
    Na chwilę obecną autor potrzebuje 36kB/s. Naprawdę uważasz, że to w ilości danych do zapisu leży problem ? Odpowiednie buforowanie, załatwi sprawę.

Podsumowanie tematu

✨ Użytkownik ma problem z efektywnym zapisywaniem danych z akcelerometru, żyroskopu i magnetometru z częstotliwością 1 kHz na karcie SD przy użyciu biblioteki FatFs. Wskazano, że zapis danych wynosi 36 kB/s, co jest wykonalne dla prostych mikroprocesorów. Proponowane rozwiązania obejmują użycie dwóch buforów o wielkości sektora (512 B), które będą naprzemiennie uzupełniane danymi, co pozwoli na jednoczesny zapis na karcie SD. Zwrócono uwagę na problemy z kartami SD większymi niż 4 GB, które mogą powodować opóźnienia w zapisie. Pojawiły się również wątpliwości co do użycia typu int32 do przechowywania danych, sugerując, że czujniki mogą zwracać wartości 16-bitowe.
Wygenerowane przez model językowy.
REKLAMA