Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

AD9833 i generator sinusa 100kHz na AVR.

ginar 27 Kwi 2008 23:44 5322 12
  • #1 27 Kwi 2008 23:44
    ginar
    Poziom 21  

    Witam
    1.Zabieram sie wlasnie za zbudowanie generatora na tym ukł., byłbym bardzo wdzięczny za udostępnienie jakichkolwiek info. na temat zaprogramowania tej kostki (przykładowy program w C )
    2.Czy na układzie at2313 (lub innym AVR ) da rade zbudować generator DDS
    sinusa 100kHz?

    Poprawiłem tytuł - Regulamin. [c_p]

    0 12
  • #2 28 Kwi 2008 08:03
    Ch.M.
    Poziom 27  

    1) AD9833 steruje się po SPI i wszystko masz opisane w datasheecie
    2) Owszem da się, ale przy zegarze 16MHz osiągniesz tylko ok. 6bitów rozdzielczości (70 kroków/próbkę) przy tak wysokiej częstotliwości.

    0
  • #3 28 Kwi 2008 16:14
    ginar
    Poziom 21  

    1. Po co sie stosuje WO na wyjsciu Ad9833, często takie schematy widzie w necie np. tutaj mAX w ukł. odwracajacym z dodatkowymi filtrami:
    AD9833 i generator sinusa 100kHz na AVR.
    skoro w data sheet (str.17) producent nie podaje takich scheamtów (czyżby chodziło o obciążalność).

    2. Czyli najlepiej ustalić tablice próbek np.256 i wszystkie zczytywac dla małych częstotliwosci, natomiast im wyzsze opuszczać co ileś próbek tak aby przy 100kHz zostało 64(zgodnie z tym jak kolega wyliczył 6 bitów) próbki do zczytywania.
    BTW w jaki sposób kolega obliczył te 70 próbek
    [fwy=fwe/ilość_próbek, =>ilośc próbek=fwe/fwy=16Mhz/100kHz=160 - tyle możne by podawać próbek gdyby procesor wystawiał każdą próbkę na przetwornik w czasie jednego cyklu zegara]

    0
  • #4 28 Kwi 2008 16:41
    lechoo
    Poziom 39  

    Przy syntezie DDS przecież wystarczą 4 próbki na okres dla f=max, czyli dla 100kHz wystarczy pobierać próbki z pamięci z częstotliwością 400kHz.

    0
  • #5 28 Kwi 2008 18:04
    ginar
    Poziom 21  

    4próbki na okres ? to sinusa nie będzie przypominało

    0
  • #6 29 Kwi 2008 10:39
    lechoo
    Poziom 39  

    ginar napisał:
    4próbki na okres ? to sinusa nie będzie przypominało

    Będzie - nie zapominaj o filtrze dolnoprzepustowym na wyjściu przetwornika!

    0
  • #7 29 Kwi 2008 18:21
    ginar
    Poziom 21  

    dla pełnej jasności-to ma tak wyglądać?:
    AD9833 i generator sinusa 100kHz na AVR. to już po podaniu tych próbek na przetw. C/A
    no i na końcu filtr

    0
  • #8 30 Kwi 2008 00:45
    lechoo
    Poziom 39  

    Dokładnie tak. Te 100kHz będzie stałe czy przestrajane w jakimś zakresie, jeśli tak to z jakim skokiem?
    Faktem jest, że im większy odstęp między częstotliwością próbkowania a wyjściową tym łatwiej jest odfiltrować taki sygnał - mniejsze są wymagania odnośnie filtrów.

    0
  • #9 30 Kwi 2008 07:10
    Ch.M.
    Poziom 27  

    Twoje f(we) nie możesz brać z prędkości procka, musisz doliczyć czas wykonywania komend, czyli: in R16, x (1 cykl) oraz out PORTy, R16(1 cykl). Czyli f(we)=1/2MCLK=8MHz. 64 próbki na okres to już coś przypominającego sinus wyjdzie. Ale 4 próbki to nieporozumienie :)

    0
  • #10 30 Kwi 2008 17:38
    lechoo
    Poziom 39  

    Ch.M. napisał:
    Ale 4 próbki to nieporozumienie :)

    Zapoznaj się proszę z załącznikiem - jest zupełnie inaczej niż może się nam wydawać "na chłopski rozum"...

    0
  • #11 30 Kwi 2008 21:08
    ginar
    Poziom 21  

    @Ch.M.
    planowałem napisać program w C na przerwaniach od liczniaka, także niestety te cykle pewnie sie wydłużą i właśnie teraz sie zastanawiam czy jest możliwe napisanie tego w czymś poza asemb.
    @lechoo
    w progr. przewidywałem zmianę generowanej czest. z minimalnym skokiem 1Hz (zmiana przyciskami ..setek, dziesiątek, jedności ).
    Zapoznam sie z zał. bo to co piszesz wydaje sie dośc nieprawdopodobne

    0
  • #12 30 Kwi 2008 22:32
    lechoo
    Poziom 39  

    Jeśli zniekształcenia sinusoidy na poziomie około 1% są akceptowalne, to zainteresuj się projektem minidds:
    -> http://www.myplace.nu/avr/minidds/index.htm
    Oczywiście zamiast drabinki R lepiej użyć scalonego przetwornika równoległego (ja używałem DAC0832 w podobnym projekcie) oraz koniecznie filtru FDP na wyjściu przetwornika, chociażby pasywnego LC.

    0
  • #13 11 Sty 2009 10:26
    mpx-fm
    Poziom 19  

    mam takie pytanie : CZY MOŻLIWA JEST SYNCHRONIZACJA wyjściowego sygnału SINUSOIDALNEGO z dwóch kostek AD9833
    chodzi o synchronizacje FAZY

    czy gdy użyje dwóch kostek AD9833 , połącze w nich wejścia FSYNCH
    a na wejscie zegarowe CLK drugiego AD9833 podam częstotliwość zegarową podzieloną przez 2 , to na wyjściu tego drugiego taktowanego otrzymam sinusoide zgodną w fazie z sinusoidą pierwszego AD9833 ?

    oba chę sterować z tego samego procka - ślącego do obu naraz to samo słowo sterujące! (i w zasadzie częstotliwości wyjściowe pozostaną stałe i niezmienne)

    potrzebuje uzyskać poprostu dwie zsynchronizowane wzajemnie sinusoidy ,
    jedna 19 KHz , druga 38KHz - zgodne w fazie

    więc - czy sygnały wyjściowe w tym przypadku będą zgodne w fazie ?
    a może musiał bym użyć dwóch AD9833 , sterowanych osobnymi procesorami , ale tym samym generatorem lub kwarcem i dostoić faze słowem sterującym zaszytym w procesorze od tego drugiego ?


    poprosze o komentarze
    nadmieniam że zależy mi jednak aby nie zapinać do tego dwóch procesorów
    a być może -ewentualne jeszce inaczej :
    gdybym skorzystał z AD9834 , który ma dodatkowe możliwości regulacji Fazy byłoby to wykonalne ?

    no i jeszce takie prozaiczne pytanie - czy słowo sterujące musi być słane do AD9833 cały czas ?
    czy po jednokrotnym wysłaniu procesor może przejść do stanu uśpienia , lub wykonywania zupełnie innych zadań ?



    przy okazji prosiłbym o jakieś namiary sterownika AD9834 , razem z wsadami i kodami żródłowymi ,jeśli ktoś gdzieś spotkał

    0