Skocz do zawartości

2x Atmega i nadpróbkowanie ADC


Pomocna odpowiedź

Mam wrażenie, chociaż może mylne, że nastąpiło pewne nieporozumienie. Wydaje mi się, że to co opisuje kolega buchbuch, to mniej-więcej coś takiego: https://sklep.avt.pl/avt2864.html

Czyli mamy filtry środkowo przepustowe, a atmega głównie służy do wizualizacji wyników. Wydaje mi się, że takie rozwiązanie może działać (dowód przez przykład 😉 )

Natomiast wspomniana częstotliwość samplowania niejako automatycznie kieruje w stronę DSP i cyfrowych filtrów. W tej sytuacji atmega nie ma szans - chociaż zawsze można próbować. Inna sprawa, że zacznij od solidnego kursu asemblera, tutaj będzie się liczył każdy cykl zegara.

Ogólnie do DSP dostępne są dedykowane procesory - ich moc obliczeniowa jest najczęściej większa niż typowych mikrokontrolerów, a poza tym posiadają specjalne moduły sprzętowe. DSP jest bardzo wymagające jak chodzi o prędkość przetwarzania.

Na STM32 można zrobić prosty filtr, na F1 pracowałem z modemem radiowym 9600bps... Może F4 ma szansę na coś więcej, w końcu ma moduły DSP - ale nadal nie jest to dedykowany układ.

Co do literatury to na początek polecałbym Lyonsa: http://www.wkl.com.pl/wprowadzenie-do-cyfrowego-przetwarzania-sygnalow,1,1,1322?

  • Pomogłeś! 1

Dzięki Elvis! Niemal dokładnie o to chodziło a nawet coś jeszcze prostszego. Będę miał solidny punkt wyjścia do budowy własnego urządzenia. Częstotliwość samplowania postaram się dopasować do możliwości atmegi. Zamierzam też wykorzystać sugestię Marka odnośnie filtru.

Niepokoi mnie nadal ta "przypadkowość" wyzwalania konwersji... Może mi to ktoś wyjaśnić dokładnie jak jakiemuś tłukowi bo nie jestem pewny czy dobrze to zrozumiałem 😋

deshipu, tak, tylko jak widzisz niezupełnie o to chodzi - nie takie częstotliwości, dlatego filtry chcę zrobić samemu. Są w necie programy do projektowania filtrów ze wzmacniaczy więc nawet bardzo wgłębiać się w to nie trzeba, choć uważam, że warto chociaż podstawy przyswoić.

Jestem na wakacjach i trudno mi tutaj pisać, ale spróbuję jeszcze raz się włączyć do dyskusji. Naprawdę bardzo chcę byś zrobił tę swoją aparaturę i właśnie dlatego uznałem, że klasyczne rozwiązanie DSP (czyli wzmacniacz, filtr LP, ADC i procesor) rokuje najlepiej. Po prostu jest to przepis na sprzęt realizujący dowolny algorytm. Oczywiście trzeba poszczególne elementy dobrać, ale tylko w ogólnym zakresie. Wzmacniacz na dobrze współpracować ze źródłem sygnału i dobrze sterować filtrem, filtr ma tłumić wszystko co jest powyżej fs/2, przetwornik ma mieć odpowiednią szybkość i dynamikę a procesor ma zdążyć to wszystko łyknąć i - jeżeli ma działać w czasie rzeczywistym - także przeliczyć i wypluć wynik. To wydaje się mimo wszystko dużo prostsze niż rozwiązania sprzętowe, bo reszta siedzi w algorytmach które można sobie tworzyć " później", gdy hardware stoi na biurku i buczy.

Każde inne rozwiązanie będzie wymagało sporego przygotowania i szczegółowej analizy już teraz, gdy jeszcze nie narysowałeś ani jednej kreski schematu.

Wskazany analizator widma nie jest dobrym przykładem, bo jest trudny. Autor stanął na głowie by ATmega podołała filtracjom i jeszcze obsługiwała pole LEów. Filtry zostały zrobione w strukturze kaskady IIR przedzielonej decymatorami co wymaga mniej obliczeń, ale za to precyzyjnej arytmetyki. Tutaj to nie było możliwe, więc będzie to działało ale tylko tak, jak potrzebuje tego słupek 10 LEDów, czyli z dynamiką może 20-30dB. To nie jest żaden pomiar tylko zabawka i to upchnięta kolanem do małego procesorka. Nie umniejszam absolutnie roli autora, naprawdę się napracował i szacun za to, ale nie wiem, co Ty chcesz osiągnąć. Być może myślisz, że robiąc coś podobnego będziesz mógł całkiem dokładnie mierzyć poziomy amplitud dwóch bliskich harmonicznych. Tak, ale z potężnymi ograniczeniami. I dlatego tak bardzo nalegam byś opisał nam sygnał i co chcesz z niego naprawdę wyciągnąć. Wierz mi, że wprawne oko widząc zadanie będzie potrafiło z marszu powiedzieć, ile mocy obliczeniowej potrzebujesz i jak powinien wyglądać do tego hardware. Być może jest fajne rozwiązanie tych pomiarów, ale Ty nie mając doświadczenia po prostu nie masz o nim pojęcia i niepotrzebnie brniesz w jakieś pierwsze z brzegu. Być może da się to zrobić czysto programowo a być może nie. Jeżeli natomiast będziesz chciał (np. z powodu braku znajomości szybszych procesorów) zrobić to samo w sprzęcie (np. filtry pasmowe na wzmacniaczach) to już teraz będziesz musiał podejmować decyzje o częstotliwościach i dobrociach. A filtry analogowe więcej niż 2-go rzędu bardzo trudno się przestrajają. Zobacz: filtr na jednym wzmacniaczu (który jeszcze daje się przestrajać potencjometrem podwójnym) będzie miał tłumienie 12dB/oktawę a to znaczy, że jeśli zaprzęgniesz go do oddzielania np. drugiej harmonicznej od przebiegu podstawowego, to składowa podstawowa zostanie stłumiona tylko ok. 4 razy. Powiesz: OK, nie muszę przestrajać. Może tak Ci się wydaje, a może rzeczywiście za chwilę będziesz budować filtry pasmowe 6- czy 8-rzędu bo inne będą przepuszczały niepożądane składowe. I to właśnie nie ma sensu. A być może (przy małej zwartości szukanej cechy w sygnale) będziesz po prostu zmuszony do napisania filtrów FIR które mogą być dowolonie dobre kosztem mocy obliczeniowej. Co więcej, ponieważ nie wiemy jakie zjawisko badasz i jak wygląda sygnał muszę Cię ostrzec, że w sygnałach krótkich jest bardzo dużo składowych. Jeżeli zestawem filtrów pasmowych (wszystko jedno programowych czy sprzętowych) zbadasz np. klaśnięcie lub wystrzał, to na wyjściu każdego filtru dostaniesz prawie to samo. I to za każdym razem, z niewielkimi zmianami. Żeby filtry dawały sensowne wyjścia sygnały muszą być długie (w sensie częstotliwości i dobroci filtra czyli jego odpowiedzi impulsowej). To oznacza, że będziesz musiał łapać dużo próbek albo ograniczać dobroci filtrów. To wszystko można przemyśleć i policzyć wcześniej, ale musimy wiedzieć więcej. Istnieje szansa, że w sygnału którym będziesz dysponował nie da się wydzielić tego czego oczekujesz z zadanymi parametrami dynamiki i rozdzielczości.

Powtarzam się, ale może napisz chociaż jak długą próbkę chcesz łapać (ile sampli), z jaką częstotliwością i co (w sensie ilościowym, liczby, liczby) chcesz tam wykryć lub zmierzyć. Najlepiej byłoby oczywiście opisać jak ten sygnał powstaje, ale nie naciskam jeśli obawiasz się, że tajemnica wyjdzie na jaw. Naprawdę nie jesteś pierwszy (ani pewnie ostatni) który coś tam dłubie u siebie, ale nie ma się czego bać. Tu nikt nie będzie tego wyśmiewał ani kopiował a taki opis bardzo pomoże w analizie i poszukiwaniu metod pomiaru. O wiele szybciej dojdziesz do celu gdy dostaniesz sensowne wskazówki konkretnie dla tego przypadku nad którym pracujesz niż takie ogólne bla bla, które można wyczytać w każdej książce, nieprawdaż?

To moja ostatnia prośba. W końcu po coś swoje pytanie tu napisałeś..

marek1707, Widzę,że ów tajemniczy sygnał nie tylko mnie żyć nie daje... ;D ;D ;D

Szukałem w internecie czegoś podobnego i okazuje się, że tego typu urządzenia są powszechnie stosowane do różnych zastosowań. Nie mam oscyloskopu więc mimo najszczerszych chęci nie mogę ci tego sygnału pokazać a przecież nie będę go w paincie malował... Pokrótce można napisać że najwyższą widoczną ponad szum częstotliwością jest jakieś 20 kilka kHz jednak częstotliwości które chcę próbkować to ok 2-5kHz i ok 9-10kHz i też nic pewnego czy to dokładnie te czyli jak widzisz sam nie jestem pewien jak dokładnie sygnał wygląda nie mogąc go zbadać oscyloskopem dlatego pozostaje metoda prób przy różnych konfiguracjach filtrów sprawdzając amplitudę. Zdecydowanie łatwiej by było wykorzystać lepszy procesor ale jak już wspomniałem nie mam takiego a nawet gdybym kupił tego stma albo pica to musiał bym dsy i fora tematyczne przekopywać a to kosztuje... bezcenny czas. Przyjąłem wstępnie, że zbuduję jakiś prosty "miernik" amplitudy z wykorzystaniem tego co mam i wysteruje go spreparowanym przez siebie sygnałem a jak widać z przykładu jest to do zrealizowania nawet na atmedze. Właściwie jedyne różnice w porównaniu do urządzenia z postu Elvisa to ilość kanałów pomiarowych i zakres częstotliwości. Pytałeś o ilość sampli a więc najlepiej tyle żeby ustalić jak najdokładniej górną wartość amplitudy badanej składowej. Jeśli jednak zdołam zbudować taki próbnik to dopiero wtedy będę się zastanawiał nad innymi aspektami takimi jak niepożądane harmoniczne w pobliżu częstotliwości badanej żeby się nie okazało że próbkuje nie to co trzeba itp.. Z atmegą nie moge sobie pozwolić na "dowolne algorytmy" po poprostu, jak sam zresztą wcześniej wspomniałeś, brak na to mocy obliczeniowej i po to m.in te filtry. Myślę, że to wcale nie musi być aż tak kłopotliwe jak to przedstawiasz. Zakładam, że sygnał nie będzie aż tak zaśmiecony a poziomy amplitud badanych ma na tyle wyższą wartość od innych harmonicznych, że nie będzię trudno go "wyłapać". Na chwilę obecną co raz wyskakuje mi inny problem przejściowy a bez doświadczenia trudno ustalić czy akurat metodami jakie chciałem wstępnie wykorzystać da się czy nie da się.. np. okazało się, że nie da się ustawić sprzętowego SPI na maksymalną prędkość użytego ADC przy 16MHz taktowaniu kontrolera (min. 125kHz a potrzeba 100) i mam dylemat czy ciągle zmieniać częstotliwość taktowania co na ogól dobrym pomysłem nie jest (brak ciągłości wykonywania programu)czy próbować z niższą prędkością i ryzykować, że się procek nie wyrobi czy pisać programową obsługę SPI przy czym z tego co pisałeś też może się nie wyrobić i trzeba będzie znacznie zaniżać częstotliwość próbkowania czy po prostu stwierdzić, że przedsięwzięcie jest z góry skazane na niepowodzenie i nie ma sensu zawracać sobie tym więcej głowy i zająć się tym na czym się znam czyli mruganie diodami... Muszę jednak przyznać, że niemało się przy tym nauczyłem...

------------------------------------------

Chyba nie umiem lepiej opisać tego co chcę zbudować więc niepotrzebnie dopatrujesz się w tym jakiejś tajemnicy itp. Elvis jak widzę zrozumiał i trafił z tym linkiem niemal w 10 więc nie rozumiem o jaką tajemnicę ci chodzi. Poza tym na początku chyba każdy ma jakieś trudności nawet z prostymi rzeczami jak choćby modulacja częstotliwości na pinach mc więc spróbuj zrozumieć i mnie 😉

Udanych wakacji.

-----------------------------------------------------------------------------

-----------------------------------------------------------------------------

Spróbuję podsumować całość bo faktycznie temat się zrobił nieco bełkotliwy za co przepraszam bo w dużej mierze z mojej winy, a to jak przypuszczam z tego powodu, że za dużo na raz chciałem i siedząc po nocach przywalony tonami "datashitu" i całą masą innych informacji dotyczących często zupełnie nie związanych ze sobą tematów próbowałem przyswoić jak najwięcej wiedzy w jak najkrótszym czasie więc zrobił się z tego trochę mętlik stąd te niespójności.

Piszę to szczególnie dla początkujących żeby czytając ten wątek nie zastanawiali się o co chodzi w tych wynurzeniach pseudonaukowych z których niewiele wynika.

Samo urządzenie może mieć różne zastosowania: dla mnie ma to być analizator "tajemniczego sygnału wieloczęstotliwościowego" 😉 ale może to być również część odbiornika do komunikacji radiowej na ustalonych częstotliwościach w zależności od zastosowanych filtrów. Można z tego zrobić także bazę prostego detektora metalu albo monitorowanie stanu czujników szybko zmieniających się zjawisk fizycznych lub po prostu niezbyt szybki oscyloskop, szybszy jednak od tych podpinanych pod kartę dźwiękową czyli taka uniwersalna baza "do wszystkiego".

Projektowanie filtrów bardzo ułatwiają programy takie jak choćby FilterLab.

Muszę też sprostować to co napisałem o komunikacji z ADC przez SPI - przetwornik działa z maksymalną prędkością przy taktowaniu na linii sck spi 1,8MHz co wynika z jego karty katalogowej więc "problemu" nie ma.

Postaram się (mam nadzieję niebawem) zaprezentować na forum gotowe urządzenie przy różnych jego zastosowaniach.

Ok, to zaczyna mi się rozjaśniać - przynajmniej Twoje cele i stan projektu. Z pierwszych postów wysnułem (jak się okazuje błędny) wniosek, że robisz coś pomiarowo-kontrolnego do już działającej części analogowej. Nie wiem, masz np. generator dobrego przebiegu sinusoidalnego (np. DDS lub na wzmacniaczach operacyjnych), przepuszczasz to przez jakiś tajemniczy element (wyrafinowany czujnik jakiejś dziwnej wielkości fizycznej - i to pachniało tajemnicą - lub po prostu testowany układ, np. wzmacniacz mocy) i chcesz na wyjściu badać zawartość harmonicznych wpuszczonego sygnału czyli de facto zniekształcenia nieliniowe tego czegoś i to ich ilość jest wynikiem pomiaru. Pisałeś o sygnale podstawowym i pomiarach harmonicznych więc jakoś było to po drodze. No i już widziałem oczami wyobraźni jak próbujesz budować filtry analogowe mające odciąć składową podstawową od reszty lub po prostu wycinać - w celu zmierzenia amplitudy - poszczególne harmoniczne. Ta idea jest prosta, ale problem jak zwykle siedział w szczegółach. Harmoniczne są od siebie oddzielone jedynie częstotliwością podstawową. Jeżeli masz jakiś odkształcony sygnał np. 1kHz, to druga harmoniczna będzie miała oczywiście 2kHz, trzecia 3kHz itd. A technice układów analogowych zmiana częstotliwości o oktawę (czyli dwukrotna) to prawie żadna zmiana. No i jeśli sygnał zawierałby mało harmonicznych (bo byłby słabo odkształcony i wyglądał na oscyloskopie prawie jak sinus) to do sensownego pomiaru np. drugiej harmonicznej (2kHz) musiałbyś użyć filtra, który dobrze wycina ogromną składową podstawową leżącą właśnie oktawę niżej (1kHz). Mając dowolny program do projektowania filtrów zobacz jak skomplikowany musiałby być układ który tłumiłby częstotliwość odległą o oktawę np. 100 razy, czyli miałby nachylenie ch-ki przenoszenia 40dB/oktawę. Być może sklecisz takie coś na wzmacniaczach operacyjnych, ale będzie to paskudnie skomplikowany twór wymagający precyzyjnych oporników i rzadkich kondensatorów z szeregu E24. A przecież jest to tylko 100 razy, tzn że z 1V amplitudy całości dostałbyś aż 1% (10mV) zakłóceń od częstotliwości podstawowej. Co więcej układ byłby nieprzestajalny więc żeby sprawdzić zawartość innej harmonicznej musiałbyś zbudować kolejny filtr z innymi opornikami i kondensatorami. Masakra.

W takich przypadkach masz dwa wyjścia: albo zbudować filtry pasmowe z przełączanymi pojemnościami (są do tego odpowiednie scalaki) bo te przestrajają się przez zmianę zegara taktującego lub pójść w stronę filtrów cyfrowych realizowanych programowo przez szybki procesor. Te z kolei mogą być dowolnie dobre, ale wymagają dużej mocy obliczeniowej w porównaniu do częstotliwości jakie przetwarzają.

Na szczęście jednak robisz coś nieokreślenie innego i możesz zrobić to dowolnie dobrze lub źle bo na razie nie ma żadnych sztywnych wymagań 🙂 Nadal nie wiem co konkretnie, ale przecież nie muszę.

BTW: Wakacje właśnie mi się kończą. Mam nadzieję, że przejechane na rowerze setki kilometrów zaprocentują w najbliższych wyścigach a dziesiątki godzin spędzone w powietrzu z moim nowym kopterkiem zostaną w palcach na dłużej i przestanę wreszcie bać się latać między drzewami 🙂

marek1707, Gratuluję udanych wakacji 🙂

Ale do rzeczy: Wszystko co opisałeś w pierwszej kolejności określając to "paskudnie skomplikowanym tworem" to właśnie mój projekt więc cieszę się, że się w końcu rozumiemy. Układ z założenia ma być nieprzestrajalny dlatego tez zamierzam zastosować 2 filtry środkowoprzepustowe dla każdej z częstotliwości badanych. Wiesz co mam do dyspozycji więc o "szybszym procesorze" najlepiej zapomnijmy i skupmy się na meritum 🙂

Sprawę utrudnia dodatkowo brak oscyloskopu więc muszę "pracować" nieco po omacku, jednakże obaj wiemy, że jest to do zrobienia.

Widzę, że masz szerokie pojęcie o filtracji i analizie sygnałów więc jeśli chcesz pomóc - pomóż, jeśli nie to postaraj się nie przeszkadzać 😉

BTW. W ubiegłym sezonie bez strachu latałem rowerem po ciemku między drzewami w lesie (to nie żart), tak więc nie masz się czym chwalić ;D

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...