Ruszył nowy konkurs! W puli nagród 2300 zł »

Filtr Alfa – Beta od teorii do praktyki – #2

Filtr Alfa – Beta od teorii do praktyki – #2

W poprzednim artykule przedstawiłem teorię dotyczącą filtrów alfa-beta. Wykonałem również symulacje w Matlabie demonstrujące wpływ nastaw na zachowanie filtru. Teraz przyszła pora na implementację filtru na mikrokontrolerze.

W projekcie wykorzystałem płytkę STM32F4 Discovery i moduł MiniIMU v2 od Pololu.


« Poprzedni artykuł z serii

Praktyka

Zaimplementowana aplikacja wypisuje przez interfejs USART aktualne odczyty z żyroskopu we wszystkich trzech osiach oraz oszacowania prędkości kątowej wykonane za pomocą filtru alfa-beta. Aplikacja wykorzystuje system FreeRTOS na którym działają cztery wątki:

  1. wątek odczytu danych z czujnika po I2C
  2. wątek obliczający aktualne oszacowania filtru
  3. wątek wypisujący dane przez interfejs USART
  4. wątek diagnostyczny odpowiadający za inicjalizację pozostałych wątków i migający diodą w celu sprawdzenia czy aplikacja działa poprawnie.

Pomiary z czujnika wykonywane są co 100 ms. Do tej częstotliwości zostały dopasowane częstotliwości działania filtru i loggera wypisującego dane na USART.

Implementacja

Implementacja filtru alfa-beta jest bardzo prosta i składa się z 4 linijek kodu na każdą oś:

Dane z powyższej aplikacji zebrałem za pomocą programu RS Data Logger, a następnie przekonwertowałem na dane czytelne dla Matlaba. Wykorzystałem do tego prosty program napisanym w C (main.c w załączniku). W kolejnym kroku wygenerowałem wykresy wartości mierzonej i estymowanej dla wszystkich trzech osi:

Oś X

Oś X

 

Oś y

Oś y

 

Oś z

Oś z

Analiza sygnałów

Sygnał z żyroskopu charakteryzuje się niewielkim zaszumieniem, a zmiany sygnału są dosyć gwałtowne. W takim wypadku dobrze zastosować dużą wartość parametru alfa, co oznacza upodobnienie sygnału odfiltrowanego do oryginalnego. Filtracja jest bardziej przydatna dla sygnałów o większym zaszumieniu.

Zobaczmy więc, jak filtr działa dla akcelerometru. Poniżej pomiary dla trzech osi dla parametru alfa=0.2 i beta=0.05:

Oś x

Oś x

 

Oś y

Oś y

 

Oś z

Oś z

Podsumowanie

Tym razem widzimy pewne przeregulowania przy gwałtownych zmianach wartości, za to filtr dobrze radzi sobie z szumem.

Jego implementacja nie jest skomplikowana i zajmuje 4 linijki kodu. Strojenia dokonujemy za pomocą dwóch parametrów, gdzie najważniejszy jest parametr alfa.

« Poprzedni artykuł z serii

Załączniki

Filtr alpha-beta (rar, 260 KB)

main.c (plain, 1 KB)

alpha-beta, filtr, FreeRTOS, stm32

Trwa ładowanie komentarzy...