DDS, prośba o wyjaśnienie

Witam,

Przeczytałem zasadę działania DDS i wydaje mi się, że wszystko zrozumiałem. Potem znalazłem opis pewnego projektu

formatting link
nie rozumiem, w jaki sposób autor uzyskuje częstotliwość od 1 do 65kHz, a ma stablicowane tylko 256 próbek sinusa. Będę wdzięczny za wyjaśnienie.

Z góry dziękuję.

Robbo

Reply to
Robbo
Loading thread data ...

W dniu 2010-03-18 20:02, Robbo pisze:

No to widocznie nie zrozumiałeś. Zakres częstotliwości uzyskuje się wybierając "prędkość odtwarzania" tych próbek. Próbki zawierają tylko wartości chwilowe. Łatwiej może byś zrozumiał gdyby autor miał 360 próbek skatalogowanych, i dla sinusa ustawiał co 1stopień kolejną próbkę z tabeli. A jak szybko stopnie się zmieniają - do tego zależy częstotliwość, jeśli będziesz zmieniał stopnie (numery próbek z tabeli) z częstotliwością (prędkością)

1/360s to cały sinus wymalujesz w czasie 360/360=1s czyli uzyskasz 1Hz. Oczywiście nie ma sensu przechowywać 360próbek, bo w układzie cyfrowym po pierwsze łatwiej się liczy do pełnych potęg dwójki, a w dodatku skoro "góra i dół" sinusa (0-180st i 180-360) są takie same tylko odwrócone co do znaku. I nie ma sensu przechowywać całego kawałka 0-180st, skoro 90-180st jest taki sam jak 0-90 tylko odtwarzany od tyłu. Dzięki temu odcinek 0-90st zapisujesz "niby tylko" na 256próbkach, tylko te próbki odtwarzasz z odpowiednią kolejnością i ze znakiem, a to przekłada się na 1024 próbki na całego sinusa, całkiem ładny przebieg dając.
Reply to
BartekK

Masz licznik o wielkiej pojemnosci A.

Masz stałą o niewielkiej wartości B

Dodajesz w ciasnej pętli B do A bez przerwy.

Bierzesz najstarsze osiem bitów z A i to jest indeks w tablicy twojego sinusa. Dzieki temu ze A się czasem przepelnia bezustannie przechodzisz przez swoje 256 próbek sinusa.

Sinus na wyjsciu układu bedzie nie lepszy niż 256 próbek sinsua, a jesli B stanie się niebezpiecznie wysokie - może byc gorszy, bedziesz wtedy przeskakiwał próbki z tablicy.

Zerknij sobie tutaj:

formatting link
Główna pętla DDS jest tak mala, że łatwo pojąć nawet bez znajomosci asemblera.

Reply to
Sebastian Biały

W dniu 2010-03-18 20:31, Robbo pisze:

Wszystko źle :) Dla 1Hz układ wypluwa po kolei 256 próbek, w odstępach 1/256sekundy. Dla 2Hz układ wypluwa po kolei 256 próbek, w odstępach 1/512sekundy. Dla 256Hz układ wypluwa po kolei 256 próbek, w odstępach 1/(256*f[HZ]) itd. Dla 65kHz (65000Hz) układ wypluwa po kolei 256 próbek, w odstępach

1/16640000 sekundy czyli z prędkością 16,64 MHz (coś wysoko, Atmega by musiała być taktowana z 32MHz, by "co takt" mogła zmieniać wartość na porcie)
Reply to
BartekK

Mniej więcej dobrze.

Z adresu pamieci wskazywanego przez Z.

Poczytaj tutaj:

formatting link

Reply to
Sebastian Biały

Nie chce mi sie przez ten kod przebijac - ale DDS dziala inaczej. "wypluwa" probki bardzo czesto - w tym przypadku tak czesto jak sie procesor wyrobi, powiedzmy 1MHz, czy jak kto woli co 1us.

Za kazdym razem oblicza jaka ma byc wartosc probki. Jesli syntezuje 1Hz - to bardzo czesto nowa probka bedzie taka sama jak stara. Trudno zreszta zeby bylo inaczej jesli mamy do dyspozycji tylko 8-bitowy DAC.

Jesli syntezuje 65kHz, to co 1us przeskakuje o wiecej bitow i probek.

A jak oblicza? Dosc prosto.

Mamy np 32 bitowy rejestr, zwany dalej "faza". Traktujemy go tak ze on odpowiada pelnemu "obrotowi" czy jak kto woli okresowi, czyli jedna jednostka odpowiada 360/2^32 stopnia.

Co chwila dodajemy do tego rejestru "skok". Jesli chcemy wygenerowac

1Hz przy cyklu 1MHz/1us, to w ciagu miliona cykli rejestr fazy powinien sie "przekrecic". Skok powinien wiec wynosic 2^32/1000000 = 4294.967296

Ulamkowej liczby dodawac nie damy rady, bedziemy wiec dodawac np 4295, uzyskujac czestotliwosc 1.0000076.. Hz. Ta odchylka sie nie przejmujemy, albo dobieramy lepiej parametry.

Teraz skupmy sie na najstarszym bajcie rejestru fazy - on tez podaje faze, tylko z rozdzielczoscia 360/256 stopnia.. Moze wprost wybierac wartosc probki z tablicy sinusa. Albo trojkata.

Poniewaz ten bajt zmienia sie po dodaniu ok 16.7 mln do rejestru fazy, w naszym przykladzie bedzie sie zmienial co ok 3906.2 cykli zegara.

Jesli chcemy generowac 2Hz, dodajemy co cykl 8590, i probka zmienia sie co ~1853 cykle.

A przy 65000Hz, co cykl dodajemy 279 172 874, czyli za kazdym razem przestakujemy ok co 1us przeskakujemy co ok 17 probek w tablicy.

Jak sie dokladnie przyjrzec na cyfrowym oscyloskopie, to szemrana ta sinusoida :-)

Ale w AD twierdza ze wystarczaja im nawet 3 probki na okres :-)

Duzo zalezy czy mozemy sobie pozwolic na filtr dolnoprzepustowy.

J.

Reply to
J.F.

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.