Skocz do zawartości

Filtr cyfrowy zwiekszający dokładność odczytów z przetwornika ADC


FlyingDutch

Pomocna odpowiedź

Cześć,

wiadomo, że aby uzyskać dokładne dane cyfrowe (po konwersji z ADC) trzeba zapewnić wiele warunków. Dokładność danych (i ich wiarygodność) można zwiększać na drodze fizycznej i programowej. Wiadomo, że jeśli chodzi o metody fizyczne to należy zapewnić:

1) Stabilne napięcie zasilania przetwornika (i jego filtrację)

2) Stabilne napięcie odniesienia

3) Zapewnienie w miarę stałej temperatury układu pomiarowego

4) Oddzielenie masy "cyfrowej" i "analogowej"

5) Ekranowanie przewodów pomiarowych

6) Używanie wejść różnicowych dla analogowych sygnałów mierzonych

7) Używanie filtrów dolno-przepustowych dla sygnałów analogowych (mierzonych)

Zastanawiam się jakie są metody programowe służące do zwiększenia dokładności i pewności danych np. z 16-to bitowego przetwornika ADC (np. typ ADS1115):

Chodzi mi o odfiltrowanie "mało prawdopodobnych" wyników pomiarów wynikających np. z szybkich zakłóceń impulsowych, oraz dryftu temperaturowego, oraz zakłóceń o częstotliwości sieci energetycznej (50-60Hz).

Czy są tu dostępne "dobrze znane" algorytmy, a jeśli tak to jakieś przykłady realizacji?

Pozdrawiam

Link do komentarza
Share on other sites

Po pierwsze wszystko zależy od zastosowania i środowiska pracy systemu. Rzeczy które wymieniłeś pomagają, ale ani nie zapewniają poprawności ani też nie stanowią pełnej listy. Z drugiej strony rozumiejąc co projektujesz i dla jakich warunków możesz "metody walki" świadomie wybierać. Jeżeli zrobiłeś dobry tor analogowy tj adekwatny do oczekiwanego pasma, szumów i stabilności to nie dostaniesz "szybkich zakłóceń impulsowych" a z kolei dryfty temperaturowe - często trudno przewidywalne w skomplikowanych torach możesz zerować bardzo łatwo po stronie cyfrowej np. mierząc temperaturę i wprowadzając funkcję kompensacji. To oczywiście wymaga powtarzalności używanych elementów a więc nakłada dodatkowe koszta na zaopatrzenie lub podraża proces produkcji bo musisz co którąś sztukę badać w komorze termicznej na dryft.

Nie wspomniałeś także o wyborze samego przetwornika. I nie chodzi mi tu o liczbę bitów czy interfejs, ale o zasadę działania. Pewne błędy i problemy niejako "wbudowane" są w pewne topologie. Czego innego (w sensie błędów ale też i ogólnych parametrów osiągalnych w danej technologii ) spodziewasz się po kostce z podwójnym całkowaniem, czego innego po SAR a czego innego po delta-sigma czy FLASH. Dziś wybór jest tak ogromny (a na dodatek producenci optymalizują swoje wybory często mieszając kilka różnych technik w jednej kostce), że na pewno znajdziesz coś odpowiedniego do każdej aplikacji., Musisz tylko wiedzieć czego szukasz.

A jeśli chodzi o obróbkę cyfrową sygnałów z ADC to znów, wszystko zasadza się w pytaniu: co poprawiasz i w jakiej dziedzinie (czasu czy częstotliwości) pracujesz tj. jakie cechy sygnału są dla Ciebie ważne i co niesie w nim informację? W jednym przetworniku i/lub aplikacji np. offset ADC nie będzie miał kompletnie znaczenia (audio, RF) a w innej ten sam parametr jest kluczowy (waga, pH czy pomiar innych wielkości "stałych"). Zwykle w danym urządzeniu nie musisz mieć idealnego wszystkiego, bo byłoby to przestrzelenie i kosztów i terminów. Tor - od samego wejścia aż do funkcji obróbki wyników w procesorze - musi być optymalny dla konkretnego zadania. A jeśli okazało się, że coś spaprałeś i dostajesz już te "szybkie zakłócenia impulsowe" to ja bym radził przyjrzeć się dokładnie ich pochodzeniu i poprawić projekt - prawdopodobnie nie został spełniony któryś z ważnych punktów przez Ciebie wymienionych. Można stosować jakieś filtry medianowe czy choćby LP, ale to nigdy nie jest bezkarne. Zawsze musisz za to zapłacić pasmem, prądem lub czasem. I nawet głupi filtr musisz dobrać do wymagań aplikacji. Czasem wystarczy szybko liczony IIR (ale jego niestabilności przy marnej arytmetyce oraz zniekształcenia fazy mogą być niedopuszczalne np. przy obróbce sygnałów w dziedzinie czasu np. impulsach) a czasem musisz użyć wielotapowego FIR który obciąża procesor ale ma ładne ch-ki fazowe i dowolnie dobre częstotliwościowe.

Podsumowując: tak, jest wiele "dobrze znanych" algorytmów. Tak wiele że powstało o nich setki książek a i tak kluczem jest wiedza o tym który z nich użyć w danej aplikacji i uwarunkowaniach.

Link do komentarza
Share on other sites

Po pierwsze wszystko zależy od zastosowania i środowiska pracy systemu. Rzeczy które wymieniłeś pomagają, ale ani nie zapewniają poprawności ani też nie stanowią pełnej listy. Z drugiej strony rozumiejąc co projektujesz i dla jakich warunków możesz "metody walki" świadomie wybierać. Jeżeli zrobiłeś dobry tor analogowy tj adekwatny do oczekiwanego pasma, szumów i stabilności to nie dostaniesz "szybkich zakłóceń impulsowych" a z kolei dryfty temperaturowe - często trudno przewidywalne w skomplikowanych torach możesz zerować bardzo łatwo po stronie cyfrowej np. mierząc temperaturę i wprowadzając funkcję kompensacji. To oczywiście wymaga powtarzalności używanych elementów a więc nakłada dodatkowe koszta na zaopatrzenie lub podraża proces produkcji bo musisz co którąś sztukę badać w komorze termicznej na dryft..

Cześć,

dziękuję za odpowiedź. Jeszcze nie zrobiłem toru analogowego, ale planuję zasilać przetwornik z zasilacza z liniowym regulatorem napięcia i odpowiednio dobranymi kondensatorami od-sprzęgającymi na napięciu zasilania. Na wejściu planuję filtr dolno-przepustowy analogowy. To nie jest układ do zastosowań profesjonalnych, potrzebuję go do własnych potrzeb np. pomiary czujników analogowych, czy rejestracja w czasie np. napięcia błędu z analogowego układu regulatora PID. Niestety nie dysponuję komorą termiczną, a moje możliwości pomiaru temperatury mogą być również obarczone dość sporym błędem pomiarowym.

Nie wspomniałeś także o wyborze samego przetwornika. I nie chodzi mi tu o liczbę bitów czy interfejs, ale o zasadę działania.

Chciałbym użyć taniego przetwornika ADC z interfejsem I2C, tu jest link do tego przetwornika:

https://kamami.pl/przetworniki-ac-i-ca/204065-ads1115-16-bit-adc-4-channel-with-programmable-gain-amplifier.html

A tutaj do noty katalogowej:

http://dl.btc.pl/kamami_wa/adafruit_1085.pdf

Według tej noty jest to 16-to bitowy przetwornik typu delta-sigma ze wzmacniaczem wejściowym o programowo regulowanym wzmocnieniu (od 2/3 do 16 razy).

Pragnę używać go w trybie dwóch wejść różnicowych (inny tryb to 4 wejścia nie-różnicowe)

Przetwornik ten pragnę podłączyć do Raspberry PI Zero:

https://botland.com.pl/moduly-i-zestawy-raspberry-pi-zero/5215-raspberry-pi-zero-v13-512mb-ram.html

A więc CPU ma całkiem sporą moc obliczeniową.

A jeśli chodzi o obróbkę cyfrową sygnałów z ADC to znów, wszystko zasadza się w pytaniu: co poprawiasz i w jakiej dziedzinie (czasu czy częstotliwości) pracujesz tj. jakie cechy sygnału są dla Ciebie ważne i co niesie w nim informację? W jednym przetworniku i/lub aplikacji np. offset ADC nie będzie miał kompletnie znaczenia (audio, RF) a w innej ten sam parametr jest kluczowy (waga, pH czy pomiar innych wielkości "stałych").

Podsumowując: tak, jest wiele "dobrze znanych" algorytmów. Tak wiele że powstało o nich setki książek a i tak kluczem jest wiedza o tym który z nich użyć w danej aplikacji i uwarunkowaniach.

Układ ma służyć do pomiaru wielkości wolno-zmiennych (nie są dla mnie istotne dobre parametry częstotliwościowe, czy fazowe) wystarczy mi w zupełności jedna próbka na sekundę , ale raczej ofsety i wolno-zmienne dryfty. Chciałbym też wyeliminować wpływ przydźwięku sieciowego i zakłóceń impulsowych. Odczyty z ADC pragnę zapisywać z time-stamp (z RTC) na karcie SD. Układ chciałbym wykonać bez dużych inwestycji finansowych i czasowych, stąd wybrane komponenty (co nie oznacza, abym nie chciał osiągnąć wyniku zbliżonego do możliwości sprzętu). Czy te informacje są wystarczające, aby dobrać jakiś konkretny algorytm filtru cyfrowego? Gdyby się udało podczas obróbki cyfrowej wyeliminować zakłócenia impulsowe, rozważyłbym pominięcie filtru analogowego na wejściu.

Pozdrawiam

Link do komentarza
Share on other sites

Ok, to może zacznij od tego, że przeczytasz jak działa przetwornik typu delta-sigma, zgoda? To z jednej strony bardzo ciekawy pomysł (jednobitowy modulator plus nietrywialny filtr cyfrowy) a z drugiej będzie okazja do zastanowienia się i zrozumienia co dostajesz na tacy, czego możesz oczekiwać a czego na pewno nie.

ADC tego typu są wprost idealne do zastosowań stałoprądowych lub wolnozmiennych. mają też wbudowaną w zasadę działania skalowalność - możesz mieć więcej bitów rzadziej lub mniej bitów częściej. Są też z definicji monotoniczne i nie mają tzw. missing codes co jest np. zmorą SARów. Wewnętrzny zegar taktujący i wbudowany filtr cyfrowy są zwykle tak dobierane by wypadkowa ch-ka częstotliwościowa miała zera w pobliżu 50 i/lub 60Hz więc tłumienie tych zakłóceń masz za darmo pod warunkiem, że dasz się przetwornikowi wykazać. Odpada oczywiście próbkowanie w trybie single-shot tj. na życzenie. Musisz ustawić go w tryb pracy ciągłej z wybraną szybkością próbkowania (tutaj to może być np. 8SPS) a wtedy ADC załatwia za Ciebie tłumienie sieci aż do ponad 100dB. To bardzo dużo, nie masz szans zrobić tego na piechotę. Co ciekawe Texas nie podaje chyba żadnych parametrów dla innych Fs co oznacza, że nie ma się czym chwalić. Spokojnie możesz założyć, że dla wyższych Fs szybko spadnie ENOB i że wprowadzono je tylko dla ładnego wyglądu rejestrów I2C.

Żeby w pełni wykorzystać potencjał wejść różnicowych musisz mieć tor od samego czujnika do ADC w całości różnicowy. Przykładowo może to być tensometr w mostku, goły czujnik indukcyjny lub np. piezo, termopara czy termistor odpowiednio włączone. Gdy czujnik jest daleko możesz też zamienić jego sygnał asymetryczny na różnicowy wzmacniaczem z wyjściem różnicowym, przesłać to kablami, odfiltrować/odkłócić RF, ESD i LP i doprowadzić do ADC. Na pewno nigdy nie wyprowadzaj gołych kabli z ADC wprost na jakieś zaciski czy piny poza obudowę. To pierwsze co się spali.

Pamiętaj, że przetworniki są zwykle nadmiarowe jeśli chodzi o liczbę bitów. Tylko w bardzo wyjątkowych sytuacjach (czytaj: nigdy) możesz marzyć o prawdziwych, stabilnych 16 bitach z 16-bitowego ADC. Co więcej, 16 bitów przy referencji 3V to 45uV. Wielokrotnie więcej dostaniesz na styku dwóch metali więc nie miej złudzeń. Do prawdziwej precyzji dochodzi się po wielu próbach, testach i wyrzuconych prototypach.

Przyjrzyj się charakterystyce przenoszenia tego układu (Frequency response) a zobaczysz co możesz z niego dostać. Pierwsze zero filtra masz już w okolicach 8Hz, potem kilka następnych i te najważniejsze: na 50 i 60Hz. Wygląda na to, że powinieneś zrobić wejściowy filtr analogowy już bardzo nisko, na 2-3Hz bo wszystko co szybsze będzie zniekształcane przez filtr cyfrowy przetwornika.

W zależności od wybranego wzmocnienia zmienia się impedancja wejściowa ADC. To ważne w przypadku słabych źródeł. Nie wszystko możesz tu podłączyć bezpośrednio bo o ile 5MΩ można czasem pominąć, o tyle już 700kΩ może w przypadku niektórych czujników wprowadzać duży błąd.

Generalnie: czytaj ze zrozumieniem datasheet do końca, nie tylko pierwszą stronę. No i zawsze obowiązuje prawo o próbkowaniu: do wejścia ADC doprowadzasz sygnał o paśmie mniejszym niż połowa częstotliwości próbkowania. Przy 8SPS sprowadza się to właściwie do prądu stałego 🙂

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Teraz jeszcze tak sobie myślę, że skoro potrzebujesz próbek raz na sekundę, to pierwsze co możesz z robić to czytać każdą z tych 8/s i je filtrować. Najprościej filtrem MA (moving average), ale skoro zrobisz już taki to równie dobrze możesz policzyć jakiś konkretny FIR. Wtedy z 8 wrzuconych próbek możesz dostawać jedną (MA) lub pobierać co 8 (jakiś dłuższy FIR) i cieszyć się poprawą stabilności wyników o 1-1.5 bita bo de facto zrobiłeś oversampling.

Zdając się jednak na zegar ADC (który nie jest kalibrowanym RTC itp) problemem będzie utrzymanie w dłuższym czasie tego 1Hz. Przecież naprawdę będzie to zawsze trochę szybciej lub wolniej i albo w końcu okaże się, że Twój timestamp wykaże dwie próbki w tej samej sekundzie albo co jakiś czas zabraknie jednej. Wyjściem z tego jest filtr rekonstrukcyjny. Takie coś pozwala "odtwarzać" nieistniejące próbki na podstawie wiedzy o paśmie sygnału. Jeżeli doprowadzisz do wejścia ADC sygnał o Fmax 2Hz i zrobisz cyfrowy filtr FIR o takiej częstotliwości odcięcia, ale działający z Fs np. 64Hz to teraz:

- wrzucasz do niego próbkę z ADC pracującego z 8SPS,
- wpychasz do filtra 7 próbek o wartościach zero

i tak w kółko.

Dzięki temu na wyjściu filtra masz próbki z Fs 64Hz pasmowo obcięte do 2Hz. Zwiększyłeś sobie rozdzielczość czasową ze 125ms do 15ms. No i teraz, gdy przyjdzie 1Hz sygnał z RTC "dawaj próbkę" bierzesz tę która "wypadła " z filtra najbliżej pełnej sekundy.

No, to taki pomysł na szybko, skoro bardzo potrzebowałeś jakiegoś algorytmu..

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.