Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Generator DDS - JAK REGULOWAC AMPLITUDE ?

slawko_s 22 Mar 2007 21:21 7906 28
  • #1 22 Mar 2007 21:21
    slawko_s
    Poziom 2  

    Poszukuje rozwiązania problemu, jak cyfrowo ( przez µkontroler) sterowac amplitudą wyjściową z gen. DDS. Słyszałem, że najlepiej zaraz za DDS wzmocnic sygnał do maksymalnego potrzebnego poziomu, a następnie dac tłumiki. No ale czy są może tłumiki sterowane cyfrowo i czy można je dostac ? ( tak byłoby najłatwiej :) )
    Może któś ma lepszy pomysł ?

  • #2 22 Mar 2007 21:50
    shg
    Specjalista techniki cyfrowej

    Analog Devices ma w swojej ofercie ukłądy DDS z możliwością regulacji amplitudy.
    Mają też wzmacniacze w.cz. o regulowanym wzmocnieniu (VGA), sterowane napięciem, do ustalenia wzmocnienia potrzebny był by jakiś przetwornik cyfrowo analogowy podłączony do mikrokontrolera.
    Można też zrobić tak jak piszesz, chociaż z tłumikami sterowanymi cyfrowo się nie spotkałem, ale to pewnie dlatego, że nigdy nie szykałem.
    Można to zrealizować za pomocą kluczy elektronicznych - CD4066, pracują teoretycznie do 40MHz, ale przy tak dużej częstotliwości dadzą znać już o sobie pojemności wewnętrzne, w praktyce przyzwoicie będą pracowały do kilku MHz. Na wyższych częstotliwościach tłumiki rezystorowe przełączane przekaźnikami.

  • #3 22 Mar 2007 23:27
    Dykus
    Poziom 26  

    Pytanie podstawowe - w jakim zakresie chcesz regulować tą amplitudę, bo to, że sygnał jest 0..100 MHz to wiemy. ;) Zakres 0..-100 dBm chyba ciężko będzie uzyskać... :)

    Można zrobić faktycznie na wyjściu tłumiki przełączane przekaźnikami, tylko przy 100MHz uzyskasz izolację rzędu 45dB na typowych przekaźnikach. Kilka tłumików (np. 20-10-5-2 dB), zaś dokładniejsza regulacja albo poprzez wzmacniacz z AGC (np. "linear-in-dB" Analoga - trzeba patrzeć na amplitudy i zniekształcenia), albo bezpośrednio regulując napięcie DDSa (jakby regulacja rezystora Rset za pomocą mikrokontrolera np. poprzez MOSFET). Dodatkowo (co będzie chyba konieczne) można zastosować korekcję wzmocnienia zależnie od generowanej częstotliwośći (by uwzględnić ch-yki tłumików). Tak przynajmniej się to robi w generatorach sygnałowych, tylko przekaźniki koncentryczne się stosuje (a te są drooogie...).

  • #4 23 Mar 2007 02:54
    Vic384
    Poziom 19  

    Czesc
    Ja, tak na szybko, zobilem sobie DDS-a ze strony http://f6bon.albert.free.fr/index.htm
    Jest to DDS na ukladzie AD7008JP50. Ma wade, maksymalna f = 25MHz, ale ma tez zalety: bardzo latwy do skopiowania , ma programowane napiecie wyjsciowe :16 - 1024mV, no i podstawowa sprawa to taka, ze mam ich "kilka". Cale sterowanie, to 5 przyciskow
    Tak nawiasem mowiac, jest to bardzo ciekawa strona.
    Pozdrowienia.

  • #5 24 Mar 2007 01:48
    tatronic
    Poziom 24  

    A gdzie mozna dostac ten AD7008JP50 bo kiedys szukalem i chyba analog juz tego nieprodukuje.Nawet w newarku czy Digikey tez niemaja.Pozdrawiam Arek

  • #6 24 Mar 2007 03:34
    Vic384
    Poziom 19  

    Czesc
    Kiedys na eBAY-u udalo mi sie wygrac, no i mam ich "troche". Nawet w Polsce mam ich ze 30 sztuk. Tutaj troche wiecej. Jak potrzeba, to na PW i poleca. Cena, to 25% z Analoga.
    Pozdrowienia

  • #7 11 Cze 2007 12:48
    zajczyk
    Poziom 13  

    Pytanie odnośnie dds:
    Wszystkie projekty które do tej pory widziałem sprowadzają się do :syntezera, uP, wyświetlacza i wzmacniacza wyjściowego. Mnie natomiast interesuje wykonanie pełnego generatora funkcyjnego 30MHz lub chociaż dodanie regulacji współczynnika wypełnienia dla prostokąta plus regulacja składowej stałej na wyjściu dla trójkąta. Czy sam syntezer pozwoli na programowe wykonanie takich operacji?

  • #8 12 Cze 2007 02:33
    sq8z
    Poziom 12  

    rozsadnym wydaje sie zastosowanie tlumikow, ja w woblerze zastosowalem AT220 zgodnie z opisem zawartym na www u OM3CPH.
    pelna oferta roznej masci tlumikow sterowanych cyfrowo znajdziesz na stronie producenta firmy MACOM:

    http://www.macom.com/psc/jsp/ListParts.jsp?dataFile=digital_voltage_attenuators.txt

    w polsce jest ich przedstawiciel ale nie mam szczegolowych namiarow, wiem tez ze ich wyroby mozna dostac u czechow.

    odpowiedz dla kolegi ktory pyta o generator sinus, suare, triangle:

    w pewnym sensie ANALOG AD9833 - tyle ze freq konczy sie na 12,5 MHz ale polecam zajrzyj na www i obejrzyj datasheet

  • #10 08 Wrz 2007 19:54
    wojtekr
    Poziom 15  

    Witam,
    chcę zrobic generator na AD9833 sterowany Atmelem oprogramowanym w Bascomie. Czytam i nie kumam. Może się za mało znam żeby się tego podejmować ale chcę spróbować. Czy może ktoś napisać (w bascomie) sposób sterowania AD9833? Chodzi mi funkcje, które wysyłają dane do AD9833 i format tych danych w celu osiągnięcia konkretnych funkcji.

  • #11 09 Wrz 2007 14:39
    SP3SWJ
    Poziom 18  

    https://www.elektroda.pl/rtvforum/viewtopic.php?p=3230578&highlight=#3230578

    tu masz komendy jakimi steruje się DDS a z BASCOMa

    ta podpowiedź + dataszit >> i po kilku próbach powinieneś bez problemu wysterować innego DDSa z AD

    /Jarek

    P.S. 1
    w niewielkim zakresie amplitudę z DDSa sobie poregulujesz programowo (niektóre modele) ale najlepsze są tłumiki sterowane z procka a na końcu zastosować dodatkowo pomiar wcz.
    zobacz tłumiki na stronie minicircuits.

    P.S.2
    https://www.elektroda.pl/rtvforum/topic343330.html

  • #12 09 Wrz 2007 16:47
    morph13
    Poziom 25  

    Poziom w.cz z DDS w zależności od częstotliwości ulega zmianie. Są to oczywiście znacznie mniejsze zmiany niż ze zwykłego VCO przestrajanego w szeroki zakresie, niemniej jednak sa.

    Wyjściem z tej sytuacji jak wspomniał już jeden z przedmówców to zbudowanie układu ARW porównującego poziom sygnału w.cz. na wyjściu z wartością zadaną i odpowiednia reakcja na rezystor Rset czy to w układzie szeregowym czy równoległym z tym rezystorem.

    Inna metoda to "pominięcie" tych zmian na wyjściu DDS-a i wyjście z założenia, że są one pomijalne i zastosowanie po wstępnym odfiltrowaniu w co najmniej 3-sekcyjnym LFP i wzmocnieniu sygnału (wzmacniacze 4-ro końcówkowe) a następnie skierowanie go na tłumik sterowny cyfrowo.
    Jako tłumik proponuję zastosować AD8320 lub 8321 (należy pamiętać o radiatorze dla tych scalaków) a dodatkowo na wyjściu wskaźnik poziomu sygnału z prostownikiem i miernikiem wychyłowym dla bajeru :-).

    Są to oczywiście tylko dwie metody, do kolejnych można zaliczyć tłumik na przełącznikach, tłumik na przekaźnikach w.cz lub full wypas tłumik na diodach PIN.

    Wszystkie z wymienionych tu rozwiązań mają swoje plusy i minusy, wybór należy od konstruktora.

    Co do AD9833 i 9843 na "wyższych zakresach" te układy bardzo zniekształcają generowany sygnał i należy brać to pod uwagę !!!!.

    Przy generatorze funkcyjnym opartym o DDS-a należy jeszcze wspomnieć o modulacji sygnału AM lub FM. Pierwszy najprościej zrobić na podobnym układzie jak ARW czyli zmianie Rset a jako "regulator" zastosować MOSFet.
    Dla FM mamy dwie drogi pierwsza dość skomplikowana i stosowana w wysokiej klasie urządzeń to "modulacja czysto cyfrowa" polegająca na zmianie zapisywanego słowa danych (tu najlepszy interfejs równoległy nie szeregowy) lub modulacja generatora napięcie referencyjnego (odniesienia), a wadą jest wąskie pasmo przestrajania (dla generatora VXO).

  • #13 11 Wrz 2007 02:02
    Vic384
    Poziom 19  

    Czesc
    Nie wiem jak na innych, ale ten DDS z linku, co podalem powyzej, pracuje raczej dokladnie, jesli chodzi ostabilnosc napiecia wzgledem czestotliwosci. W oscyloskopie, po najechaniu kursorow na obwiednie, podaje taka sama wartosc napiecia i dla 1250 Hz i dla 25 MHz. Jezeli jest roznica, to najwyzej grubosci linii na ekranie.
    Plytki robil mi Pan Sip, kolega Pana Jarka SP3. Zrobil przez pomylke w lustrzanym odbiciu, ale wyprostowalem nogi ukladu, powiercilem dziurki na przestrzal do pol lutowniczych i dziala. Acha, nie mialem pod reka oscylatorow 10MHz do PIC-a, to zrobilem jeden na 9.2MHz, a drugi na 5 MHz. Oba pracuja jak powinny, wiec mimo ze mam teraz oscylatory 10 MHz, to i tak zostaly "stare". ( Moze lenistwo ?)
    Pozdrowienia

  • #14 15 Wrz 2007 13:11
    wojtekr
    Poziom 15  

    Witam, co prawda ostatnie wpisy sa dosyś stare ale mam pytanie:

    Czy może ktoś napisać 16 bitowe slowo, które trzeba wysłać do AD9833 żeby ten wygenerował powiedzmy sinusa 1kHz i trójkąt 10 kHz?

    Przeczytałem chyba juz wszystko na ten temat ale ponieważ elektroniką zajmuję się od nie dawna więć nie mam jasności co do sterowania DDS'a.
    dzieki

  • #15 17 Wrz 2007 12:06
    morph13
    Poziom 25  

    Wszystkie potrzebne materia ly i spos ob wyliczanie s lowa steruj acego masz dok ladnie opisany w nocie katalogowej. Nawet nie trzeba znać biegle angielskiego, wytarczy przejrzeć wzory i rysunki ze sposobem sterowania DDS-a.

  • #16 18 Wrz 2007 21:02
    wojtekr
    Poziom 15  

    A czy to taki problem podać przykład? Skoro piszę, że nie wiem to znaczy że nie skumałem noty.

  • #17 18 Wrz 2007 21:07
    SP3SWJ
    Poziom 18  

    wojtekr napisał:
    A czy to taki problem podać przykład? Skoro piszę, że nie wiem to znaczy że nie skumałem noty.



    Czy przeglądałeś link który podałem powyżej.??


    jak steruje się AD9851 ???? zacznij od chyba najprostrzego DDSa jaki ma AD

    to trzeba postarać się zrozumieć - by móc programować te scalaki

    Czego nie rozumiesz ???

    Czy robisz jakąś pracę zaliczeniową że potrzebujesz gotowy ciąg jedynek i zer ???

  • #18 18 Wrz 2007 21:26
    wojtekr
    Poziom 15  

    Właśnie chcę skumać. Chcę sobie zrobić generator na AD9833 (a nie 9851)
    Jeżeli nie rozumiem noty to wpisy typu poczytaj notę są bez sensu.
    Rozumiem, że można stwierdzić iz ktoś bez wiedzy jakiejs tam nie zrozumie sterowania DDS'a. Ale może zyczliwe wpisy pomogą.

    To jak to rozumiem:
    Mamy 16 bitowe słowo, których odpowiednie bity sterują kaształtem, częstotliwością itp. Są tam oczywiście takie bity jak FREQ czy PHASE których nie kumam ale może można to wyjaśnić?

    Myślałem, ze na poddstawie paru przykładów konkretnych słow będę mógł dojść jak tym sterować i skumać notę. Przykładowo dwa przebiegi trójkątne powinny mieć częśc wspólną D1 i D5 (chyba?)
    Jak by to wszytsko w nocie było takie jasne to to forum było by niepotrzebne.

  • #19 19 Wrz 2007 09:21
    morph13
    Poziom 25  

    Sorki kolego, ale gdybyś miał podstawy elektroniki cyfrowej opanowane to nie byłoby problemu.
    Niemniej podam kilka wyjaśnień, żeby "na gbura nie wyjść", chociaż temat DDS-ów wałkowany był dosłownie na elektrodzie nie raz.

    FREQ0 i FREQ1 - to dwa rejestry (14 bitów) w których na stałe możesz wpisać 2 częstotliwości pracy do szybkiego użycia.
    PHASE0 i PHASE1 - tak jak wyżej tylko rejestry 12 bitowe dla zmian fazy (częstotliwości - w mniejszym zakresie).
    CONTROL - ogólny rejestr kontrolny DDS-a.

    Zależnie od stanów D15 ,D14 i reszty wysyłanych bitów wybierasz do jakiego rejestru trafią wysyłane dane (częstotliwość, faza, konfiguracja).
    W wypadku częstotliwości i fazy nie ma problemu bo stosowne wzory na wyliczenie słowa są podane jednak sterowanie DDS-em zawarte jest w słowie kontrolnym i tu wszystko jest ładnie pokazane na stronie 10 noty katalogowej (tabela i i fotka 5).
    Dodatkowo przykładowe słowo konfiguracyjne jest przytoczone na stronie 12 noty tabela 5 (zapisujesz 3 słowa po kolei i masz zaprogramowany FREQ0), tabela 6 i 7 dla innych rejestrów.

    Strona 14 i 15 noty to całe ładne grafy postępowania z DDS-em w czasie jego programowania idealne do napisania własnego softu.

    Nie ma sensu chyba więcej się rozpisywać bo bym zaczął dosłownie przytaczać tłumaczenie noty katalogowej.

    Na początek polecam jeszcze wykonać podłączenie kości zgodnie ze schematem na końcu, podpiąć to do PC-ta i pobawić się oprogramowaniem, tam wszystkie zmiany nastaw (poszczególnych bitów) ładnie są zobrazowane i na podstawie tego samemu zacząć kombinować.

    Jednak polecałbym zadać sobie jeszcze jedno podstawowe pytanie !!!!
    "Czy jestem w stanie poradzić sobie z takim "zaawansowaniem cyfrowym układu" a potem brać się za oprogramowywanie kości"
    Jeśli jednak moje obawy są niesłuszne to życzę powodzenia w pracach.

  • #20 21 Wrz 2007 11:55
    khach
    Poziom 2  

    Najlepsza regulacja- analogowa, zmiana wartości Rset, jak opisane w AN423 "Amplitude Modulation of the AD9850 Direct Digital Synthesizer"

  • #21 24 Wrz 2007 21:30
    wojtekr
    Poziom 15  

    Witam, czy moze ktoś napisać jak wygenerować przebieg prostokątny? Umiem sinusa i trójkąt ale nie mogę siędoczytać jak zrobić prostokąt

    dzięki

  • #22 25 Wrz 2007 21:22
    SP3SWJ
    Poziom 18  

    Jak już coś rozgryzłeś - to zapodaj te kody i słowa sterujące pod konkretnego DDS- a może komuś sie coś przyda i może ktoś ci chętniej pomoże.

    Jak sie ludzie pytali o sterowanie DDS z Bascom - wrzuciłem sprawdzone fragmenty. Może zrób to samo jak oczekujesz dalszej pomocy (jeżeli jej otrzymałeś do tej pory)

    /SWJ

  • #23 25 Wrz 2007 22:45
    wojtekr
    Poziom 15  

    Moje wpisy są na:

    https://www.elektroda.pl/rtvforum/viewtopic.php?t=836250&highlight=

    nie chciałem dublować. Problem jest jednak nie do końca rozwiązany. Nie wiem jak mam generować liczbę do wysyłki do AD9833.
    Obecnie robię tak:

    0. określm żądane F_OUT- prztykładowo 1kHz
    1. obliczam liczbę: F_OUT/20000000(MCLK)/2^28
    2. otrzymuję 13422
    3. zamieniam na format dwójkowy
    4. pierwsze dwa bity z zera zamieniam na 01
    5. dzielę na dwa bajty
    6. wysyłam 2 bajty control register
    7. wysylam 2 bajty obliczonej liczby
    8. wysylam 0100 0000 0000 0000 jako MSB

    Generalnie działa ale słabo. zwiększanie F_OUT przyciskiem krokiem co 1 lub 10 lub 100 daje bardzo nieregularne odczyty na oscyloskopie.

    Będę wdzięczny za wszelką pomoc.

  • #24 26 Wrz 2007 12:17
    morph13
    Poziom 25  

    Sam komplikujesz sobie życie bez zagłębiania się dokładnie w notę i brak matematycznego myślenia oraz dokładnego sprawdzenie tego co napisali inni. To moja podstawowa uwaga, jednak możesz zrobić jak poniżej napisałem:
    - pobierasz częstotliwość wyjściową (np klawiatura dziesiętna)
    - podstawiasz do przekształconego wzoru na wyliczanie wartości ładowanej (czyli wart. ładowana (dec) = (Fout * 2^ 28)/Fmclk)
    - ładujesz wyliczona wartość do DDS-a jednak jeśli jest ona w formie dziesiętnej (a jest) zamieniasz na hex-a
    - DDS generuje wprowadzoną częstotliwość.

    Jeśli wyliczenia robisz w liczbach dziesiętny to robisz to do końca (poza zamiana na hex przed ładowaniem do DDS-a), jeśli w hexadecymalnych to tez do końca, nie ma mieszania formatów liczbowych. Proponuje hex, jednak w takim wypadu musisz zamienić pobraną liczbę z klawiatury do formatu hex a dalej to już jak wyżej opisałem.

    Może trochę namieszałem ale nie mam zamiaru pisać tu elaboratu na temat konwersji liczb itp, są to umiejętności podstawowe przy pisaniu softu na mikrokontrolery i nie tylko.

    Na stronie 7 noty są przykładowe wartości ładowane do kości w odniesieniu do częstotliwości taktującej i założonej częstotliwości wyjściowej.
    Dlaczego "nie posilasz" się już przedstawionymi przykładami !!!!


    Nie pisze w BASCOM-ie i na dodatek omijam go z daleka.
    Dlatego nie będę wnikał w przytoczone przykłady kodu programu.
    Ani próbował opisywać sposób wyliczania i konwersji w tym języku.

    Jednak pamiętaj, że dzielenie 2^28 / Fmclk można znacznie uprościć poprzez skrócenie do wartości gdzie jeszcze nie pojawiają się liczby ułamkowe czy to w liczniku czy w mianowniku. Szczególnie jest to polecane jeśli masz już wybrana konkretna częstotliwość taktującą.

    Może bowiem się okazać, że Bascom blednie wykonuje obliczenia matematyczne, jeśli będziesz posługiwał się liczbami o znacznie mniejszym zakresie (wcześniejsze skracanie itp) to obliczenia będą szybsze i być może kompilator nie będzie wywalał "ukrytych błędów"

    To jaki przebieg ma być generowany (sinus, trójkąt, prostokąt) to tylko manipulacja bitami sterującymi w słowie kontrolnym i z noty wynika, że nie trzeba za każdym razem ładować od nowa wyliczonej wartości.

    Zmiana częstotliwości w oparciu o zadany krok działa bardzo podobnie jak jej wyliczanie na podstawie wprowadzonej wartości np z klawiaturki. Tu poprotu dodajesz (lub odejmujesz) do wcześniej wprowadzonej wartości wartość skoku (tu kroku przestrajania) i wyliczasz jak wyżej napisałem.
    Pamiętaj o badaniu czy nie przekroczono zakresu dla jakiejśc minimalnej lub maksymalnej częstotliwości która ma być generowana.

    Filtry LC na wyjściu nie są wymagane jednak jak najbardziej wskazane, pamiętaj, że jest to "cyfrowa synteza przebiegu analogowego" a co za tym idzie jak każda cyfrówka okropnie śmieci i generuje harmoniczne i po to jest właśnie ten filtr na wyjściu, żeby je wyciąć.

  • #25 05 Paź 2007 21:09
    wojtekr
    Poziom 15  

    Problem chyba tkwi w Bascomie. Robie tak jak powyżej a nie bardzo to działa. Może jest ktoś kto zgłębił temat DDS w Bascomie?

  • #26 05 Paź 2007 21:18
    SP3SWJ
    Poziom 18  

    ale z jakim DDS ????


    BASCOM z ad9851 ad9951 100 % skuteczności...

    weż sobie użyj RS232 jako " monitora"

    czyi wyrzycaj po kolei wszystkie obliczenia na RS232 i oglądaj czy są dobre

    wyrzuć potem binarnie słowo które wysyłasz do DDS i zdekoduj na kartce

  • #27 05 Paź 2007 21:59
    wojtekr
    Poziom 15  

    Chodziło mi o ad9833- tylko taki mam.

  • #28 06 Paź 2007 12:13
    morph13
    Poziom 25  

    OK. Czyli wracamy do punktu wyjścia ........
    W temacie Bascoma nie pomogę bo w nim nie piszę, jednak skoro masz takie problemy z tą kością to czy przetestowałeś jej sprawność (poprawność wykonania PCB) w oparciu o soft ze strony Analoga do sterowania z PC ????.

    Tam jest już wszystko, co Ci potrzeba do odpalenia DDS-a. Jeśli ruszy ze sterowaniem z kompa to znaczy, że cały hardware masz OK i problem tkwi w oprogramowaniu bascom-owy. Jeśli nie to wiadomo co jest uwalone.

    Na podstawie tego softu możesz " na siłę" programować kość konkretnymi wartościami 0 i 1 i jak ruszy wtedy zacząć kombinować dalej.

  • #29 06 Paź 2007 20:51
    wojtekr
    Poziom 15  

    Mam jeszcze pytanie dotyczace wysylania control i dds_word. Skoro control ma statyczne bity to jak wyslac tylko dds_word LSB lub MSB. Domyślam się, że to pytanie dotyczy bardziej operacjach na bitach niz konkretnie DDS'a ale nie mogę tego nigdzie doczytać. Uparłem się strasznie żeby to zrobić pomimo złozoności- jak na moją wiedzę.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME