Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Generator DDS na FPGA

leonow32 15 Feb 2013 19:35 19638 25
  • Generator DDS na FPGA

    To moja trzecia konstrukcja na FPGA ;) pierwszy był trywialny zegarek na kilku licznikach, a potem prosty kalkulatorek dodający dwie liczby. Tak więc proszę o konstruktywną krytykę i porady, co by tu można jeszcze ulepszyć. FPGA ciekawi mnie już od jakiegoś czasu, ze względu na to, że można na nim zrobić rzeczy, przy których procesory wymiękają. Prezentowany tutaj generator zużywa zaledwie 1/4 zasobów MachXO2-1200 i umożliwia cyfrowe wygenerowanie sinusa o częstotliwości 16,5MHz. Przy okazji skopiowałem artykuł z mojej strony na temat "DDS - co to jest?" dla osób niezorientowanych w tej tematyce.

    ----------

    Na początek chciałbym przedstawić mało w Polsce znany układ FPGA od Lattice. Jest to nowoczesny układ MachXO2. W przeciwieństwie do typowych FPGA jest on wyposażony w pamięć stałą, więc nie ma potrzeby stosowania dodatkowych (drogich!) pamięci konfiguracyjnych, zewnętrznych pamięci flash ani nic w tym stylu. Po włączeniu zasilania od razu działa. Oprócz tego jest też generator sygnału zegarowego, interfejsy szeregowe, pamięci oraz cała masa innych ciekawych rzeczy.

    Generator DDS na FPGA Generator DDS na FPGA

    Dostępna jest płytka testowa MachXO2 Pico Board, zawierająca układ MachXO2-1200, cztery przyciski dotykowe, wyświetlacz LCD, parę innych gadżetów, a przede wszystkim programator na USB oparty o scalak FTDI FT2232HL. Są w nim dwie przejściówki z USB: pierwsza na interfejs JTAG i służy do programowania, a drugą można wykorzystać do własnych celów, np. jako UART.

    Pola dotykowe są fajne, ale mimo to stwierdziłem, że dolutuję zwykłe przyciski microswitch, bo są po prostu wygodniejsze do celów testowych. Ich obsługa zajmuje zdecydowanie mniej zasobów logicznych FPGA.

    Do płytki dołączyłem prosty przetwornik R-2R złożony z szeregu rezystorów. Umożliwia przekształcenie sygnału cyfrowego 8-bitowego na sygnał analogowy. Przetwornik jest najprostszy z możliwych, nie ma nawet wzmacniacza na wyjściu.

    Generator DDS na FPGA Generator DDS na FPGA

    Jak działa synteza DDS?

    DDS oznacza Direct Digital Synthesis czyli bezpośrednią syntezę cyfrową. Jedyne elementy analogowe w DDS to przetwornik cyfrowo-analogowy (co oczywiste) oraz ewentualnie jakiś wzmacniacz wyjściowy. Wszystkie elementy cyfrowe można schować do FPGA, dzięki czemu generator staje się bardzo prosty i łatwo go zmodyfikować, jeśli będzie taka potrzeba. Zaletą jest to, że można wygenerować zupełnie dowolny przebieg i nie jesteśmy tu ograniczeni do szablonowego sinusa, trójkąta i prostokąta.

    Najprostszy generator DDS składa się ze źródła sygnału zegarowego, który kierujemy do licznika. Licznik ma wyjście 8-bitowe (w tym przykładzie!), które dalej prowadzimy do wejścia adresowego pamięci ROM. 8 bitów adresu daje nam 256 komórek pamięci, w których zapisana jest tablica poszczególnych wartości funkcji. Można ją wygenerować nawet w Excelu. Wyjście z pamięci (dla przykładu niech też będzie 8-bitowe) kierujemy do przetwornika cyfrowo-analogowego, który przekształca sygnał cyfrowy na napięcie, mogące przybrać 1 z 256 wartości.

    Generator DDS na FPGA

    Takie rozwiązanie ma dwie wady - chcąc zmienić częstotliwość musimy zmienić źródło zegarowe. Nie ma także możliwości regulowania amplitudy. Pierwszą wadę spróbujemy rozwiązać w przykładzie poniżej.

    Regulacja częstotliwości

    Pomiędzy źródło sygnału zegarowego a licznik dodajemy regulowany dzielnik częstotliwości. Jest to kolejny licznik, z tą różnicą, że nie musi liczyć do swojej maksymalnej wartości i można skrócić okres zliczania. Można w ten sposób zrobić regulowany dzielnik, o stopniu podziału od 2 do 256 w przypadku licznika 8-bitowego.

    Generator DDS na FPGA

    Czy to jest rozwiązanie optymalne? Jeszcze nie... Jest pewien dość istotny problem - jaka jest maksymalna częstotliwość sygnału wyjściowego z naszego generatora? Załóżmy, że na wejściu mamy 100MHz (sporo, ale MachXO2 może się rozpędzić do większych prędkości). Po przejściu przez pierwszy dzielnik dostajemy max 50MHz. Licznik adresu jest 8-bitowy, a więc dzieli sygnał przez 256, ponieważ tyle próbek przypada na jeden okres sygnału wyjściowego. Zatem otrzymujemy niecałe 0,2MHz... Ale lipa! Ze 100MHz zrobiło się 0,2MHz. Klęska totalna!

    Zwiększanie częstotliwości wejściowej nie jest dobrym pomysłem - elementy elektroniczne mają pewne ograniczenia, których się nie przeskoczy. Musimy zatem problem obejść dookoła. W naszym przykładzie, na jeden pełny okres przypada 256 próbek. A gdybyśmy trochę popuścili na jakości i odczytywali co drugą próbkę? Wtedy częstotliwość sygnału wyjściowego skoczy do 0,4MHz. A jeśli co czwartą - 0,8MHz. Gdyby na okres przypadało tylko 8 próbek to już mamy 6,25MHz. Musimy także zrezygnować z regulowanego dzielnika częstotliwości, bo wprowadza nam podział przez minimum 2, a bez niego rozpędzimy się do 12,5MHz.

    Ciekawym rozwiązaniem jest licznik z akumulatorem fazy - składa się on z licznika, który z każdym zboczem zegara zwiększa swoją wartość o liczbę z rejestru, przechowującego słowo przestrajające (tuning word). Jeśli w tym rejestrze jest 1, to licznik zlicza co 1. Jeśli 2, to wtedy wartość licznika przeskakuje od razu co 2. Proste!

    Generator DDS na FPGA

    Kolejna wada? Regulacja częstotliwości nie będzie płynna. Przy wysokich częstotliwościach, niewielkie zmiany rejestru przestrajającego będą dość gwałtownie zmieniać częstotliwość wyjściowego sygnału. Poza tym, tracimy na jakości sygnału poprzez wycinanie próbek. I na ten problem można znaleźć rozwiązanie. Licznik akumulatora ma długość znacznie większą niż szyna adresowa ROM. Wykorzystujemy wtedy najstarsze bity licznika, a młodsze ignorujemy.

    Regulacja amplitudy

    Dość już o regulowaniu częstotliwości, ale jak zmienić amplitudę w sposób cyfrowy? Można do tego użyć układu mnożącego! Najpierw krótko o mnożeniu - jeśli pomnożymy przez siebie dwie liczby x-bitowe, to otrzymamy liczbę 2x-bitową. Po ludzku, mnożąc dwie liczby 8-bitowe, wynik należałoby zapisać w zmiennej 16-bitowej. Jednak przetwornik jest 8-bitowy. Zatem wykorzystamy tylko 8 najstarszych bitów, a pozostałe 8 odrzucimy. Taka operacja jest równoznaczna z podzieleniem wyniku przez 256. Dzielenie przez liczbę, będącą potęgą dwójki polega na odrzucaniu najmłodszych bitów - jest prostsze nawet niż dodawanie!

    Generator DDS na FPGA

    Przykład - wartość sygnału wynosi 100. W mnożniku mamy zapisaną wartość 128. Dostajemy zatem 12800. Dalej, dzielimy to co wyszło przez 256. Dostajemy 50. Wniosek? Mnożnik możemy traktować jako ułamek - w tym przykładzie przemnożyliśmy sygnał przez 128/256 czyli przez 1/2 i w wyniku uzyskaliśmy sygnał o takim samym kształcie, ale o dwukrotnie mniejszej amplitudzie.

    Różne sygnały

    Zaletą generator DDS jest możliwość generowania absolutnie dowolnego przebiegu. Wystarczy tylko zmienić zawartość pamięci ROM. Można także przygotować kilka pamięci i jedynie wybierać, z której pamięci chcemy pobrać sygnał. Do tego celu potrzebujemy prostego multipleksera, czyli elektronicznej zwrotnicy. Multiplekser w przykładzie ma 6 wejść 8-bitowych oraz jedno 3-bitowe wejście sterujące. Dlaczego 3-bitowe? 2 do potęgi 3 daje 8, zatem multiplekser mógłby być nawet 8-wejściowy.

    Generator DDS na FPGA

    Dalsze usprawnienia

    Tematyka generatorów DDS i cyfrowego przetwarzania sygnałów jest bardzo szeroka. Napisano o tym grube książki i niejeden student został zamęczony ciężką teorią :) Tak czy inaczej, można by bez większego wysiłku wykonać jeszcze kilka prostych modyfikacji.

    :arrow: Usunąć ROM dla prostokąta i trójkąta - są to sygnały tak proste do uzyskania, że przechowywanie ich w osobnych pamięciach nie ma sensu. Prostokąt można uzyskać z najstarszego bitu licznika adresu. Sygnał piłokształtny uzyskamy z 8 najstarszych bitów licznika adresowego. Podobnie można uzyskać trójkąt - jeśli najstarszy bit licznika jest wyzerowany, to bierzemy 8 najstarszych bitów (pomijając ten pierwszy, czyli od drugiego do dziewiątego licząc od lewej), a jeśli najstarszy bit ma wartość 1, to wtedy wykorzystujemy te same bity co wcześniej, ale zanegowane.
    :arrow: Zwiększyć rozdzielczość próbek - we wszystkich przykładach próbki miały rozdzielczość 8-bitową. Nic nie stoi na przeszkodzie, by do pamięci wgrać tablice np. 10-bitowe lub więcej. Jedynie wtedy należałoby zmienić przetwornik cyfrowo-analogowy na lepszy. Można by też zwiększyć ilość próbek. W tym artykule tablice składają się z 256 próbek na okres. MachXO2-1200 posiada 7 bloków pamięci po 9kbit, więc jest jej pod dostatkiem i można by zaimplementować dużo dokładniejsze tablice z próbkami.
    :arrow: Rekonstrukcja sygnałów - nie można jednak zwiększać tablic pamięci w nieskończoność. Można użyć sztuczek matematycznych, aby "rozmnożyć" próbki metodą interpolacji albo sinc.
    :arrow: Wygodny interfejs użytkownika - wiadomo :) Płytka testowa MachXO2 Pico Board ma zaledwie 5 przycisków i prosty wyświetlacz 4-cyfrowy. Dysponując tak skromnymi środkami trudno zrobić wygodny interfejs.

    Implementacja w MachXO2

    W projekcie wykorzystałem wbudowany generator RC. Stabilność generatora jest nieduża, co powoduje różne zniekształcenia i "pływanie" wykresu na oscyloskopie przy wyższych częstotliwościach, ale trudno, chodziło tu o zastosowanie edukacyjne generatora. Jego częstotliwość ustawiłem na 66,5MHz. Następnie, wykorzystano PLL, który podbija częstotliwość do 133MHz i ten sygnał został użyty do syntezy DDS. Oprócz tego PLL ma drugiej wyjście, z którego użyłem do wygenerowania sygnału 2MHz dla elementów sterujących i kontrolnych (wyświetlacz, klawisze, ustawianie częstotliwości i amplitudy).

    Tablice wartości funkcji są zapisane w blokach pamięci EBR. Przydatny okazał się IPexpress ze środowiska Diamond, dzięki czemu wykorzystanie peryferiów FPGA jest niezwykle łatwe. Każda tablica składa się z 256 słów 8-bitowych. Zostały wygenerowane w Excelu :)

    Akumulator jest 16-bitowy, a słowo przestrajające jest 8-bitowe. Do adresowania pamięci wykorzystuję 8 najstarszych bitów akumulatora. Mnożarka została wygenerowana również przy pomocy IPexpress. Początkowo mnożarka byłą zsynchronizowana z zegarem, jednak projekt kompilował się bardzo długo. Po zmianie układu mnożącego na asynchroniczny, kompilacja projektu idzie zdecydowanie szybciej.

    Rejestry "tuning word", "selektor" i "mnożnik" to tak naprawdę zwykłe liczniki. W zależności od tego czy odpowiednie klawisze są wciśnięte, zwiększają lub zmniejszają swoją wartość. Kod odpowiedzialny za obsługę wyświetlacza wziąłem z artykuły Zbigniewa Hajduka z Elektroniki Praktycznej.

    Generator DDS na FPGA

    Zobaczmy zatem, co potrafi ten prosty generatorek. Sygnał prostokątny generuje się prawidłowo i jest to rzecz najprostsza z możliwych :)

    Generator DDS na FPGA

    Sinus wygląda trochę gorzej. Charakterystyczne szpilki w pewnych stałych miejscach to skutek niedoskonałości przetwornika cyfrowo-analogowego.

    Generator DDS na FPGA

    Sprawdźmy jak działa regulacja amplitudy. Biały wykres został zapisany w pamięci oscyloskopu, kiedy amplituda była ustawiona na maksimum. Następnie zmniejszono amplitudę i porównano oba wykresy.

    Generator DDS na FPGA

    A teraz podkręcimy częstotliwość do maksimum - przy obecnej konfiguracji udało się uzyskać sygnał sinusoidalny o częstotliwości 16,5MHz! Niestety jest on trochę zdeformowany. Zapewne przetwornik ze zwykłych rezystorów robi swoje. Fioletowa linia to analiza FFT.

    Generator DDS na FPGA

    Zdjęcia pozostałych przebiegów

    Generator DDS na FPGA Generator DDS na FPGA Generator DDS na FPGA

    Zamieszczam kompletny projekt napisany w języku Verilog i przygotowany w programie Lattice Diamond 2 oraz plik Excela do generowania tablic funkcji.

    Zapraszam na moją stronę, gdzie zamieszczam podobne artykuły i inne ciekawe rzeczy
    Generator DDS na FPGA

    Cool? Ranking DIY
    About Author
    leonow32
    Level 30  
    Offline 
    leonow32 wrote 2004 posts with rating 1205, helped 37 times. Live in city Poznań. Been with us since 2007 year.
  • #2
    H3nry
    Level 32  
    Świetnie napisany artykuł !
    "udało się uzyskać sygnał sinusoidalny o częstotliwości 16,5MHz! Niestety jest on trochę zdeformowany. Zapewne przetwornik ze zwykłych rezystorów robi swoje. Fioletowa linia to analiza FFT. "
    Nie sądzisz , ze to bład pomiarowy , odbicia w kablu?
    Tak na koniec brakuje mi analizy sygnału z dynamika lepsza od 80dB.
  • #3
    josef
    Level 12  
    Dodaj jakiś LPF na wyjście albo popracuj nad algorytmem bo masz straszne "glitch'e" w przebiegach.
  • #4
    unitrax
    Level 10  
    Z tego co podaje producent układ zastosowany w tej płytce to nie FPGA tylko CPLD.
  • #5
    leonow32
    Level 30  
    H3nry
    Tutaj wpływ ma wiele czynników. Myślę, że w tej drabince rezystorowej są duże pojemności i indukcyjności pasożytnicze, a poza tym zastosowałem rezystory 5% bo precyzyjnych akurat nie miałem pod ręką. Widać wyraźnie, że zbocze rosnące sinusa jest bardziej strome niż zbocze opadające. Nie wiem czemu tak się dzieje, ale to raczej nie błąd pomiarowy.

    unitrax
    Producent sam nie może się zdecydować :) na stronie Lattice ten scalak jest jednocześnie w kategoriach CPLD i FPGA
    http://www.latticesemi.com/products/fpga/index.cfm?source=topnav
  • #6
    unitrax
    Level 10  
    @leonow32
    Właśnie tak teraz szukam czegoś aby łatwo i tanio "wejść" w FPGA i rozważam różne rozwiązania. Płytka którą zaprezentowałeś wydała się rewelacyjna- niska cena(160zł) dużo wbudowanych urządzeń, programowanie przez USB(nie standardowe lpt) i możliwość zasilania z baterii, gdzieś musiał tkwić haczyk.
    Ale skoro spełnia swoją funkcję należycie to tylko się cieszyć.
    Znalazłem rozwiązanie tutejszego forumowicza www.griva.pl jednak nie odpowiedział na moje pytania, cóż pozostanie mi szukać dalej domowej platformy fpga.
  • #7
    glutek
    Level 14  
    Jesli chodzi o start z fpga to polecam zestaw terasic de0-nano
  • #8
    nsvinc
    Level 35  
    Przydałby się filtr rekonstrukcyjny. Zważ na to, że zestaw sampli którym dysponujesz w ROMie będzie miał "conajmniej jeden" (znaczy sie nieskonczenie wiele) aliasów. To co wypada z jakiegokolwiek DACa winno się filtrować...

    Pomyśl nad wywaleniem R-2R i wstawieniem dobrego DACa >20Msps i filtra rekonstrukcyjnego ;]

    Jeśli w logice zaimplementujesz prosty (tak, on jest banalnie prosty) kontroler magistrali równoległej zgodnej z 8080, i dostawisz mu kilka megsów SRAMu 10ns + NORflash (dla przebiegów podstawowych), to zbudujesz przyzwoity laboratoryjny sprzęt, który w sklepie kosztuje "pare dobrych stówek" ;]
    No i skoro zostalo duzo miejsca w CPLDku, to moze dorzuć drugi (i trzeci) kanał? ;]
    Do CPLDka dostawic mikrokontroler interfejsujący 'wlasciwy generator' ze światem (wyswietlacz, GUI, przyciski, USB,...) i sterujący CPLDkiem po SPI (tu również banalnie prosta implementacja w logice), a sprzęt urośnie do rangi 'wartego pare kafli' ;d

    Sam bym sie chętnie tym CPLDkiem pobawił ;d
  • #9
    Urgon
    Level 38  
    AVE...

    Projekt mnie się podoba, ale mam dwa "ale":
    1. Ta drabinka R2R jakością nie grzeszy.
    2. Skoro możesz rozbujać ten układ bardziej, to czemu go nie rozbujasz?
    W normalnych DDSach w ciągu połowy cyklu zegara głównego licznik wewnętrzny przerzuca na przetwornik całą tablicę ROM/RAM z przebiegiem licząc adresy w górę, a w ciągu drugiej połowy cyklu liczy w dół. Wszystko dzięki sztuczkom w rodzaju mnożnika częstotliwości lub wewnętrznego generatora PLL. Dlatego jak robić taki układ na FPGA/CPLD, to warto go taktować jak najszybszym zegarem, bo chyba nie mają wewnętrznych mnożników częstotliwości czy układów PLL do dowolnego wykorzystania...

    Swoją drogą nie opłacałoby się bardziej zrobić coś takiego na specjalizowanym układzie DDS + mikrokontroler do wprowadzania danych?
  • #10
    drzasiek
    CNC specialists
    Nie lubię czytać tak obszernych opisów :)
    Jeśli dobrze zrozumiałem, to maksymalna wyjściowa częstotliwość próbek to 50 MHz?
  • #11
    piotrva
    VIP Meritorious for electroda.pl
    Projekt i opis bardzo fajne - ogólnie w Polsce ciężko jest dostać coś taniego i przystępnego z FPGA/CLPD (tu rzeczywiście firma Lattice nie wie jak nazwać serię MachOX2).
    Ten zestaw jest bardzo ciekawy, ale znalazłem coś lepszego i chyba tańszego: http://www.latticesemi.com/products/developme...ware/developmentkits/machxo2breakoutboard.cfm za 30$ - nie ma zbędnych moim zdaniem układów, a możliwości i układ na pokładzie większe.
    Niestety jak na razie mają ją tylko dystrybutorzy oferujący wysyłkę do Polski za jedyne... 60$/40EUR (z opłaconymi wszystkimi opłatami celnymi).
    Zobaczę co uda się wynegocjować w firmie Farnell (wysyłka byłaby pewnie z magazynów w UK, czyli już UE więc bez cła i drugiego VAT'u.)
  • #12
    leonow32
    Level 30  
    Jak znajdę trochę czasu to wymienię drabinkę R-2R na AD9760, który wylutowałem z czegoś.

    Próbowałem to rozpędzić do większych prędkości, ale wtedy na oscyloskopie robiła się kaszana. Coś przestawało działać, ale nie doszedłem co takiego. Można by oczywiście wziąć gotowy DDS ale nie o to tu chodzi ;) mam nawet dwie sztuki AD9850 (również wyluty). Jeszcze się tym będę bawił, póki co mam na głowie egzamin z maszyn elektrycznych.

    Płytka z MackXO2 jest bardzo dobra i polecam wszystkim początkującym. Przede wszystkim jest programator USB. To co Piotrva znalazł to jeszcze lepsza płytka, ale w Polsce nie sprzedają.
  • #13
    Urgon
    Level 38  
    AVE...

    A gdzie można wylutować AD9850? Mnie jak na razie udało się zdobyć jeno dwie sztuki AD9834 z sampli, nic lepszego nie wysyłają...
  • #14
    Freddy
    Level 43  
    Urgon wrote:
    AVE...

    A gdzie można wylutować AD9850? Mnie jak na razie udało się zdobyć jeno dwie sztuki AD9834 z sampli, nic lepszego nie wysyłają...

    Ebay lub Aliexpress 5$ - wysyłka gratis :)
  • #16
    drzasiek
    CNC specialists
    leonow32 wrote:

    Próbowałem to rozpędzić do większych prędkości, ale wtedy na oscyloskopie robiła się kaszana.

    To była odpowiedź na moje pytanie dotyczące max częstotliwości próbek? :)
    Jeśli rzeczywiście jest to 50 MHz to te wspomniane 16.5 MHz sinus trochę przesadzone chyba :) Toż to 3 próbki na okres, jaki to sinus. To jakiś tam bliżej niezidentyfikowany przebieg, który przez rzeczywisty, nieskompensowany układ R-2R będący w dla tej częstotliwości filtrem LP po prostu wycina mu wyższe harmoniczne zostaje coś, co wydaje Ci się, że jest tym co masz w buforze :)
    Żeby przebieg był "jakiś tam sensowny" to chociaż te 16 próbek by trzeba było więc jest to tak właściwie generator do ok 3 MHz.
    Masz coś poza tym układem R-2R na wyjściu? Jakiś WO, filtr LP? Czy tylko podłączasz go do wyjść FPGA i mierzysz oscyloskopem?
  • #17
    leonow32
    Level 30  
    PLL daje na wyjściu 133MHz i to jest częstotliwość odświeżania akumulatora i wyrzucania kolejnych próbek z pamięci. Akumulator jest 16 bitowy, a słowo przestrajające jest 13 bitowe. W skrajnym przypadku daje to 8 próbek na okres, a dalej mamy 133MHz / 8 = 16,625MHz co potwierdza zdjęcie z oscyloskopu. Zniekształcenia wynikają z:
    a) beznadziejnej jakości przetwornika
    b) niewielkiej liczby próbek
    c) braku jakichkolwiek filtrów
    d) niestabilności źródła zegarowego
    e) niewielkich umiejętności autora w dziedzinie FPGA :)

    Tak wyglądają efekty podkręcania PLL na wyższe częstotliwości. Przy 200MHz sinus ma 25MHz, ale przypomina on bardziej trójkąta czy piłę
    Generator DDS na FPGA

    PLL ustawiłem na 300MHz. Sygnał jest bardzo niestabilny i zdeformowany, co widać na ciemnożółtej poświacie
    Generator DDS na FPGA

    Przy ustawieniu PLL na 400MHz nic nie działa :)
    Generator DDS na FPGA
  • #18
    Urgon
    Level 38  
    AVE...

    Przy 200Mhz wygląda na nadmiar pojemności na wyjściu z przetwornika. Może jakiś bufor i filtr LC dolnoprzepustowy zapodaj? Przydałby się też lepszy kwarc dla PLL, bo każda niedoskonałość kwarcu jest mnożona przez PLL, niestety. Gdyby nie koszta i problemy z tym związane, to kupiłbym sobie rubidową podstawę czasu i na niej robił generator jakiś...
  • #19
    bobeer
    Level 28  
    Zawsze jestem pełen uznania dla rozwiązań, nie praktycznych, jednakże rozwojowych intelektualnie :)
    Jako zestaw edukacyjny 5+
    Jako narzędzie przydatne w praktyce 2

    Gdyby autor chciał zrobić dobre narzędzie, nie "dłubał by" w układach programowalnych, tylko są do tego specjalizowane ddsy o pewnych i znanych parametrach, których do takiej syntezy się używa (a że za darmo AD już ich nie przysyła ...).

    Daje 'za' za wartości edukacyjne.
  • #20
    Freddy
    Level 43  
    bobeer wrote:
    Zawsze jestem pełen uznania dla rozwiązań, nie praktycznych, jednakże rozwojowych intelektualnie :)
    Jako zestaw edukacyjny 5+
    Jako narzędzie przydatne w praktyce 2

    Gdyby autor chciał zrobić dobre narzędzie, nie "dłubał by" w układach programowalnych, tylko są do tego specjalizowane ddsy o pewnych i znanych parametrach, których do takiej syntezy się używa (a że za darmo AD już ich nie przysyła ...).

    Daje 'za' za wartości edukacyjne.

    Bez sensu - jest to co piszesz. Generatory (bardzo dobrej jakości) serii UBD100x, lub inne oznaczenia w zależności od częstotliwości granicznej są właśnie zrobione na FPGA.
  • #21
    bobeer
    Level 28  
    Quote:

    Bez sensu - jest to co piszesz. Generatory (bardzo dobrej jakości) serii UBD100x, lub inne oznaczenia w zależności od częstotliwości granicznej są właśnie zrobione na FPGA.

    Napisałem o FPGA w kontekście tego projektu i umiejętności autora, a nie ogólnie. Jeśli się mimo to mylę proszę o wybaczenie.

    Z niecierpliwością będę śledził ten temat i czekał aż generator autora uzyska parametry napięcia na wyjściu choćby takie jak AD9852 (Taktowany tym samym zegarem).
  • #22
    leonow32
    Level 30  
    Tylko że AD9852 kosztuje jakieś 200zł :) a MachXO2-1200 w TME jest za 50zł

    kolejny eksperyment :) PLL ustawiłem na 300MHz, wywaliłem mnożnik do regulacji amplitudy, bo nie wyrabiał na takiej prędkości, eksperymentalnie zmieniałem slew rate i wydajność prądową pinów. Udało mi się uzyskać w miarę kształtny sinus 37MHz. Ale niestety układ ma tendencje do wysypywania się i wtedy na oscyloskopie pojawia się kompletna sieczka. Często wcale nie startuje. Czasami licznik adresu przeskakuje na jakąś niepoprawną wartość. Nie wiem jakim cudem udało się uzyskać taki ładny sygnał, bo w większości przypadków wygląda tak jak w moim poprzednim poście. Tak więc poniższy obrazek to raczej dzieło przypadku :D
    Generator DDS na FPGA
  • #23
    drzasiek
    CNC specialists
    To raczej "w miarę" trójką a nie sinus.
    Przynajmniej w moim odczuciu do trójkąta mu zdecydowanie bliżej.
  • #24
    Chivo
    Level 25  
    Witam,

    Gdzie i za ile kupiłeś płytkę testowa MachXO2 Pico Board????

    Pozdrawiam, Rafał