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.

Jak skonstruować filtr cyfrowy?

resonator 02 Kwi 2018 11:14 501 7
  • #1 02 Kwi 2018 11:14
    resonator
    Poziom 3  

    Witam
    Mój projekt odczytuje pewne dane i wyświetla je na wyświetlaczu. Natknąłem się na taki problem że odczyty są dość niestabilne, oscylują wokół tego co powinno być. Chciałbym to jakoś wygładzić aby na wyświetlaczu odczyt tak nie skakał. Nie mam doświadczenia w filtrach cyfrowych ale spróbowałem zastosować filtr alfa-beta, jednak przy zadowalającym wygładzeniu sygnału przeregulowanie było już zbyt duże. Nie interesuje mnie szybki czas reakcji na zmianę mogą to być 2-4 sekundy.

    Program działa w ten sposób, że odczytuje okres obrotu wału, zawiera się on w przedziale 0,1 - 2,5s (jednak zwykle nie jest to więcej niż 1s), a w przerwaniu ok. 10Hz mam przeliczanie okresu na prędkość i wysyłanie na wyświetlacz. I właśnie tutaj w przerwaniu po przeliczeniu chciałbym coś wstawić co sprawiło by że zmiany prędkości były by łagodniejsze. Nie mam znam się na filtracji wiec proszę o pomoc bardziej doświadczonych użytkowników.

    Wesołych świąt :D

    0 7
  • #2 02 Kwi 2018 11:44
    excray
    Poziom 39  

    Jeśli odczytujesz obroty wału i masz niestabilne odczyty, to raczej powinieneś zmodyfikować metodę odczytu aniżeli filtrować wynikające z niewłaściwej metody, błędy.

    0
  • #3 02 Kwi 2018 11:49
    resonator
    Poziom 3  

    Odczyty są niestabilne ze względu na to że jest to niezbyt szybki ruch obrotowy, na dodatek zwalnia lub przyspiesza zależnie od obciążenia, a ja chciałbym pomijać te chwilowe zmiany prędkości.

    0
  • #4 02 Kwi 2018 12:02
    excray
    Poziom 39  

    resonator napisał:
    okres obrotu wału, zawiera się on w przedziale 0,1 - 2,5s

    resonator napisał:
    Nie interesuje mnie szybki czas reakcji na zmianę mogą to być 2-4 sekundy.

    Jak często odczytujesz dane? Mówimy o jednym odczycie na obrót wału, czy o większej ilości odczytów? Bo jeśli jeden odczyt na obrót, to zwiększ częstotliwość próbkowania. Filtrowanie na podstawie 2-3 próbek, to da raczej mierny efekt. Musisz też się sam zastanowić, co chcesz widzieć na tym wyświetlaczu? Wartość średnią? Maksymalną? Według Twojego opisu można wywnioskować, że interesuje Ciebie maksymalna chwilowa.

    0
  • #5 02 Kwi 2018 12:10
    bolek
    Specjalista - oświetlenie sceniczne

    1. Zrób sobie jakąś dużą zmienną- np 16 lub 32 bity.
    2. Przy każdym odczycie prędkości odejmij od tej dużej zmiennej 1/8 jej wartości i dodaj do niej 1/8 odczytanej wartości obrotowej.
    3. Aby wyciągnąć odfiltorwaną wartość, podziel dużą zmienną przez 8.

    Teraz tak, czy 16 czy 32 bity to już zależy od wielkości jakie otrzymasz w trakcie pracy, musisz sobie to oszacować. Nie jest też powiedziane że musisz dzielić przez 8, chodzi o to aby była to potęga 2 bo to procek szybko policzy poprzez zwykłe przesunięcie bitowe. Czym mocniej będziesz dzielić tym bardziej stabilną będziesz miał wartość, ale i dłuższą odpowiedź (więc dobrze jest wkładać do tego filtru każdą zmierzoną wartość).
    Możesz też przyspieszyć prawidłowe wskazanie po starcie. Pierwszą odczytaną wartość obrotów pomnóż przez 8 i wsadź do dużej zmiennej.

    Na poniższym obrazku masz zobrazowane działanie takiego filtra, który dzieli przez 16. Niebieska linia to wartości wejściowe, czerwone to to co wychodzi z filtra. Jak skonstruować filtr cyfrowy?

    0
  • #6 02 Kwi 2018 14:15
    JacekCz
    Poziom 36  

    resonator napisał:
    ....
    Mój projekt odczytuje pewne dane i wyświetla je na wyświetlaczu. Natknąłem się na taki problem że odczyty są dość niestabilne, oscylują wokół tego co powinno być.


    Nie jest do końca jasne o czym piszesz, jaki jest czujnik, na ile niestabilność wynika z przyczyn "analogowych" (to by można potwierdzić np oscyloskopem), na ile z "matematyki". Czy "analogowy" impuls tylko "pływa", czy czasem "wypada".

    Jeśli jest znaczny element "analogowy", trudno mi wyobrazić sobie uporanie się z tym inaczej niż po ... np dziesięciu obrotach wału, więc ta średnia byłaby mocno opóźniona

    0
  • #7 02 Kwi 2018 17:47
    _lazor_
    Moderator Projektowanie

    Polecam użycie kalkulatora do filtru FIR, np taki:
    http://t-filter.engineerjs.com/

    Dzięki niemu możesz w łatwy sposób zaprojektować i zaimplementować swój filtr cyfrowy do projektu.

    0