eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaGenerator sinusoidy od 0 do 400Hz na uCRe: Generator sinusoidy od 0 do 400Hz na uC
  • Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!new
    sfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
    From: Łukasz Góralczyk <l...@g...com>
    Newsgroups: pl.misc.elektronika
    Subject: Re: Generator sinusoidy od 0 do 400Hz na uC
    Date: Mon, 31 Aug 2009 22:43:02 +0000 (UTC)
    Organization: TP - http://www.tp.pl/
    Lines: 45
    Message-ID: <h7hjlm$bv4$1@nemesis.news.neostrada.pl>
    References: <h7han2$jcr$1@atlantis.news.neostrada.pl>
    NNTP-Posting-Host: ebh185.neoplus.adsl.tpnet.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    X-Trace: nemesis.news.neostrada.pl 1251758582 12260 83.22.197.185 (31 Aug 2009
    22:43:02 GMT)
    X-Complaints-To: u...@n...neostrada.pl
    NNTP-Posting-Date: Mon, 31 Aug 2009 22:43:02 +0000 (UTC)
    User-Agent: Pan/0.132 (Waxed in Black)
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:570108
    [ ukryj nagłówki ]

    On Mon, 31 Aug 2009 22:08:03 +0200, Robbo wrote:
    [ciach]
    > do 400Hz. Rozwa?am tu podej?cie polegaj?ce na stablicowaniu próbek
    > po?ówki sinusoidy i "wysy?aniu" ich na zewnetrzny przetwornik cyfrowo

    Wystarczy zrobić tablicę dla 1/4 i potem odpowiednio czytać wartości (w
    przód/w tył), ale jeśli pamięci w zapasie to można wrzucić 1/2.

    > -analogowy. Zrobi?bym funkcje, która by?aby przez "timer" wywo?ywana z
    > odpowiedni? czestotliwo?ci? (np. 400*256Hz dla czestotliwo?ci 400Hz i
    > przetwornika 8-bitowego).

    Chyba bardziej poprawnie "400 Hz * 256" dla 256 próbek :) .

    > Problem jednak z p?ynn? regulacj? czestotliwo?ci od 0 do 400Hz. Tzn.
    > wystarczy?aby mi rozdzielczo?ae 1Hz. Niemniej i tak operuj?c prescalerem
    > i OCR2 nie da sie uzyskaae wszystkich mo?liwych czestotliwo?ci. By?bym
    > wdzieczny za rade, jak rozwi?zaae ten problem.

    Hmm... ciężko. Przyszło mi do głowy żeby generować sinusoidę ze zmienną
    liczbą próbek na okres. Tę liczbę próbek tak dobierać aby pojedynczy
    kwant czasu był wielokrotnością możliwego kwantu uzyskiwanego z
    przerwania od timera. Np. dla 400 Hz i 100 próbek (na okres) musisz
    wysyłać próbkę co 25 us. Ustalasz sobie tick zegara na np. 2,5 us (4 MHz,
    8 MHz i prescaler na 2, itd.) i co dziesiąty tik timera wysyłasz próbkę
    (korzystając z trybu CTC). Dla 399 Hz dobieramy ilość próbek tak alby
    przerwanie generowało się co wielokrotność 2,5 us, np. dla 125 wychodzi
    że trzeba wystawiać próbkę co 20,05 us czyli co ok. 8 taktów zegara
    timera. Dla 398 Hz i 84 próbek generujesz przerwanie co 29,91 us ~= 30 us
    => 12 taktów zegara i tak dalej.
    Lepiej zastosować szybkie taktowanie procesora, powinno być więcej
    rezerwy, można zejść niżej z tym kwantem (dla 10 MHz masz cykl 0,1 us,
    czyli 20 us to 200 instrukcji /realnie ze 140/). Do policzenia optymalnej
    liczby próbek dla danego kwantu i częstotliwości lepiej użyć stacjonarny
    komputer i zrobić z tego tabelkę - obliczenia raczej proste ale sinus by
    się musiał wstrzymać na trochę. Przy tej metodzie zawsze będziesz miał
    jakąś odchyłkę od całkowitej liczby Hz (błąd łatwo policzyć). Przy
    wyższych częstotliwościach CPU będzie i czas na inne rzeczy (np. miganie
    diodą).

    Inne rozwiązanie to generator sterowany napięciem + precyzyjny
    przetwornik D/A - ładny sinus, łatwe sterowanie.

    --
    Łukasz.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: