logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega32 - Czy można zwiększyć częstotliwość próbkowania do 200kHz?

andrzejlisek 20 Cze 2016 07:13 2295 5
  • #1 15755134
    andrzejlisek
    Poziom 31  
    Według dokumentacji, Atmega może być taktowana częstotliwością maksymalnie 16MHz i w tym przypadku może próbkować częstotliwością ok. 15kHz, co umożliwia zarejestrowanie sygnału ok. 7kHz (chodzi o bardzo krótki sygnał, góra 4096 próbek przy jednej rejestracji, graniczeniem jest wielkość pamięci wewnętrznej), wtedy odczytuje się pełne wartości 12-bitowe. Czytałem gdzieś, że jeżeli wystarczą 8-bitowe wartości (może nawet 7-bitowe), to można próbkować z częstotliwością 200kHz dobierając prescalery sterujące ADC i próbując dołączyć pamięć S-RAM o pojemności 16kB w celu chwilowego zapamiętania sygnału. Czy to jest prawda?

    Jeżeli nie AVR, to jaki mokrokontroler się nada do takich celów? Chodzi o zarejestrowanie sygnału z częstotliwością na przykład 100-150 o długości np. 1024 lub 2048, najdalej 4096 próbek, potem zakończyć rejestrowanie i wykonać dalsze czynności na tym sygnale.
  • #2 15755196
    Andrzej__S
    Poziom 28  
    andrzejlisek napisał:
    Czytałem gdzieś, że jeżeli wystarczą 8-bitowe wartości (może nawet 7-bitowe), to można próbkować z częstotliwością 200kHz

    Nie.
    Te 200kHz, o których piszesz prawdopodobnie pomyliłeś z maksymalną częstotliwością taktowania przetwornika dla pełnej rozdzielczości (10 bit). Biorąc pod uwagę, że czas pojedynczej konwersji to 13 taktów zegara taktującego przetwornik, maksymalna częstotliwość próbkowania to 200000/13=ok. 15ksps. Jeśli nie potrzebujesz pełnej rozdzielczości, możesz zwiększyć częstotliwość taktowania przetwornika (dla ATmega32 producent zaleca) maksymalnie do 1MHz, co daje maksymalną częstotliwość próbkowania 1000000/13=ok. 76,9ksps.

    andrzejlisek napisał:
    Jeżeli nie AVR, to jaki mokrokontroler się nada do takich celów?

    Może być AVR, tylko raczej XMEGA A (zgodnie z dokumentacją ma max. 2Msps) lub XMEGA B (max. 200ksps). Jest tam DMA, dzięki czemu być może nie będziesz musiał zatrzymywać samplowania na czas "dalszych czynności" (obliczeń?). Mikrokontrolery serii A3U mają do 16kb SRAM, więc być może nie będzie potrzebna pamięć zewnętrzna.

    andrzejlisek napisał:
    potem zakończyć rejestrowanie i wykonać dalsze czynności na tym sygnale.

    Do takich rzeczy to jednak raczej jakiś mikrokontroler DSP. Myślę, że powinieneś sprecyzować pojęcie "dalsze czynności na tym sygnale". Ja się nie znam zbytnio na DSP, ale może ktoś z lepiej znających temat się wypowie.
  • #3 15755227
    Konto nie istnieje
    Poziom 1  
  • #4 15755309
    andrzejlisek
    Poziom 31  
    Chciałbym wykonać prosty i tani analizator widma, jednak trochę lepszy niż skaczące słupki w rytm muzyki.

    16kb pamięci moim zdaniem wystarczy bez problemu.

    Pomysł mam taki, że analizator będzie pracować w następującym cyklu:
    1. Zarejestrowanie 4096 próbek sygnału z maksymalną szybkością i rozdzielczością 8-bit i zapamiętanie w pamięci
    2. Wyświetlenie ostatnio przeliczonego widma na oscyloskopie
    3. Przeliczenie widma za pomocą algorytmu FFT na podstawie zarejestrowanego sygnału
    4. Wyświetlenie widma na oscyloskopie

    Albo też jeden raz zarejestruje serię próbek i obliczy transformację i będzie tylko wyświetlał z możliwością powiększania lub przesłania do komputera za pomocą UART. Oczywiście liczba pobranych próbek i częstotliwość próbkowania mogłaby być zmienna.

    Bardziej traktuję to jako eksperyment, bo trudno przewidzieć, co z tego wyjdzie. Przy takim podejściu, maksymalna częstotliwość próbkowania determinuje teoretycznie maksymalną częstotliwość rejestrowanego sygnału, dlatego jest ważna duża prędkość próbkowania, im więcej dany mikrokontroler może, tym lepiej, ale częstotliwość 300 ksps już jest satysfakcjonująca jak na niewielkie koszty.

    Wyświetlenie sygnału to byłoby wysłanie impulsu wyzwalającego podstawę czasu i sterowanie wartościami na zestawie 8 pinów przez drabinę R2R tak, żeby na oscyloskopie otrzymać obliczone widmo.

    Algorytm FFT w języku C odpowiedni dla mikrokontrolerów już mam, sygnał po obróbce nie będzie dalej wyprowadzany.
  • #5 15755513
    Konto nie istnieje
    Poziom 1  
  • #6 15755808
    andrzejlisek
    Poziom 31  
    atom1477 napisał:
    FFT na 4096 próbkach na AVR?
    Sprawdzałeś czas wykonywania tej Twojej funkcji FFT?

    Nie sprawdzałem, jak to będzie niezmiernie długo, to się zmniejszy do 1024. Z tego powodu, że AVR jest stosunkowo wolny, domyślam się, że nie jest możliwa obserwacja na bieżąco, zaakceptuję, jak jedno przeliczenie trwa ok. 5 sekund. Tablica wartości sinus i cosinus może być wygenerowana jeden raz, potem tylko z niej korzystać.

    atom1477 napisał:
    Co do ADC w ATMega to kiedyś robiłem testy i można go przyspieszyć do kilkudziesięciu ksps bez znaczącego wzrostu szumów. Ja używałem np. ze 40kHz.

    Czyli jednym słowem, z AVR nie wyciągnie się więcej niż ok. 40-50kHz. Są tematy, w których udało się uruchomić AVR z prędkością 24MHz lub nawet 32MHz i twierdzi, że działa, ale nikt nie da gwarancji, że w takich warunkach wszystkie elementy działają poprawnie. Wygląda na to, że zwykły AVR po prostu nie nadaje się do takich celów, może jakaś XMega.

    atom1477 napisał:
    Na jakim oscyloskopie chcesz wyświetlać te różne informacje?

    Zwykły oscyloskop analogowy z lampą, teoretycznie będzie tak samo wyglądać na cyfrowym. Wykres będzie błyskać, ale jak da się zobaczyć widmo, to już jest sukces. Po prostu po wyzwoleniu podstawy czasu impulsem będą wyświetlane wartości poszczególnych próbek tworząc wykres funkcji o dowolnym kształcie.
REKLAMA