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.

Generator funkcji oparty na układzie AD9833

Hetzer 11 Kwi 2013 22:10 27627 2
  • Generator funkcji oparty na układzie AD9833

    Generator funkcji oparty na AD9833, podłączany poprzez port USB.
    Jedynym urządzeniem, jakiego autorowi brakowało w jego pracowni był właśnie generator funkcji. Jako, że powszechnym jest przekonanie, że są one drogie, nie kupił go. Pomyślał jednak, że może być to całkiem ciekawe wyzwanie, aby zrobić taki generator własnoręcznie. Wyszukał całkiem ciekawy układ DDS (z ang. direct digital synthesis - bezpośrednia synteza cyfrowa), o nazwie AD9833. Następnie dołączył mikrokontroler AVR oraz trochę analogowych elementów elektronicznych.
    Płytka ta nie zawiera żadnych wyjątkowych rozwiązań analogowych, które umożliwiałyby regulowanie amplitudy lub offsetu sygnału. Napięcie wyjściowe jest ustalone na 0-4V. Autor ma w planach wykonanie innego, w całości analogowego obwodu, który posłuży do regulacji amplitudy i offsetu.

    Elementy
    Integralną częścią urządzenia jest oczywiście układ DDS, czyli AD9833, wyprodukowany przez firmę Analog Device. Układ posiada wewnętrzny zegar o taktowaniu 25MHz, wewnętrzną pętlę synchronizacji fazy, tablicowanie sinusa oraz przetwornik analogowo-cyfrowy. Poprzez sterowanie nim za pomocą szeregowego interfejsu SPI, możesz uzyskać następujące rodzaje sygnałów: sinusoida, fala trójkątna, fala prostokątna w zakresie częstotliwości od 0,01Hz do 3MHz. Możliwe jest uzyskanie jeszcze większych częstotliwości aż do ~7MHz, jednak fala sinusoidalna przy wyższych częstotliwościach staje się zniekształcona.
    Do sterowania tym układem autor projektu użył taniego i małego mikrokontrolera at90usb162, produkcji Atmel. Układ ten umożliwi stworzenie szeregowego wirtualnego interfejsu USB, który posłuży do połączenia z komputerem. Dzięki temu możliwe będzie reagowanie na wysyłane przez ten interfejs komendy i odpowiednie modyfikowanie sygnały na wyjściu układu DDS.

    Układ OPA357 wzmocni nieco wyjściowy sygnał z układu DDS. Nominalne napięcie wyjściowe układu AD9833 wynosi 0,6Vpp, wyśrodkowane na 0,3V. Układ OPA357 został wybrany dlatego, że działa z wysokimi częstotliwościami i można dostać go za darmo od firmy Texas Instruments, jako tzw. ,,sample”.

    Schemat
    Schemat i płytka PCB zostały zaprojektowane przy użyciu programu KiCad, całkiem przyzwoicie działającego programu, który posiada licencję Open Source. Zaprezentowane tutaj zostanie tylko kilka głównych części schematu. Jeśli jesteś zainteresowany jego szczegółami, cały schemat w formacie PDF można pobrać pod tym linkiem Link.





    Urządzenie może być zasilane zarówno dzięki połączeniu USB, jak i z oddzielnego źródła zasilania o napięciu wyjściowym 5V. Dzięki dwóm diodom Shottky’ego w razie gdyby zasilanie zostało podłączone do obydwu wejść, nie nastąpi zwarcie.
    Generator funkcji oparty na układzie AD9833
    To jest obwód zawierający układ DDS AD9833. Wartości kondensatorów są identyczne z tymi podanymi w dokumentacji układu, tak jak powinno być. Zegar źródłowy może zostać wybrany za pomocą zworki JP1. Możemy wybierać pomiędzy wewnętrznym oscylatorem, lub zewnętrznym zegarem podłączonym przez złącze BNC. Napięcie wyjściowe z układu DDS najpierw jest filtrowane przez filtr dolnoprzepustowy, a następnie wzmacniany. Jest również rezystor o wartości 50Ω, umożliwiający podłączenie końcówki BNC 50Ω. Autor dodał również kilka punktów testowych rozmieszczonych na całej ścieżce sygnału, dzięki czemu możemy przeprowadzić testy obwodu w bardzo łatwy sposób.
    Generator funkcji oparty na układzie AD9833
    Projekt płytki PCB
    Wzór płytki PCB jest całkiem prosty. Tutaj jest zrzut ekranu przedstawiający ostateczną wersję płytki drukowanej w wersji 3D, wygenerowany w programie KiCad.
    Generator funkcji oparty na układzie AD9833
    Na obrazku tym można zobaczyć również złącze BNC przeznaczone do podłączenia zewnętrznego zegara, które nie zostało jeszcze ,,przylutowane" na płytce, aby nie zasłaniało innych elementów.

    Płytka drukowana została zaprojektowana tak, że oscylator docelowo miał zostać przylutowany powierzchniowo, jednak okazało się, że autor nie posiada takiego oscylatora o odpowiedniej częstotliwości. Posiadał natomiast oscylator w obudowie DIP, który postanowił prowizorycznie zamontować na płytce w sposób widoczny na obrazku poniżej.

    Generator funkcji oparty na układzie AD9833
    Może nie wygląda to zbyt estetycznie, jednak działa poprawnie.

    Autor miał również drobny problem z oryginalnym projektem. Pin VUSB układu AVR powinien być podłączony do napięcia zasilającego, a nie USB VUSB. W ten sposób, jeśli zasilimy urządzenie z zewnętrznego źródła, bez podłączonego USB, do złącza USB nadal można było podać napięcie i uaktywnić je. Wystarczyło jednak przeciąć ścieżkę i zamontować mostek, aby naprawić ten problem. Błąd ten został również poprawiony na schemacie zamieszczonym tutaj oraz na Github.
    Generator funkcji oparty na układzie AD9833

    Protokół
    A więc, płytka jest podłączona do komputera poprzez wirtualny port szeregowy USB. Trzeba więc wprowadzić pewien standard komunikacji poprzez ten port. Autor napisał więc pewien prosty protokół zanim jeszcze zaczął testować jakikolwiek kod. Zdecydował się na użycie ASCII, aby umożliwić wprowadzanie przez człowieka komend podczas testowania, w celu łatwiejszego wykrywania błędów oraz lepszej czytelności kodu.

    Code:
        set commands:
    
        sf1 [freq] #in Hz
        sf2 [freq] #in Hz
        sp1 [phase] #in degrees
        sp2 [phase] #in degrees
        sfo [1/2/m(modulation)] #frequency output
        spo [1/2/m(modulation)] #phase output
        so [o(off)/s(sine)/t(triangle)/q(square)] #output mode
        sm [freq] #modulation freq
         
        All commands ending with <carriage return><newline>


    Więc na przykład, aby zmienić częstotliwość napięcia wyjściowego z 1Hz na 100Hz, musisz wysłać komendę "sf1 100 \r\n".

    Kod źródłowy mikrokontrolera AVR
    Połączenie poprzez interfejs USB umożliwia biblioteka LUFA USB, dla mikrokontrolerów AVR. Następnie ponownie została użyta część kodu, który został już wcześniej napisany dla umożliwienia połączenia szeregowego SPI oraz biblioteka przeznaczona dla układu AD9833. Później napisano kod, który tłumaczy komendy wysyłane poprzez port szeregowy na polecenia, które jest w stanie odczytać i wykonać biblioteka układu AD9833.

    Autor projektu zadał sobie trud używania programu Doxygen, aby skomentować kod źródłowy oraz wygenerować jego dokumentację, więc jeśli ktoś chciałby się czegoś nauczyć, warto zajrzeć here. Cały kod dostępny jest również na profilu autora w serwisie Github.

    Oprogramowanie na PC
    Oprogramowanie zostało napisane w języku Python3. Autor rozpoczął naukę tego języka kilka miesięcy temu, więc postanowił użyć go do napisania prostego interfejsu użytkownika. Użyto biblioteki tkinter w celu stworzenia interfejsu graficznego oraz biblioteki pyserial w celu umożliwienia połączenia szeregowego. Kod odpowiedzialny za interfejs użytkownika nie wygląda zbyt dobrze, z uwagi na to, że autor projektu nie opanował tego języka do końca. Według niego jest to przyjemny język, jednak preferuje pisanie kodów źródłowych do mikrokontrolerów w języku C.
    Generator funkcji oparty na układzie AD9833

    Ostatecznie interfejs sprawuje się całkiem dobrze, a co najważniejsze działa poprawnie. Chociaż na pewno jest kilka rzecz, które należałoby poprawić lub zrobić inaczej. Na przykład przyciski odpowiedzialne za wybór rodzaju sygnału wyjściowego powinny być w osobnej sekcji. Kiedy autor chciał umieścić przycisk odpowiedzialny za przełączanie amplitudy, nie było odpowiedniego miejsca, gdzie przycisk taki mógłby się znaleźć.

    Działanie logiczne aplikacji jest bardzo proste. Aplikacja wysyła odpowiednią komendą przez wirtualny port szeregowy USB za każdym razem, kiedy jakakolwiek wartość w interfejsie użytkownika ulegnie zmianie. Niezbyt skomplikowane.

    Efekty
    Autor nagrał krótki filmik przedstawiający działanie wykonanego w tym projekcie generatora funkcji. Wygląda na to, że działa całkiem dobrze.

    Link


    Pliki
    Wszystkie pliki użyte w tym projekcie dostępne są na koncie autora w serwisie Github. Kod źródłowy jest dostępny pod hasłem GPLv3, zaś wzór płytki drukowanej pod hasłem CC-BY-SA.
    Github - kody źródłowe i wzór płytki PCB
    Dokumentacja kodu procesora AVR
    Schemat w formacie PDF

    Źródło:Link


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • #2 12 Kwi 2013 09:07
    novak512
    Poziom 12  

    Mam pytanie czy da się pobrać wszystkie pliki w możliwie "szybki" sposób czy trzeba pobierać wszystkie foldery/podfoldery po kolei ręcznie?

    pozdrawiam,

  • #3 12 Kwi 2013 09:52
    hehehehuhuhu
    Poziom 19  

    novak512 napisał:
    Mam pytanie czy da się pobrać wszystkie pliki w możliwie "szybki" sposób czy trzeba pobierać wszystkie foldery/podfoldery po kolei ręcznie?

    pozdrawiam,

    Da się wszystko razem.
    Powyżej pojedynczych plików jest zakładka-
    Przyciski: Clone in Windows | ZIP | SSH trzeba kliknąć przycisk ZIP, nastąpi pobranie całości.
    Pozdrawiam