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

[Atmega8][C/AVRSTUDIO] Jak próbkować z niskimi częstotliwościami

goldblade 10 Mar 2012 18:55 1333 6
REKLAMA
  • #1 10659477
    goldblade
    Poziom 10  
    Witam kolegów,

    proszę o podpowiedź w następującej kwestii. Potrzebuję na Atmedze8 uzyskać częstotliwość próbkowania 250-300Hz, Data Sheet mówi, że max dzielnik częstotliwości próbkowania to 128x co przy taktowaniu 1Mhz daje coś koło 7k sampli/s.

    Jak zrealizować próbkowanie z niższymi częstotliwościami?

    Z góry dziękuję za wsparcie
  • REKLAMA
  • REKLAMA
  • #3 10659653
    tmf
    VIP Zasłużony dla elektroda
    goldblade napisał:
    Witam kolegów,
    Data Sheet mówi, że max dzielnik częstotliwości próbkowania to 128x co przy taktowaniu 1Mhz daje coś koło 7k sampli/s.

    Jak zrealizować próbkowanie z niższymi częstotliwościami?

    Z góry dziękuję za wsparcie


    Kolega Dondu już ci napisał jak problem rozwiązać, ja ci tylko zwrócę uwagę na błąd w twoich obliczeniach. Zegar po preskalerze ADC taktuje ten moduł, ale konwersja nie odbywa się w jednym takcie, tylko zajmuje o ile dobrze pamiętam 13/25 taktów. Wiec rzeczywista prędkość samplowania jest 13/25 razy mniejsza niż częstotliwość taktowania ADC.
  • REKLAMA
  • #4 10676335
    goldblade
    Poziom 10  
    Dziękuję za odpowiedzi.

    Wartości, które podałem były zgrubne i orientacyjne - nadal za duże wartości do moich zastosowań.

    Spróbuję z tymi timerami i przerwaniami.
  • REKLAMA
  • #5 10679632
    OldSkull
    Poziom 28  
    Jeśli masz dużo za duże próbkowanie (w sensie: większe niż potrzebne) to polecam jako wynik używać sumę pewnej ilości pomiarów. Zadziała to jak filtr, więc zwiększy się dokładność pomiarów, a częstotliwość uzyskiwania używanego później pomiaru będzie mniejsza.
  • #6 10679818
    kamyczek
    Poziom 38  
    Proszę zauważyć że czas pomiaru nie jest tym samym co częstotliwość pomiarów czy czas powtarzania pomiarów. Przy sygnałach zmiennych trzeba dążyć ,by pomiar był możliwie krótki i do tego służy dzielnik przetwornika . Częstotliwość pomiarów i start konwersji można zainicjować dowolnie wybranym zdarzeniem np przepełnieniem licznika czy przerwaniem zewnętrznym.
  • #7 10679967
    Ostry23
    Poziom 18  
    Oj coś koledzy krążycie wokół tematu a nie widzę nigdzie pełnej odpowiedzi.
    Niektóre są za to błędne albo upraszczające.

    F_CLK_ADC, to tak jak ktoś pisał, tylko częstotliwość taktowania ADC. A że jest to przetwornik typu SAR (z sukcesywną aproksymacją) to konwersja 1 próbki trwa n cykli zegara F_CLK_ADC.
    W przypadku tego ADC jest to:
    - 25 cykli dla pierwszej konwersji po włączeniu modułu ADC,
    - 13 cykli dla każdej kolejnej konwersji.

    I teraz tak. F_CLK_ADC jest tylko luźno powiązany z częstotliwością próbkowania. O tyle jest powiązany, że F_CLK_ADC ogranicza od góry maksymalną częstotliwość próbkowania. Natomiast od dołu nie ogranicza jej praktycznie nic.
    Max F_SAMPLE wynosi F_CLK_ADC / 13 i to tylko gdy wyzwolimy ADC w tryb "free running mode" i dla 1 kanału - wówczas ADC sam rozpoczyna kolejną konwersję bezpośrednio po zakończeniu poprzedniej. My mamy wtedy za zadanie zdążyć odczytać wynik konwersji i coś z tym wynikiem zrobić zanim skończy się kolejna konwersja

    A jeśli chcemy sami dokładnie ustalić inną częstotliwość próbkowania, to tak jak ktoś pisał, wyzwalamy konwersje w przerwaniu od Timera. Timer konfigurujemy np. na pracę w trybie CTC z pożądaną przez nas częstotliwością generowania przerwań (częstotliwość ta zależy od F_CPU, preskalera zegara, wartości rejestru COMPx - tak jest w przypadku zwykłych Atmeg)
    Warto tu minimalizować jitter, czyli dbać o to, żeby kolejne konwersje były wyzwalane w jak najdokładniej odmierzonych interwałach czasowych, co innymi słowy oznacza, że dokładny jest zegar samplowania.
    Żeby minimalizować jitter należy:
    - jeśli w przerwaniu, w którym wyzwalamy konwersje robimy też inne rzeczy, to wyzwolenie konwersji powinno być pierwszą instrukcją przerwania;
    - ISR pozostałych używanych przerwań powinny być możliwie krótkie, albo musimy zadbać, żeby nigdy nie wypadły nam w momencie występowania przerwania od naszego timera, coby nam nie opóźniały jego wykonania.

    W przypadku AVR XMEGA powyższego problemu z przerwaniami można uniknąć, bo do wyzwalania konwersji można użyć Event System. Wówczas bez względu na to, jak bardzo opóźnia nam się wejście w przerwanie od timera, konwersja ADC jest wyzwalana od razu w momencie ustawienia się flagi od timera.

    Dodano po 11 [minuty]:

    kamyczek napisał:
    Przy sygnałach zmiennych trzeba dążyć ,by pomiar był możliwie krótki i do tego służy dzielnik przetwornika

    Tutaj też jest pewien kompromis. Oczywiście, że w trakcie fazy samplowania sygnału (w układzie sample & hold) sygnał nie powinien znacząco zmieniać wartości, bo to ogranicza dokładność pomiaru.
    Ale jeśli sygnał zmienia swoją wartość w trakcie tej fazy, to znaczy tylko tyle, że wynikowa częstotliwość próbkowania jest już na pewno zbyt mała (a jest ona przecież co najmniej 13 razy mniejsza niż F_CLK_ADC).

    Z drugiej strony - jeśli F_CLK_ADC jest zbyt duża, to źródło sygnału może nie zdążyć poprawnie naładować pojemności Csample. Czas samplowania to np. w przypadku XMEGA 1/2 cyklu CLK_ADC. Nie wiem szczerze mówiąc jak jest w innych przetwornikach.

    Zależności są takie:
    - im większa impedancja wyjściowa źródła sygnału, tym dłuższy czas ładowania pojemności Csample
    - oczywista oczywistość ;) - im większa Csample tym dłuższy czas jej ładowania
    - im większa F_CLK_ADC tym mniej dokładne naładowanie Csample

    Dlatego jeśli nasz sygnał próbkujemy ze stosunkowo niską częstotliwością, to nie zawsze dobrze jest ustalać maksymalną możliwą F_CLK_ADC.

    A to na podparcie moich wywodów - co prawda noty dotyczą rodziny XMEGA, ale fizyka zjawiska jest taka sama :D :
    XMEGA A Manual - Figure 25-13, strona 297
    I jeszcze to:
    AVR1300: Using the Atmel AVR XMEGA ADC - punkt 3.8 i wykres na stronie 15.
REKLAMA