Sinusovka z obdelniku

jiri@bezstarosti.cz jiri@bezstarosti.cz
Středa Leden 5 16:40:15 CET 2005


Popisu jeden algoritmus ke generovani sinusovky, sice nic noveho (kdyz na
neco prijdu, vzdycky mam nejake to stoleti, minimalne desetileti, zpozdeni),
ale treba to nekdo nezna, i kdyz tady bych se skoro divil :).

Tedy mam tabulku, dejme tomu 64kB 8b cisel, ktera popisuji sinus hodnotami 0
az 255. Ukazatel ukazuje do teto tabulky a je 16b, tedy preteka dokola. Dale
mame nejakou vstupni hodnotu a tu pricitame k ukazateli a kam ukaze,
vyhazujeme hodnotu ven na DAC.

Tedy prikladem ukazatel stoji na 0, vyhodim obsah tabulky kam ukazuje ven, v
dalsim case prictu vstup, treba 120, ukazatel posunu o tech 120 a sup
hodnotu ven atd. Tim vypoustim ven sinus, kde jeho frekvence je dana vstupni
hodnotou, kterou pricitam a co vice, frekvence sinu je s hodnotami na vstupu
v prime umere, tedy cim vyssi hodnota na vstupu, tim vyssi frekvence sinu a
to naprosto linearne. Sinus je pak popsan cim je vyssi frekvence, tim mensim
poctem vzorku na periodu, ale je stale stejna vzorkovaci frekvence.
Predstavme si, ze kmitocet brani vzorku z tabulky je 10MHz, pak pro 100kHz
sinusovku mame k dispozici 100 vzorku na periodu sinu.

Reseni z toho co se koupi v kazde dobre drogerii je CPLD + FLASH. CPLD
nataktuji nejakou vyssi frekvenci, udelam mu paralelni vstup hodnoty k
pricitani, treba se zachytnym registrem a strobovanim a prenosem 2x po 8b
(vyssi, nizsi bajt) atp., tedy jako DATA + ADDR + /WR, at to mohu povesit
nekam na sbernici. No a z CPLD vede adresovka na FLASH s tabulkou vzorku, za
FLASH je DAC (s kusem zachytneho registru) na datovych dratech a CPLD do DAC
(do zachytneho registru) provadi zapisy jednim dratem. 10M vzorku/sec. bych
z te FLASH vymacknout mohl.

Rozsah frekvenci je dost znacny, tedy v tomto konkretnim pripade bude od 0Hz
v kroku zhruba 152.6Hz po nejakych dejme tomu 500kHz, kde jeste stale budeme
mit alespon 20 vzorku na periodu. No a filtr za tim celym musi resit jen tu
vysokou vzorkovaci frekvenci, tedy resit zakulaceni toho schodoviteho sinu,
ale to uz neni az takovy des, kdyz vzorkovani je na 10MHz a propustit mame
maximalne 500kHz.

Je naprosto jasne, ze specializovany obvod tohle vsechno vyresi a bude to i
malinke, ale zdalo se mi fajn trochu osvetlit tento princip generovani sinu
(nebo i jineho periodickeho prubehu).

--
Jiri Bezstarosti



Další informace o konferenci Hw-list