-
1. Data: 2010-03-18 19:02:09
Temat: DDS, prośba o wyjaśnienie
Od: "Robbo" <n...@y...com>
Witam,
Przeczytałem zasadę działania DDS i wydaje
mi się, że wszystko zrozumiałem.
Potem znalazłem opis pewnego projektu
http://www.scienceprog.com/avr-dds-signal-generator-
v20/
i 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
-
2. Data: 2010-03-18 19:11:17
Temat: Re: DDS, pro?ba o wyja?nienie
Od: BartekK <s...@N...org>
W dniu 2010-03-18 20:02, Robbo pisze:
> Przeczyta?em zasad? dzia?ania DDS i wydaje
> mi si?, ?e wszystko zrozumia?em.
> Potem znalaz?em opis pewnego projektu
> http://www.scienceprog.com/avr-dds-signal-generator-
v20/
> i nie rozumiem, w jaki spos?b autor
> uzyskuje cz?stotliwo?? od 1 do 65kHz,
> a ma stablicowane tylko 256 pr?bek sinusa.
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.
--
| Bartlomiej Kuzniewski
| s...@d...org GG:23319 tel +48 696455098 http://drut.org/
| http://www.allegro.pl/show_user_auctions.php?uid=338
173
-
3. Data: 2010-03-18 19:31:11
Temat: Re: DDS, pro?ba o wyja?nienie
Od: "Robbo" <n...@y...com>
Nie wiem, czy się rozumiemy, a mi zależy,
żeby dobrze zrozumieć DDS i wymieniony projekt
generatora.
Załóżmy, że dla 1Hz układ "wypluwa"
na wyjście po kolei 256 próbek.
Dla częstotliwości 2Hz korzysta już tylko
z połowy próbek -- "wypluwa" co drugą
próbkę. Przy 256Hz wypluwa już tylko jedną próbkę
na okres.
Nie rozumiem, jak może dojść do 65kHz i mieć
na wyjściu sinusoidę.
Będę wdzięczny za wyjaśnienie. Z góry dzięki.
Robbo
-
4. Data: 2010-03-18 20:17:20
Temat: Re: DDS, pro?ba o wyja?nienie
Od: Sebastian Biały <h...@p...onet.pl>
Robbo wrote:
> i nie rozumiem, w jaki sposób autor
> uzyskuje czestotliwo?ae od 1 do 65kHz,
> a ma stablicowane tylko 256 próbek sinusa.
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:
http://www.myplace.nu/avr/minidds/index.htm
Główna pętla DDS jest tak mala, że łatwo pojąć nawet bez znajomosci
asemblera.
-
5. Data: 2010-03-18 20:41:43
Temat: Re: DDS, pro?ba o wyja?nienie
Od: BartekK <s...@N...org>
W dniu 2010-03-18 20:31, Robbo pisze:
> Nie wiem, czy si? rozumiemy, a mi zale?y,
> ?eby dobrze zrozumie? DDS i wymieniony projekt
> generatora.
> Za??my, ?e dla 1Hz uk?ad "wypluwa"
> na wyj?cie po kolei 256 pr?bek.
> Dla cz?stotliwo?ci 2Hz korzysta ju? tylko
> z po?owy pr?bek -- "wypluwa" co drug?
> pr?bk?. Przy 256Hz wypluwa ju? tylko jedn? pr?bk?
> na okres.
> Nie rozumiem, jak mo?e doj?? do 65kHz i mie?
> na wyj?ciu sinusoid?.
> B?d? wdzi?czny za wyja?nienie. Z g?ry dzi?ki.
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)
--
| Bartlomiej Kuzniewski
| s...@d...org GG:23319 tel +48 696455098 http://drut.org/
| http://www.allegro.pl/show_user_auctions.php?uid=338
173
-
6. Data: 2010-03-18 20:51:07
Temat: Re: DDS, pro?ba o wyja?nienie
Od: "Robbo" <n...@y...com>
Dzięki za odpowiedź.
> 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.
Jeśli dobrze zrozumiałem...
Jeśli B jest relatywnie niewielkie, to trzeba wielu obiegów pętli,
żeby najstarsze osiem bitów A zmieniło swoją wartość o jeden. W ten sposób
przez wiele obiegów pętli na wyjściu uC utrzymuje się ta sama stablicowana
próbka sinusa. Zatem mamy tu jakgdyby do czynienia z rozciąganiem.
Jeśli B jest tak dobrane, że każdy obieg pętli powoduje, że te najstarsze
osiem bitów A zwiększa się o jeden, to co obieg pętli mamy na wyjściu uC
kolejne stablicowane próbki sinusa.
Jeśli B jest na tyle duże, że każdy obieg pętli powoduje, że te najstarsze
osiem bitów A zwiększa się o więcej niż jeden, to niektóre stablicowane
próbki sinusa są omijane; np. jeśli co obieg pętli wartość ośmiu
najstarszych
bitów zwiększa się o 2, to ma wyjściu uC mamy co drugą próbkę.
> Zerknij sobie tutaj:
>
> http://www.myplace.nu/avr/minidds/index.htm
>
> Główna pętla DDS jest tak mala, że łatwo pojąć nawet bez znajomosci
> asemblera.
Widziałem to. Czytałem w dokumentacji Atmela o znaczeniu
mnemonika "lpm", ale nie udało mi się ustalić, skąd czerpie on informację,
spod jakiego adresu ma pobrać bajt w sytuacji, gdy nie stoją po
nim żadne argumenty.
Robbo
-
7. Data: 2010-03-18 20:55:24
Temat: Re: DDS, pro?ba o wyja?nienie
Od: Sebastian Biały <h...@p...onet.pl>
Robbo wrote:
> Je?li dobrze zrozumia?em...
Mniej więcej dobrze.
>>http://www.myplace.nu/avr/minidds/index.htm
>>G?ówna petla DDS jest tak mala, ?e ?atwo poj?ae nawet bez znajomosci
>>asemblera.
> Widzia?em to. Czyta?em w dokumentacji Atmela o znaczeniu
> mnemonika "lpm", ale nie uda?o mi sie ustaliae, sk?d czerpie on informacje,
Z adresu pamieci wskazywanego przez Z.
Poczytaj tutaj:
http://www.avr-asm-tutorial.net/avr_en/beginner/REGI
STER.html
-
8. Data: 2010-03-18 21:09:49
Temat: Re: DDS, pro?ba o wyja?nienie
Od: J.F. <j...@p...onet.pl>
On Thu, 18 Mar 2010 20:31:11 +0100, Robbo wrote:
>Nie wiem, czy się rozumiemy, a mi zależy,
>żeby dobrze zrozumieć DDS i wymieniony projekt
>generatora.
> Załóżmy, że dla 1Hz układ "wypluwa"
>na wyjście po kolei 256 próbek.
>Dla częstotliwości 2Hz korzysta już tylko
>z połowy próbek -- "wypluwa" co drugą
>próbkę.
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.
>Nie rozumiem, jak może dojść do 65kHz i mieć
>na wyjściu sinusoidę.
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.
-
9. Data: 2010-03-18 21:24:14
Temat: Re: DDS, pro?ba o wyja?nienie
Od: "Robbo" <n...@y...com>
No to dobrze wiedzieć, jak działa DDS.
Czyli cała kwestia rozbija się o to, że
z akumulatora odczytujemy tylko pewną
liczbę najstarszych bitów. W ten sposób
przez kilka kolejnych cykli pracy układu
może pojawić się próbka sinusa spod tego
samego adresu w pamięci.
Natomiast, jeśli zwiększamy rejestr o odpowiednio
dużą wartość (tak aby co cykl pracy najstarsze
brane pod uwagę bity akumulatora zmieniały
swoją wartość), to dopiero wtedy na wyjściu
pojawia się co któraś stablicowana próbka.
Zmyliły mnie opisy DDS-ów, które
znalazłem (a było ich trzy). Tam wszędzie
była mowa o tym, że odczytuje się cały
akumulator (a nie np. najstarsze bity).
Tylko w jednym z opisów znalazłem informację,
że można sobie akumulator rozszerzyć
o część ułamkową (czyli mniej więcej to samo,
co mamy odczytując tylko najstarsze bity).
Robbo
-
10. Data: 2010-03-18 23:51:05
Temat: Re: DDS, pro?ba o wyja?nienie
Od: shg <s...@g...com>
On 18 Mar, 21:41, BartekK <s...@N...org> wrote:
> W dniu 2010-03-18 20:31, Robbo pisze:> Nie wiem, czy si rozumiemy, a mi zale y,
> > eby dobrze zrozumie DDS i wymieniony projekt
> > generatora.
> > Za my, e dla 1Hz uk ad "wypluwa"
> > na wyj cie po kolei 256 pr bek.
> > Dla cz stotliwo ci 2Hz korzysta ju tylko
> > z po owy pr bek -- "wypluwa" co drug
> > pr bk . Przy 256Hz wypluwa ju tylko jedn pr bk
> > na okres.
> > Nie rozumiem, jak mo e doj do 65kHz i mie
> > na wyj ciu sinusoid .
> > B d wdzi czny za wyja nienie. Z g ry dzi ki.
>
> 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)
>
> --
> | Bartlomiej Kuzniewski
> | s...@d...org GG:23319 tel +48 696455098 http://drut.org/
> |http://www.allegro.pl/show_user_auctions.php?uid=33
8173
Obawiam się, że to jednak Ty nie rozumiuesz zasady działania DDS.
Robbo dobrze napisał, DDS ma stałą częstotliwość próbkowania, a
zmienny jest krok (inkrement) fazy, z tym że podany przykład dotyczył
akurat próbkowania z czestotliwością 256 Hz, żeby uzyskać wyższą
częstotliwość trzeba oczywiście z wyższą częstotliwością próbkować.