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.

Genarator funkcyjny DDS na AVR.

kaka0204 09 Cze 2012 19:39 14385 33
  • Genarator funkcyjny DDS na AVR.
    Witam.
    Dziś chciałbym przedstawić dość ważne urządzenie w warsztacie jakim jest generator funkcyjny. Zdecydowałem się na generator DDS z prostego powodu, chciałem mieć urządzenie, które będzie posiadać wyświetlacz 2x16 znaków.
    Zakres generator to 0 - ok. 30KHz oczywiście można jeszcze więcej, ale mówię tu o przebiegach, które można do czegoś wykorzystać. Przebiegi jakie generuje DDS to: sinus, prostokąt, trójkąt i piła. Generator posiada dwie możliwości zmiany częstotliwości- zgrubną i dokładną. W trybie zgrubnym, częstotliwość jest zmieniana o ok 60-70 Hz (zależy jak szybko naciśniemy przycisk). W trybie dokładnym częstotliwość jest zmieniana ze skokiem 0,5 Hz. W roli DAC-a pracuje drabinka R2R.Sygnał wyjściowy jest o wypełnieniu 50%. Mikrokontroler to atmel Atmega8 pracująca z częstotliwością 6,5530 MHz. Drabinka R2R składa się z rezystorów 1%. Amplituda wyjściowa wynosi ok. 0-5Vpp dla prostokąta i ok 0-2,5-3V dla sinusa, piły i trójkąta.
    Kilka zdjęć:
    Genarator funkcyjny DDS na AVR. Genarator funkcyjny DDS na AVR. Genarator funkcyjny DDS na AVR. Genarator funkcyjny DDS na AVR. Genarator funkcyjny DDS na AVR.
    PS.Na koniec chciałbym podziękować kolegom mirekk36 i tplewa za pomoc w sprawie procesora.
    Pozdrawiam.


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • #2 09 Cze 2012 20:06
    Tomasz.W
    Poziom 35  

    Wstawiłeś fotkę jakiegoś wyświetlacza w obudowie, jakieś oscylogramy i na tym koniec. Żadnego opisu, nic.

    kaka0204 napisał:
    ....Zakres generator to 0 - ok. 40-50 KHz oczywiście można jeszcze więcej, ale mówię tu o przebiegach, które można do czegoś wykorzystać...
    A niby do czego można to wykorzystać :?: Tym nawet pośredniej w radiu nie zestroisz.

  • #3 09 Cze 2012 20:19
    kaka0204
    Poziom 28  

    Tomasz.W napisał:
    A niby do czego można to wykorzystać :?: Tym nawet pośredniej w radiu nie zestroisz.

    Głównie ma on służyć do audio, więc taka częstotliwość jak dla mnie jest ok.
    Tomasz.W napisał:
    Żadnego opisu, nic.

    Nie mam pomysłu co o nim napisać. Sygnał wyjściowy jest o wypełnieniu 50%. Mikrokontroler to atmel Atmega8 pracująca z częstotliwością 6,5530 MHz. Drabinka R2R składa się z rezystorów 1%. Amplituda wyjściowa wynosi ok. 0-5Vpp dla prostokąta i ok 0-2,5-3V dla sinusa, piły i trójkąta.

  • #4 09 Cze 2012 22:20
    mkpl
    Poziom 37  

    Fajny projekt :) można go rozwinąć. Wklepywanie częstotliwości zrobił bym jako klawiaturka lub enkoder z przyciskiem. Tak dla przykładu kręcąc nim normalnie ustawiasz zgrubnie a przyciskając i przytrzymując włącza się regulacja dokładna.

    Druga opcja obowiązkowo RS232 i wklepywanie częstotliwości z terminala znacznie ułatwiło by życie. Kolejny pomysł co cyfrowa regulacja poziomu wyjściowego (druga drabinka R2R jako dzielnik do wzmacniacza sterowana z ekspandera portów i2c na PCF)

  • #5 09 Cze 2012 22:28
    flp
    Poziom 11  

    Jaką rozdzielczość ma dac 8-bitów? Jaka jest częstotliwość pracy przetwornika - sampli/sekundę? Jak generujesz sinusa? funkcja z C i obliczenia zmiennoprzecinkowe czy coś mądrzejszego?

  • #6 09 Cze 2012 23:13
    shadow0013
    Poziom 34  

    Po zrealizowaniu co zaproponowali koledzy dorób jeszcze funkcję sweep, a tak w ogóle fajny projekt ale opis bardzo skromny.

  • #7 09 Cze 2012 23:22
    kaka0204
    Poziom 28  

    Witam.
    Dziękuje za pozytywne oceny. Co do opisu to naprawdę nie mam pomysłu co jeszcze napisać. Czekam na pytania :D
    Pozdrawiam.

  • #8 09 Cze 2012 23:26
    spoli
    Poziom 15  

    Cytat:
    Nie mam pomysłu co o nim napisać.

    To może pokaż schemat? Czego używasz jako bufora wyjściowego (co jest na wyjściu generatora). Pokaż przebiegi dla maksymalnej częstotliwości.

  • #9 10 Cze 2012 00:09
    kaka0204
    Poziom 28  

    http://www.mikrocontroller.net/wikifiles/5/51/Dds.pdf To jest dokumentacja tego generatora. Trochę zawyżyłem maksymalną częstotliwość po dokładnym zmierzeniu, jeszcze przebieg 30KHZ można uznać za ok, choć nie jest on najlepszy, za wprowadzenie w błąd przepraszam. Jako bufora używam tego co na schemacie, czyli TL072.
    Pozdrawiam.

  • #10 10 Cze 2012 02:01
    maciej_333
    Poziom 34  

    Ogólnie jest to dosyć "biedne" urządzenie. Za podobną kwotę można zrobić generator na MAX038. Nie znam niemieckiego, ale z rysunków wywnioskowałem, że jest to faktycznie DDS.

    Skoro wszyscy koledzy sugerują by coś dodać, do tego urządzenia, to i ja coś zasugeruję. Proponuję dodać funkcję generator przebiegów arbitralnych. Nie pasuje on do DDS, ale można go tu wstawić. Warto też zwiększyć rozdzielczość przetwornika C/A. Dodałbym choćby jeden dodatkowy bit. To jednak powodowałoby utrudnienie w pisaniu programu. Pewnie dlatego rozdzielczość wynosi dokładnie 8 bitów. Mając 9-bitowego C/A można zwiększyć częstotliwość podawania próbek. W takiej sytuacji na okres sygnału dla najmniejszej częstotliwości przypada dwa razy więcej próbek, niż poprzednio. Zatem wycinając co którąś próbkę można już zwiększać częstotliwość. Właśnie tak działają DDS'y. Ostatecznie poprawi to zakres pracy generatora i zmniejszy zniekształcenia nieliniowe.

    Ponadto zwykle w DDS'ach można zmieniać częstotliwość taktowania. Gdyby dodać taką funkcję tutaj, to możliwe okazałoby się uzyskanie o wiele wyższych częstotliwości. Wystarczyłoby tylko kilka zakresów. Warto to zmienić, bo tu wystarczyłoby zmodyfikować tylko program.

  • #13 10 Cze 2012 09:22
    shadow0013
    Poziom 34  

    Mógłbyś na elektrodzie zamieścić pliki źródłowe (c + hex), są w podanym opisie ale jak sam pisałeś potrzebowałeś pomocy żeby to uruchomić, na pewno znajdą się chętni do wykonania takiego generatora.
    Napisz czy były problemy z jego uruchomieniem, jeśli tak to jak je pokonałeś.

  • #14 10 Cze 2012 10:00
    kaka0204
    Poziom 28  

    shadow0013 napisał:
    Napisz czy były problemy z jego uruchomieniem, jeśli tak to jak je pokonałeś.

    Tutaj z pomocą przybył kolega tplewa i on zmienił kod tak aby można było go zkompilować. Jedyny problem jaki mi się przydarzył to nie podłączony pin RW przez co lcd nie wyświetlał nic na ekranie.
    Dodaje załącznik z projektem:

  • #16 10 Cze 2012 11:29
    236759
    Użytkownik usunął konto  
  • #17 10 Cze 2012 12:04
    maciej_333
    Poziom 34  

    jonex21 napisał:
    indianka napisał:
    Można zrobić generator na MAX038 ale jego kupno graniczy obecnie z cudem.

    :arrow: cud
    :arrow: podobny projekt z RS232


    Generator DDS "biednego człowieka :D " jest jeszcze biedniejszym urządzeniem, niż te tutaj. Brak tu wyjściowego filtra dolnoprzepustowego. Może w prezentowanym urządzeniu zastosować przetwornik C/A mnożący ? Polega to na zastąpieniu napięcia odniesienia przetwornika sygnałem z drugiego C/A. W takiej sytuacji można już zrobić np. modulację AM. Gdyby dodać sterowanie poprzez RS232 można bawić się np. w jakiś syntezator efektów dźwiękowych.

    Zwykle w projektach, które są kopiami 1:1 kilkam "-". Tym jednak razem dałem "+" tylko dlatego, że spodobała mi się ta niemiecka dokumentacja. Doceniłem też czytelność programu.

  • #18 10 Cze 2012 12:19
    daroslav15
    Poziom 15  

    1.Stoswałeś jakiś filtr na za drabinką?
    2.Jak regulujesz amplitudę - przez wzmacniacz wyjściowy i potencjometr, czy programowo?
    3.Prostokąt też generujesz z drabinki, czy prosto przez atmegę?

    A jak wygląda proces budowania przetwornika ze zbioru rezystorów? Bierze się jak leci, czy dobiera jak najbardziej zbliżone rezystancje mierząc wcześniej jakimś mostkiem? Rozrzut powiedzmy +-1% ma duży wpływ na generowany sygnał?

  • #19 10 Cze 2012 12:25
    kaka0204
    Poziom 28  

    daroslav15 napisał:
    3.Prostokąt też generujesz z drabinki, czy prosto przez atmegę?

    Prostokąt jest generowany z drabinki.
    daroslav15 napisał:
    2.Jak regulujesz amplitudę - przez wzmacniacz wyjściowy i potencjometr, czy programowo?

    Amplituda jest generowana tak jak napisałeś przez wzmacniacz i potencjometr.
    daroslav15 napisał:
    1.Stoswałeś jakiś filtr na za drabinką?

    Nie.
    daroslav15 napisał:
    A jak wygląda proces budowania przetwornika ze zbioru rezystorów? Bierze się jak leci, czy dobiera jak najbardziej zbliżone rezystancje mierząc wcześniej jakimś mostkiem? Rozrzut powiedzmy +-1% ma duży wpływ na generowany sygnał?

    Starałem się je dobierać aby miały jak najbardziej zbliżone parametry. Mozolne zajęcie, ale chciałem aby przebiegi były jak najbardziej dokładne. Rozrzut +/-1% jak zaobserwowałem nie ma bardzo wielkiego wpływu na przebieg.
    Pozdrawiam.

  • #20 10 Cze 2012 12:32
    maciej_333
    Poziom 34  

    daroslav15 napisał:
    1.Stoswałeś jakiś filtr na za drabinką?
    2.Jak regulujesz amplitudę - przez wzmacniacz wyjściowy i potencjometr, czy programowo?
    3.Prostokąt też generujesz z drabinki, czy prosto przez atmegę?

    A jak wygląda proces budowania przetwornika ze zbioru rezystorów? Bierze się jak leci, czy dobiera jak najbardziej zbliżone rezystancje mierząc wcześniej jakimś mostkiem? Rozrzut powiedzmy +-1% ma duży wpływ na generowany sygnał?


    Autor podał Link do dokumentacji. Wszystko wynika z podanego tam schematu. Wykonując taki przetwornik najprościej wziąć zwyczajnie rezystory z jednej serii. Kiedyś zrobiłem taki przetwornik na rezystorach o tolerancji 10%. Wstawiłem dwa rezystory szeregowo jako 2R i jeden jako R. Rezystory kupiłem specjalnie z jednej taśmy (wyszły jeden po drugim z maszyny w trakcie produkcji). Działało to całkiem nieźle. Dobieranie mostkiem Whetastone'a byłoby zbyt kłopotliwe, bo pomiary takim mostkiem są wolne. Trzeba wstępnie ustawić gałęzie mostka, potem zrobić pomiar próbny, kolejno już doprowadzić do dokładnej równowagi.

  • #21 10 Cze 2012 12:35
    kaka0204
    Poziom 28  

    Ja mierzyłem zwykłym multimetrem, ale jak już napisałem różnica 1-2% nie robi wielkiej różnicy.
    Pozdrawiam.

  • #22 10 Cze 2012 15:05
    Pokrentz
    Poziom 21  

    Na dobrą sprawę, to zastosowanie jakiegos przetwornika DAC z wejściem równoległym, nawet typu DAC08 mogłoby poprawic projekt.
    Drabinka rezystorowa lutowana "na piechotę", nawet, jeśli nie będzie miała błędów monotoniczności, to może mieć kłopoty z napięciem podawanym na różne wejścia cyfrowe - Atmega może podawać na każdą nóżkę inne napięcie mieszczące się w zakresie dopuszczalnych dla stanów "L" i "H".
    Ale jako projekt edukacyjny - przyjemna zabawa. Też się kiedyś tak bawiłem, tylko lutowałem oporniki do portu równoległego. To sie kiedyś nazywało "Covox". I miało paskudne błędy monotoniczności - wynikające właśnie z tego, że na jednym pinie portu równoległego stan "H" to było 4,95V a na innym - 5,03V...

  • #23 10 Cze 2012 16:18
    DariuszEE
    Poziom 17  

    Witam
    Ja nieco inaczej się wypowiem

    Projekt jest prosty
    Pytali się koledzy jak to działa ?
    To banalne , program procesora po prostu odtwarza 256 krokową tablicę "drukuje ją na port"

    Jak koledzy chcą wiedzieć jak to działa
    to proponuję :

    Zbudowanie takiej samej jakości generatora na pamięci EPROM
    tak tak , po prostu odtwarzamy tablicę

    Poniżej zamieszczam kilka ciekawych projektów:

    Polskie artykuły na w/w temat Link
    EPROM AF GENERATOR - polecam przeczytać :-) Link
    electronic assembly - inny projekt Link
    EPROM based NBTV Signal Generator - Video generator Link

    Odtwarzanie dźwięków z EPROMU , ułatwia zrozumienie sposobu działania przetworników DAC i "dźwięku cyfrowego"

    a ps. Koledzy zadajecie pytanie o jakość takiego generatora , jest niska , aby to uzmysłowić , proszę pomyślcie sobie że swój ulubiony utwór słuchacie nagrany 8 bitowo , myślę że jakość będzie dość marna :-)

  • #24 10 Cze 2012 17:12
    flp
    Poziom 11  

    Tylko że w przypadku generatora śmiało można użyć filtru i odfiltrować wyższe harmoniczne, co powinno znacznie poprawić jakość generowanego sygnału.

  • #25 10 Cze 2012 19:51
    Tomasz Gumny
    Poziom 27  

    kaka0204 napisał:
    [...]Zakres generator to 0 - ok. 30KHz [...]Mikrokontroler to atmel Atmega8 pracująca z częstotliwością 6,5530 MHz.
    Czy możesz pokazać przebieg prostokątny o maksymalnej częstotliwości?
    Przy programowej realizacji pętli syntezującej jej częstotliwość będzie wielokrotnie niższa od częstotliwości taktującej procesor zwłaszcza, jeśli procesor musi się zajmować dodatkowymi rzeczami. Zdaje się, że tutaj częstotliwość pętli wynosi zaledwie 256kHz a to zapewne skutkuje dużymi skokami fazy (jitter) generowanego przebiegu, najlepiej widocznymi w przebiegu prostokątnym.

  • #26 10 Cze 2012 21:21
    kaka0204
    Poziom 28  

    Przebieg prostokątny o częstotliwości 26KHz:
    Genarator funkcyjny DDS na AVR.

  • #27 10 Cze 2012 22:05
    Tomasz Gumny
    Poziom 27  

    W podobnym układzie (programowy DDS na AVR) przy częstotliwości pętli syntezującej 2.2MHz (20MHz/9) jitter jest znacznie mniejszy nawet przy 100kHz na wyjściu:
    Genarator funkcyjny DDS na AVR.

  • #28 11 Cze 2012 14:48
    199693
    Użytkownik usunął konto  
  • #29 11 Cze 2012 15:50
    maciej_333
    Poziom 34  

    DariuszEE napisał:
    Witam
    Ja nieco inaczej się wypowiem

    Projekt jest prosty
    Pytali się koledzy jak to działa ?
    To banalne , program procesora po prostu odtwarza 256 krokową tablicę "drukuje ją na port"

    ...


    To nie do końca tak. W DDS częstotliwość pobierania próbek jest stała, ewentualnie można wybrać jedną z kilku częstotliwości. Częstotliwość sygnału wyjściowego reguluje się poprzez pomijanie części próbek. Dlatego też wraz ze wzrostem częstotliwości sygnału mamy coraz to większe zniekształcenia nieliniowe.

    karol_85 - Myślę, że dałoby się to jeszcze poprawić. Moim zadaniem dołączenie zewnętrznego RAM'u do Atmegi do dobry pomysł. Przy starcie faktycznie można tam wysłać wszystkie próbki. Warto jednak nietypowo dołączyć DAC, tak by w trakcie odczytu komórki pamięci automatycznie wpisywać do niego to, co jest na szynie danych (CS DAC'a i RAM'u połączyć razem, a RD DAC'a dać do WR RAM'u). Stos trzebaby tu zorganizować w wewnętrznej pamięci Atmegi (chyba istnieje taka możliwość). Można też bardziej przetaktować procek. Wystarczy podnieść zasilanie do 5,5V i dać taktowanie zewnętrznym zegarem.

  • #30 11 Cze 2012 16:58
    236759
    Użytkownik usunął konto