Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

generator dwu częstotliwości cyfrowych z płynnym podziałem

rosaldo 27 Feb 2009 16:16 2354 9
Tespol
  • #1
    rosaldo
    Level 12  
    Jak wygenerować dwie częstotliwości cyfrowe o programowanym podziale?
    Mam do wygenerowania częstotliwość 100MHz i 99,9999 MHz, czyli przesunięcie 100Hz. Wsp. wypełnienia 50%. Przesunięcie fazowe dowolne, lecz stałe.
    Czy to jest możliwe na CPLD ?


    Pozdrawiam
    Robert

    Dodano po 2 [godziny] 7 [minuty]:

    Chyba się źle wyraziłem. Częstotliwości mogą być dowolne w zakresie 50 - 100MHz, natomiast ich wzajemny stosunek musi być stały (np. 10 000)
    Przeglądałem właśnie ten link na temat generatora z akumulatorem fazy.

    Link
    ale tym nie da się generować 100MHz bo akumulator 32 bitowy tzn częstotliwość zegara idzie w GHz (32 * 100MHz)

    10 000 ~= 2^14 czyli może akumulator 14 bitowy.

    Dodano po 37 [minuty]:

    Wydaje mi się, że znalazłem tu:
    http://hal.archives-ouvertes.fr/docs/00/24/36/35/PDF/ajp-rphysap_1972_7_4_329_0.pdf

    Co o tym sądzicie?
  • Tespol
  • #2
    elektryk
    Level 42  
    CPLD mają częstotliwości pracy rzędu 100MHz, więc same z siebie nie wygenerują takiego sygnały. Być może jakieś proste FPGA z modułami DCM będą w stanie wygenerować kilka wybranych częstotliwości. Napisz dokładnie do czego to ma służyć, być może prościej jest to zrobić metodami analogowymi lub DDS.
  • Tespol
  • Helpful post
    #3
    pidorek
    Level 15  
    Jeśli nie zależy Ci na stosowaniu CPLD, FPGA to możesz wykorzystać programowalny generator sygnału zegarowego np. ICS8430BI-71. Umożliwia ustawienie częstotliwości od około 16 do 700 MHz z krokiem zależnym od częstotliwości. Przy częstotliwościach <50MHz jest to 0.125 MHz później co 0,25 a najwyższe częstotliwości powyżej 350 MHz już tylko co 2 MHz. Ewentualnie jakiegoś małego FPGA z DCM możesz użyć żeby mnożyć/dzielić częstotliwość tego zegara.
  • #4
    rosaldo
    Level 12  
    Dzięki za odpowiedź!
    ICS8430BI-71 - rozumiem, że należy zastosować dwa układy sprzężone wspólnym rezonatorem.
    Podział 125kHz - trochę dużo
    FGPA z DCM - Nie studiowałem tego tematu jeszcze, ale myślę, że jedno FPGA ma 1 DCM czyli jedna częstotliwość
    Czyli znowu dwa FPGA?
    Poza tym już doczytałem, że mnożnik w FPGA jest max 200MHz, (ICS 700MHz) czyli rozdzielczość będzie jszcze gorsza.

    Jest mi to potrzebne do analizatora widma.
  • #5
    _greis_
    Level 14  
    Quote:
    FGPA z DCM - Nie studiowałem tego tematu jeszcze, ale myślę, że jedno FPGA ma 1 DCM czyli jedna częstotliwość


    trochę minąłeś się z prawdą. polecam przestudiowanie XAPP462
  • #6
    pidorek
    Level 15  
    Jednej rzeczy do końca nie rozumiem. Jedna częstotliwość ma być 50-100 MHz a druga np. 10000 razy mniejsza czy większa? Bo jeśli to drugie to trochę SF :)

    Rozumiem że ma być mniejsza. Jeśli tak, to w FPGA/CPLD implementujesz zliczanie n impulsów i to wszystko w tym temacie.
  • #7
    rosaldo
    Level 12  
    Pomyliłem się : 10000= F1/(F1-F2)
    W poniższym patencie jest opisane jak dzielić częstotliwość zegara dowolnym współczynnikiem
    patent

    Czy ktoś spotkał się z implementacją programową DCM ze Startan -3
    na CPLD?
    Poza DCM program jest banalny (jeden licznik), a Spartan -3 to wielkie działo (i drogie)

    Dodano po 6 [minuty]:

    Jeśli jedna częstotliwość jest 50MHz, to druga 49,99MHz
    czyli minimalnie mniejsza.
    Pozostała logika jest taka sama dla obu zegarów.
    Ten scalak ICS8430BI-71 (firmy ITD) sporo kosztuje (15$) x
    2 plus wysyłka (pewnie ze 100zł)
    Chyba jednak spróbuję na Spartanie

    Dodano po 54 [minuty]:

    po dalszej analizie dochodzę do wniosku, że w spartanie jest mnożnik 1-32, a dzielnik 1-32
    czyli najmniejszy podział wynosi 31/32 czyli przy 50MHz różnica wyniesie ok 1.5MHz !!!! Fatalnie
    Nie wiem czy da się połączyć szeregowo 2 DCM
    i wtedy 31/32 * 31/30 (przy 50MHz będzie 50kHz)
    Czy to prawda, że spartan nie może mieć mnożnika, który przekracza 200MHz
  • #8
    J.A
    Level 28  
    jesli zalezy Ci na wygenerowaniu 2 czestotliwosci rzedu 50MHz, rozniacych
    sie o kilkaset Hz, ale bez koniecznosci osiagniecia dokladnych wartosci,
    to sposob o ktorym pisze swiety mikolaj w watku obok dalby taki
    rezultat;
    mysle o 2 lancuszkach 8-16 bramek z negacja gdzies po drodze, ulozonych
    recznie rownolegle do siebie - calkowite opoznienie lancuchow, a wiec
    i okres generowanych oscylacji bylyby z dokladnoscia do dziesiatek, moze
    setek pikosekund takie same, ale nie identyczne;
    ale raczej nie daloby sie 'on-line' zmieniac roznicy czestotliwosci inaczej,
    jak konfigurujac fpga/cpld na nowo;
    za to daloby sie to zrobic na najmniejszej/najtanszej kostce;
    JA
  • #9
    rosaldo
    Level 12  
    wydaje mi się,że znalazłem:
    rowiązanie jest w wątku nt. DDS
    Link

    I to chyba rozwiązuje problem. 2 Akumulatory 32 bitowe do których dodawane są różne wartości. Banalnie proste, a jednocześnie idealne, jesli chodzi o względną stabilność.
    Jest tylko jedno ale: zegar musi być co najmniej dwukrotnie większy o fout.
    No tylko czy CPLD wydoli 100MHz zegar.
    Po drugie aby wygenerować zegar 100MHz z kryształu 10MHz to znowu jakiś powielacz jest potrzebny. No i masz babo placek. CO teraz?
  • #10
    rosaldo
    Level 12  
    Niestety byłem chyba w błędzie. DDS i akumulatory fazowe nie generują fali 50/50, nawet nie generują fali prostokątnej o jednej częśtotliwości.
    przykład:
    acc (7 downto 0)
    signal adder: integer 127
    acc <= acc + adder
    i wszystko dobrze działa bo adder to połowa acc
    teraz gdy adder <= 126

    Teraz mamy sygnal protokątny modulowany:
    126+126=254
    254+126 = 122
    122+126 = 248
    248 + 126 = 118
    Czyli de facto częstotliwość ta sama co była, tylko po jakimś czasie będzie jitter (inaczej mówiąc modulacja sygnału)