Skocz do zawartości

2x Atmega i nadpróbkowanie ADC


buchbuch

Pomocna odpowiedź

Witam. Mam być może naiwne pytanie dot. ADC w atmegach tudzież attiny. Chodzi o to, że wbudowany przetwornik może pracować z maksymalną rozdzielczością 10b a i prędkość próbkowania przy tej rozdzielczości jest dla mnie niewystarczająca.

W moim przypadku głównym kryterium jest koszt podzespołów, chciałem zakupić zewnętrzny tani przetwornik typu MCP3202 i problem byłby rozwiązany, jednak nie mogę go nigdzie dostać a jeśli już jakiś sklep ma go w swojej ofercie to koszt wysyłki jest niewspółmiernie wysoki do ceny układu stąd też moje pytanie.

Czy będzie miało sens praktyczny sprzężenie ze sobą dwóch atmeg8 taktowanych z jednego rezonatora i połączonych za pomocą SPI tak aby wykonywały konwersje w tym samym czasie a następnie za pomocą nadpróbkowania otrzymać 12-bitową rozdzielczość pomiaru?

Gwoli ścisłości chodzi o monitorowanie wieloczęstotliwościowego sygnału gdzie maksymalna częstotliwość użyteczna to ok. 20kHz.

Pozdrawiam

__________

Komentarz dodany przez: Treker

Link do komentarza
Share on other sites

1. W atmegach ADC generalnie jest marny i z tych teoretycznych 10 bitów jak uzyskasz stabilne 8 to jest dobrze. Połączenie dwóch atmeg jest moim zdaniem bez sensu.

2. Mam MCP3202 w obudowie DIP8 i SO8 w cenie 12,50zł. Do tego przesyłka priorytetowa 10zł. Przy większych zakupach / innych podzespołach możliwość negocjacji...

Używałem tego układu w projektach i działa bardzo fajnie.

Link do komentarza
Share on other sites

Narzuca się niejako samo z racji stanu posiadania.

Jeśli jednak znasz lepsze rozwiązanie to pisz śmiało. Pod uwagę trzeba wziąć jednak kryterium o którym wspomniałem a więc powinien być to maksymalny minimalizm funkcjonalny 😉

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

Myślę, że to będzie jednak przerost formy nad treścią choć opcja jednak godna uwagi ale raczej na przyszłość niż na teraz. Na teraz pozostanę przy minimalizmie o ile uda mi się kupić ten MCP... Dziwi mnie natomiast stosunkowo niska cena tego stm względem możliwości jakie oferuje. Zapewne są też i minusy tych plusów o których na tą chwilę nie mam pojęcia 😋

Tak na marginesie: Strona twojego sklepu nie działa.

//-----------------------------------------------------

Wygląda na to, że trafiłem na chwilową posuchę z MCP3202 - już są dostępne więc problem rozwiązał się sam. Temat można zamknąć.

Pozdrawiam

Link do komentarza
Share on other sites

Sklep nie działą, bo jest zamknięty.. muszę tylko przelinkować podpis na dole. Dzięki za uwagę...

To raczej atmega i wiele z tych ADC ma całkiem spore ceny, a nie odwrotnie. Chociaż faktem jest, że taki zew. ADC jest zazwyczaj zdecydowanie lepszy od tego w stm32 itp. ( związane to jest z zakłóceniami w tym samym scalaku... )

Link do komentarza
Share on other sites

1. Z jaką częstotliwością chcesz próbkować ten swój sygnał? Bo z tym przetwornikiem uzyskasz jedynie 100kHz a to nie jest daleko od teoretycznego minimum 40-50kHz.

2. Jakie przewidujesz filtry antyaliasingowe? Bo dla uzyskania 12-bitów SNR będziesz musiał ostro ciąć powyżej tych swoich 20kHz.

3. ATmega może co najwyżej pochłonąć kilka tysięcy sampli takiego sygnału ale przy 100ksps nic z tym sensownego w czasie rzeczywistym nie zrobi. Czy będzie to sygnał ciągły, czy tylko jakieś krótkie zjawisko które trzeba złapać a potem coś z tego policzyć? Jeśli ciągły, to musisz znaleźć procesor umiejący zrobić coś mądrego w 10us. ATmega może w tym czasie obsłużyć swoje SPI i umieścić wczytane słowo w pamięci.

4. Przyjrzyj się timingowi tego ADC. Moment próbkowania jest synchonizowany zegarem SPI a ten jest wysyłany w przypadkowych momentach bo start SPI jest wyzwalany programowo. To oznacza, że już na starcie dostajesz jitter na samych momentach próbkowania co w oczywisty sposób dodaje się do szumu. Jeśli chcesz to zrobić dobrze, musisz mieć próbkowanie wyzwalane sprzętowo, np. w ADC startowanym timerem. Takie coś ma większość przetworników wbudowanych w procesory i niektóre zewnętrzne. Ten nie ma wejścia np. CONVERSION_START lub SAMPLE.

EDIT: Może zamiast tych tajemnic po prostu napisz co to za sygnał i co to za proces/zjawisko. Wtedy od razu widać czy brniesz w ślepą uliczką i nie musimy tego zgadywać. Szkoda Twojego czasu i naszego na robienie rzeczy skazanych na porażkę.

Link do komentarza
Share on other sites

Muszę przyznać, że dałeś mi do myślenia tą "przypadkowością" uruchamiania konwersji... Wiem, że to z punktu widzenia fachowca będzie wyglądało na fuszerkę ale mimo to jestem dobrej myśli 😉 Co do samego sygnału to jest to w sumie suma.. sygnałów o różnych częstotliwościach gdzie interesujące są amplitudy napięcia harmonicznych, które na ogół posiadają zdecydowanie większą wartość względem szumu. Mankamentem może być czas ich trwania dlatego niepokoi mnie ta "przypadkowość" ponieważ najwyższa częstotliwość to ok 20kHz i próba "łapania" ich może być kłopotliwa.

Zamierzałem skupić się na dwóch częstotliwościach 5 i 10kHz więc czasu powinno wystarczyć nawet atmedze gdyby jednak i z tym miała problem to w zupełności wystarczy łapanie co drugiej harmonicznej ale z tego co piszesz sztuką będzie trafić w punkt...

Zdaję sobie sprawę, że stosując lepszy mc łatwiej byłoby to zrealizować ale nie mam ani akademickiej wiedzy ani doświadczenia praktycznego z 32bitowymi mc a zdobycie nowej wiedzy potrwa wiec zostanę przy pierwotnej koncepcji. Co do samego ADC nie mogę sobie pozwolić na przetwornik który kosztuje 50 czy 80 zł i którego użyję być może zaledwie kilka razy więc MCP3202 wydał się optymalnym kompromisem.

W kwestii filtracji nie przewiduję nic nadzwyczajnego. Powinien mi wystarczyć dwustopniowy filtr zbudowany na posiadanych wzmacniaczach. Nie pamiętam już nawet do czego miałem je zastosować lat temu naście ale myślę, że powinny się nadać TL084CN jako wejściowy i 2x MCP6004 jako filtry środkowe dla poszczególnych częstotliwości. Gdyby się jednak okazało że i to będzie mało to mam ich kilka sztuk więc nie będę żałował i tak leżały ponad dekadę to się w końcu na coś przydadzą 🙂

Aby rozwiać mgiełkę tajemnicy napiszę tylko, że ów tajemniczy sygnał to składowa przebiegów o różnych częstotliwościach generowanych przeze mnie a budowane urządzenie ma charakter edukacyjno-eksperymentalny tak więc czas zmarnowany być nie powinien ponieważ zdobyte doświadczenie może okazać się bezcenne 😃

BTW na porażkę skazani są ci, którym brakuje odwagi stawić czoła wyzwaniom 😉

Najlepiej niech każdemu podpowie jego własna kreatywność do czego to coś można praktycznie wykorzystać w końcu lądownik marsjański to to nie jest (a szkoda) 😉

Link do komentarza
Share on other sites

Niewiele z tego zrozumiałem. Chyba próbujesz być bardziej elokwentny niż ustawa przewiduje.

Przede wszystkim zacznijmy od podstaw. Do tego co chcesz zrobić potrzebujesz:

a. Układu wejściowego (wzmacniacza lub tłumika bo wciąż nie wiemy co jest źródłem sygnału, ale spoko początkujący tak mają gdy myślą że robią cuda na kiju, w ciągu dyskusji szybko im to przechodzi i gdy wreszcie coś napiszą konkretnego okazuje się, że ich wyobrażenie o realizacji było zwykle bez sensu) czyli czegoś co dopasuje sygnał ze źródła do wejścia ADC.

b. Filtra dolnoprzepustowego który wytnie wszystko co jest powyżej 0.5xFs. Skoro u Ciebie najszybszy sygnał to 20kHz to teoretycznie wystarczałoby próbkować 40kHz ale w praktyce 100kHz będzie niezłym wyborem właśnie z uwagi na trudność w skonstruowaniu dobrego filtra. Chyba najlepszym tu pomysłem byłby filtr z przełączanymi pojemnościami. Doskonałe filtry tego typu i pracujące w tych pasmach, 6- i 8-rzędu robi MAXIM. Pomyśl o tym. Wtedy wystarczyłaby Fs rzędu 60kHz.

c. Przetwornika A/C którego pasmo analogowe wystarcza do próbkowania Twojego sygnału a jego Fs jest wyższa niż ta którą wybrałeś.

d. Procesora który strumień danych wciągnie i obrobi.

Nie są tu potrzebne żadne inne filtry pasmowe itp rzeczy. Czy mógłbyś powoli i drukowanymi literami - jak jakiemuś tłukowi - opisać jak sobie wyobrażasz realizację swojego pomysłu? Bo albo wyważasz otwarte drzwi, albo błądzisz albo się nie rozumiemy.

Link do komentarza
Share on other sites

Wystrzeliłeś mnie na marsa bez lądownika.. nawet nie tyle ciętą ripostą i arbitrażem ale tym, że faktycznie masz sporo racji. Nawiasem mówiąc to w pewnym sensie nawet z tym kijem trafiłeś choć cudów się raczej nie spodziewam 🙂

Skoro już dysponuje takimi a nie innymi podzespołami postaram się wykorzystać to co mam na stanie żeby uniknąć dodatkowych kosztów. Pomijając nawet koszt, dla samej satysfakcji chciałem "to" zbudować jak najniższym kosztem.

Mam rozumieć, że z tych układów TL084CN i MCP6004 nie da sie zrobić odpowiedniego filtra? To chyba przecież konfiguracja wzmacniacza decyduje czy pracuje on jako dolno, górno czy środkowo przepustowy filtr cała reszta o jakości filtracji?Nie wliczając w to układów wysoko specjalizowanych. Popraw mnie jeśli się mylę.

Filtr nie musi być doskonały. Skoro mam do dyspozycji pełne 100kHz w ADC więc nic chyba nie stoi na przeszkodzie dla wykorzystania pełnej prędkości. Czytałem też gdzieś w necie że jeśli chce się odwzorować w miarę dokładnie przebieg za pomocą ADC to częstotliwość próbkowania powinna być co najmniej 4x większa od częstotliwości badanej więc i ten warunek jest spełniony i to z zapasem. Przy tym wszystkim zakres badany ma częstotliwość od 5kHz do 10kHz przy max 20kilka kHz nośnej więc przyszło mi do głowy, że filtracja nie musi być doskonała..

Teraz mam więcej wątpliwości niż entuzjazmu ...

ale jeśli uważasz że powinienem zmienić koncepcję względem filtracji to spierać się nie będę. Będzie miło jak doradzisz coś konkretnego.

Co do procesora, to chyba zgodzimy się że nawet attiny45 da sobie radę z przetwarzaniem i zapisywaniem wyników jesli nie na bieżąco to partiami.

//----------------------------------------------------------------

żeby była zupełna jasność:

/\_/\_/\_sygnał_/\_/\_/ ---> [wzmacniacz] ---> [filtr1] ---> [filtr2] ---> (ADC) ---> [uC] ---> [uART]

tak to sobie wyobraziłem 🙂

Dzięki za zainteresowanie i pozdrawiam.

Link do komentarza
Share on other sites

Nie wiem co znalazłeś "w necie", ale widzę, że nie mając kompletnie podstaw możesz stracić mnóstwo czasu a jedyną nauką będzie z tego "shit, chyba powinienem był przeczytać jakąś cegłę o DSP"..

Na obecnym etapie (czyli formułowania założeń co do sprzętu) kluczowe są odpowiedzi na następujące pytania:

1. Czy zjawisko które badasz jest ciągłe czy "chwilowe" tj czy procesor będzie musiał na bieżąco śledzić i przetwarzać sygnał (np. słuchanie sygnału z mikrofonu w celu wykrycia kroków może trwać w nieskończoność) czy też może w czasie próbkowania robić tylko to (plus zapamiętywanie kolejnych próbek) a po zakończonej akwizycji (być może spowodowanej zapełnieniem bufora w RAMie) będzie miał czas na obliczenia (np. analiza strzału z pistoletu wymaga złapania może 100ms dźwięku i koniec). Algorytmy DSP są bardzo "obliczeniochłonne" a ATmegi nie są absolutnie predystynowane do takich zadań. Zastanów się: to bardzo ważne. Próbkując na 100kHz będziesz miał tylko 10us na wszystko zanim przyjdzie następna próbka. A w tym czasie będziesz jeszcze musiał programowo obsłużyć SPI. Nawet przy 20MHz zegarze każde 16-bitowe mnożenie (a na tym opiera się DSP) będzie zajmowało mikrosekundę. Ile ich zdążysz zrobić? 5? Każdy sensowny filtr który miałby tu zastosowanie potrzebuje ich kilkadziesiąt... Natomiast jeżeli zjawisko jest chwilowe, musi się całe zmieścić w dostępnej pamięci RAM procesora. Ile przewidujesz RAMu? Ile próbek musisz zmieścić? Praca w tzw. czasie rzeczywistym lub nie - to fundamentalna różnica być może decydująca o realizowalności tego na danym sprzęcie.

2. Oczywiście możesz zrobić odpowiednie filtry na wzmacniaczach operacyjnych, ale znów diabeł ukryty jest w słowie odpowiednie. Póki nie wiemy co badasz i co chcesz uzyskać, bardzo ciężko powiedzieć czego potrzebujesz. To czego nie wiesz to nawet nie jest przedszkole przetwarzania sygnałów a projektowanie nie opiera się na "jakoś to będzie" albo "może zadziała albo nie". Na razie bazuję na tych 12-bitach o których napisałeś. To teoretycznie jest powyżej 70dB a to już naprawdę wymaga przyłożenia się. Będziesz musiał zrobić filtr dolnoprzepustowy który zaczyna ciąć przy 20kHz a przy 50kHz ma już tłumienie >70dB. I to dla przyjętej Fs=100kHz. To możliwe, ale na wzmacniaczach operacyjnych trudne: będzie wymagało raczej szybszych wzmacniaczy i precyzyjnych elementów. Filtr z przełączanymi pojemnościami to moim zdaniem jedyne rozsądne rozwiązanie. Inaczej będziesz dostawał "cienie" sygnałów (wyższych harmonicznych) wchodzące w Twoje pasmo audio w dziwnych miejscach (odbite od Fs).

Spróbuj założyć, że nie domyślimy się i nie ukradniemy Twojego superpomysłu. Opisz z czego składa się Twój sygnał i jakie cechy chcesz w nim wynajdywać. To od razu pokaże jaki nakład obliczeniowy będzie potrzebny i pozwoli szybko oszacować potrzebny sprzęt. Bez wymyślenia/poznania algorytmu przetwarzania będzie ciężko cokolwiek planować. A Ty sam za chwilę odbijesz się od bardzo paskudnej, betonowej ściany braku mocy obliczeniowej. ATtiny nie jest w stanie przetwarzać na bieżąco nawet sygnału z sejsmografu (pasmo 300Hz) więc proszę nie pisz takich głupot bo jeszcze ktoś to przeczyta i będzie wstyd.

Link do komentarza
Share on other sites

Może ja dołożę coś od siebie jeśli chodzi o samo DSP. Wg. mnie próbowanie analiz długotrwałych, szybko/wolnozmiennych na ATmedze jest ... bez sensu. Mało RAM, niskie taktowanie i inne, zupełnie nie przemawiające za tym procesorem cechy (np.niska rozdzielczość przetwornika ADC). Analiza w czasie rzeczywistym z zastosowaniem filtrów cyfrowych będzie ciężka do wykonania. Poza tym nawet po przetaktowaniu procka do tych 20 kHz jesteś w stanie uchwycić sygnał o częstotliwości max 10 kHz. Jeśli Ci to wystarczy to OK. Są sygnały, które nie wymagają wysokich częstotliwości ale skoro wspomniałeś o wyznaczaniu harmonicznych to już bym się zastanowił. W zastosowaniu niewielkiej liczby próbek (do 256), f < 10 kHz i algorytmów chociażby STFT (Short Time Fourier Transform), nie sądzę żebyś uzyskał dobry efekt. Procek będzie strasznie mozolny. W czasie rzeczywistym raczej niemożliwe do wykonania. Analiza jednego bloku zajmie 0,02 s. To dużo. Stosując okienkowanie, czas się zwiększa z każdym nałożeniem okna.

Już prędzej zastosowałbym do tego celu STM32 🙂 ale to tylko moja opinia.

Link do komentarza
Share on other sites

Nie chcę się z tobą spierać, nie kwestionuje twojej wiedzy i doświadczenia ale albo już walę głową w mur tylko jeszcze nie zdążyłem się zorientować albo niezupełnie się rozumiemy.

Jak widać z kontekstu moich wypowiedzi usilnie próbuję dostosować i sposób i nawet dokładność pomiaru do posiadanego sprzętu. Z tego co piszesz wynika, że jedyne co tu może nie zagrać to prędkość przetwarzania danych na bieżąco przez mc. Zdecydowanie lepiej by się do tego nadał stm32 ale takiego nie mam a atmegi mam więc robię co mogę z tego co mam (tak w głowie jak w szufladzie 😉 ). Przypuszczam, że może się nie wyrobić przy monitorowaniu na bieżąco, zgadzam się z tobą pod tym względem. Zakładam jednak, że zdąży próbkę zapisać w tym czasie do późniejszej analizy i tyle wystarczy, nie musi ich być milion a co najwyżej kilkanaście, kilkadziesiąt. Nie chodzi mi o budowe mikroskopu elektronowego tylko jak najprostszy moduł pomiarowy więc można sobie przy tym pozwolić na dowolne kompromisy. Nie rozumiem dlaczego zanegowałeś mój pomysł z zastosowaniem filtrów środkowo przepustowych. Myślę, że po wstępnej filtracji dolnoprzepustowej filtracja środkowa ma jak najbardziej sens.

Problemem może być jedynie trafić z serią pomiarów względnie dokładnie w ten "punkt" bo szczerze mówiąc na ten moment nie wiem jak to zsynchronizować. Jedyne co mi przychodzi do głowy to kombinatoryka typu PI x oko i to dopiero jak złożę prototyp do kupy jak przyjdzie list ze scalakami.

Upraszczając: chcę zarejestrować wycinek przebiegu konkretnej częstotliwości aby móc go później zaprezentować w formie wykresu.

Nie obawiam się, że mi coś ukradniecie bo jeśli dla kogokolwiek przedstawia to jakąś wartość to chyba tylko dla mnie i to edukacyjną i tak ma być z założenia, więc nawet jeśli się czegoś "domyślacie" to możecie być pewni, że nie mam się czego wstydzić 😃

p.s. możesz mi polecić jakąś "cegłę o DSP"? 😉

-> MAX7423EUA takie coś nada się?

Link do komentarza
Share on other sites

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...

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.