Skocz do zawartości
RobertG

25MHz generator laboratoryjny sterowany komputerowo

Pomocna odpowiedź

28 minut temu, RobertG napisał:

wykonany w LATEXu

Proszę, błagam, LaTeXu... LATEX to materiał na BALONY 🙂

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

 

3 godziny temu, RobertG napisał:

dodatkowy 12 bitowy ADC i kilka wyjść procka wyprowadzonych na zewnątrz, by urządzenie było bardziej uniwersalne.

A co to może być? Ale projekt wygląda bardzo ambitnie, ciekaw jestem co będzie dalej 😄 

Ale i też mam pytanie do LATEXu 😄 Jak zrobiłeś ten schemat? Ostatnio dużo w tym robię, co prawda nie miałem potrzeby rysowania schematów, bo rysuję je osobno w Corelu i załączam jaki grafiki ale zawsze warto poznać coś nowego.

Udostępnij ten post


Link to post
Share on other sites

@marek1707 dzięki wskazanie błędów!

Co do filtru, na razie na razie mam taką symulację (LTSpice), nie znam się na projektowaniu filtrów, założyłem, że:

- do kilku MHz tłumienie powinno być równe zero,

- powyżej powinno znacząco rosnąć

- dla częstotliwości  zegara (u mnie 25MHz) powinno być maksymalne.

sim-circuit.thumb.png.348d4dc5799c87c4f4c5d34bd10fc999.png

sim-plot.thumb.png.60198e77e976cec9aa0944bd2f37e1dd.png

 

Na pewno jeszcze ten filtr poprawię z czasem.

 

Swoją drogą, to pierwszy raz, gdy użyłem LTSpice do czegoś realnego, jego skróty klawiszowe są kosmiczne :):)

Udostępnij ten post


Link to post
Share on other sites

Nie lepiej byłoby użyć szybszy procesor i modelować przebiegi DACem zamiast tak dziwować? Urządzenie przydatne w warsztacie ale swoją drogą większość oscyloskopów cyfrowych ma też generator przebiegów więc chyba tylko dla celów edukacyjnych bo praktycznych walorów budowy czegoś takiego praktycznie nie widzę. Słowem - więcej z tym pierniczenia niż pożytku.

Udostępnij ten post


Link to post
Share on other sites

@atMegaTona 

1. Przebiegi z DACa też trzeba by filtrować i też potrzebny byłby sterowany cyfrowo wzmacniacz, by móc programowo zmieniać amplitudę.

2. Myślę, że gdyby procek robił inne rzeczy (komunikacja z komputerem, obsługa GUI, etc), to traciłby takty i DAC nie byłby zawsze aktualizowany w porę.

3. Częścią składową AD9832 jest własnie 10 bitowy DAC, ale prócz tego ma masę innych rzeczy 🙂

Udostępnij ten post


Link to post
Share on other sites

Cóż, jak kto lubi 🙂 UC od analoga ogólnie są bardzo fajne tylko przeważnie mają nieco poślizgu z możliwościami procków, że tak powiem, mainstreamowych i wyższą cenę co z kolei rekompensują jakością. Mimo wszystko uważam, że do budowy 25MHz generatora przy obecnym asortymencie producentów lepszy byłby szybszy procesor a sam wzmacniacz to też obecnie nie problem.

13 minut temu, RobertG napisał:

Myślę, że gdyby procek robił inne rzeczy (komunikacja z komputerem, obsługa GUI, etc), to traciłby takty i DAC nie byłby zawsze aktualizowany w porę.

Od tego jest przecież DMA. a do  komunikacji i gui można wykorzystać RTOS pozostawiając resztę zasobów dla dowolnego celu.

Udostępnij ten post


Link to post
Share on other sites
14 minut temu, atMegaTona napisał:

modelować przebiegi DACem zamiast tak dziwować...  więcej z tym pierniczenia niż pożytku

Lekka kompromitacja, nieprawdaż? Nie ma znaczenia czy cyfrowe dane dla DACa pochodzą z procesora, FPGA czy z akumulatora fazy układu DDS. Filtr rekonstrukcyjny musi być zawsze, jeśli tylko nie chcesz mieć ogromnych śmieci w widmie, z definicji istniejących w sygnale skwantowanym w czasie i amplitudzie. Przy okazji darmowa porada: jeśli naprawdę nie masz pojęcia o temacie, to się chłopie nie odzywaj albo ogranicz się do zadawania pytań.

@RobertG Zero filtra w punkcie 25MHz to dobry pomysł. Rzeczywiście powinien to być filtr dolnoprzepustowy do co najwyżej kilku MHz, wejście i wyjście 50Ω, stroma ch-ka częstotliwościowa (moim zdaniem absolutne minimum w tym przypadku to filtr piątego rzędu). Jak rozumiem posługujesz się jakimś narzędziem do projektowania takich rzeczy, bo samodzielne liczenie trochę nie ma sensu. Problem nie jest w równaniach, tylko w optymalizacji, bo elementy filtra muszą być pobrane z szeregów. Kondensatory co najwyżej z E24 a indukcyjnoiści najlepiej z E6. Jeżeli pokazujesz na schemacie 405pF albo 6uH, to jest to projekt czysto teoretyczny, bez szans na praktyczną realizację. Nie wiem jak tam sobie rozłożyłeś bieguny i zera, ale w Twoim układzie nie zależy aż tak bardzo na równomierności ch-ki w paśmie przenoszenia (nawet kilka dB zafalowania możesz skompensować wzmacniaczem PGA, mi.in. po to go masz na wyjściu) a znacznie bardziej na stromości opadania w paśmie zaporowym więc dobrze byłoby policzyć filtr eliptyczny albo nawet Czebyszewa 7-go rzędu. To nadal nie jest jakiś kosmos w sensie skomplikowania i wartości elementów (choć dotyka już sufitu możliwości praktycznej realizacji), a da dobre wyniki. Spróbuj użyć jakiegoś kalkulatora, np pierwszego z brzegu:

https://rf-tools.com/lc-filter/

Możesz tam na szybko oszacować taki układ a i LTSpice niepotrzebny. Dodatkowo program może podawać wartości elementów "rzeczywistych" a nie "dokładnych" więc od razu widać co trzeba kupić i jak wygląda ch-ka na takich zaokrąglonych a nie idealnych wartościach. Z tego powodu trochę nie ma sensu robić dłuższych filtrów niż 7, bo coraz trudniej dostawać coraz lepsze tłumienia i ostre zbocza z powodu konieczności stosowania elementów o wartościach "skwantowanych" np. do E24. Dodatkowo bardzo trudno zrobić dobry layout takiego filtra a dla tłumienia >40dB trzeba już myśleć o separowanych sekcjach, ekranach itp. rzeczach.

Pomyśl o wejściu swojego wzmacniacza. Analog podaje sposób sprzężenia dla sygnału asymetrycznego i skorzystaj z tego przeliczając oczywiście układ dla 50R.

Jak chcesz z robić transformator wyjściowy?

Nie odpowiedziałeś na pytanie o planowaną częstotliwość dolną układu. Być może warto zrobić osobny tor wyjściowy (filtr plus regulowany wzmacniacz mocy) dla zakresów audio bo sprzęganie syganłów <1MHz w liniach 50R wymaga sporych pojemności, które z kolei nie srawdzają się kompletnie na MHz. 

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites
8 minut temu, marek1707 napisał:

Lekka kompromitacja, nieprawdaż?

Nieprawdam :) To oczywiste, że nie ma znaczenia skąd pochodzą dane dla DACa, pytanie natomiast jak łatwiej zrealizować projekt, czy wyciskać co się da z wolniejszej kostki czy użyć szybszej i pozostawić sobie przestrzeń możliwości. Oczywistym też jest, że jakiś filtr musi być ale zdecydowanie łatwiej będzie go zestawić kiedy DAC będzie szybszy, czyż nie?

14 minut temu, marek1707 napisał:

Przy okazji darmowa porada: jeśli naprawdę nie masz pojęcia o temacie, to się chłopie nie odzywaj albo ogranicz się do zadawania pytań.

Dzięki! :D

Udostępnij ten post


Link to post
Share on other sites

Drobiazg, mam nadzieję, że weźmiesz sobie do serca.

A więc chcesz szybszego DACa i w ogóle zrobić to lepiej i mieć - jak to było? - "przestrzeń  możliwości" 🙂 OK, pomyślmy chwilę. Mam nadzieję, że kolega @RobertG nie obrazi się za zaśmiecanie wątku. Zakładam, że wiesz jak działa DDS. Nawet tu, w stosunkowo tanim AD9832 próbki do DACa wypadają z prędkością głównego zegara czyli co 40ns. Proponujesz procesor, który jak rozumiem ma taki szybki DAC wbudowany, bo jeśli nie, to musisz go jakoś podpiąć. Z oczywistych względów wszelkie I2C/SPI odpadają. Zostaje zatem albo sprzęg równoległy albo LVDS albo jakiś dedykowany do video. Kupujesz zatem szybki DAC, podłączasz go jakoś do procesora i teraz już tylko musisz zapodawać próbki. DMA mówisz? Tak czy inaczej musisz przygotowywać co 40ns kolejną próbkę. Taka jest zasada. Nie, nie możesz policzyć ich a priori i użyć bufora kołowego w pamięci RAM przechowującego obraz sygnału, bo w każdym okresie próbki będa inne. Nawet jeśli DMA jest w stanie kotłować 25Msps na wyjście, to tak czy inaczej musisz je liczyć na bieżąco zanim je wyślesz. Może tylko jjitter będzie mniejszy niż gdybyś wypychał je programowo. Zaskoczony? Mam nadzieję, że nie - przecież z założenia rozumiesz DDS, który umożliwia wygenerowanie dowolnej częstotliwości w całym swoim paśmie ze stałym krokiem. Powiedz zatem jaki procesorek za kilka złotych (bo większość Twojego budżetu poszła już na DACa) poradzi sobie z policzeniem (nie przeczę, z zasady dość prostym) kolejnej próbki sygnału w czasie 40ns? Zostaje wtedy jeszcze jakiś czas na wykonywanie postulowanego RTOSa czy GUI?

"Nie lepiej byłoby użyć szybszy procesor i modelować przebiegi DACem zamiast tak dziwować?" - palnąłeś głupotę i tyle, nie ma co owijać w bawełnę i pleść o szybszych DACach i łatwiejszych filtrach.

Nie rozumiem też tego tekstu o "wyciskaniu co się da z wolniejszej kostki". Przecież jeśli scalak chodzi do 25MHz to naturalnym jest, że oczekujemy że będzie to robił. Zakres wyjściowy do kilku MHz jest dla niego zupełnie naturalny i robi to bez łaski a wyżej nie zadziała z zasady. Żeby dostać 25MHz trzeba mieć DDS pracujący na 100MHz - proste. A jeśli nie synteza bezpośrednia, to można wziąć te kilka MHz, zrobić mieszacz, na drugie wejście podać jakieś dobre TCXO i mieć kolejny zakres np. do badań radia czy co tam trzeba. Poza tym na częstotliwości RF są gotowe, scalone syntezery z PLL. To żadna magia ani wyciskanie.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

 

38 minut temu, marek1707 napisał:

Tak czy inaczej musisz przygotowywać co 40ns kolejną próbkę. Taka jest zasada. Nie, nie możesz policzyć ich a priori i użyć bufora kołowego w pamięci RAM przechowującego obraz sygnału, bo w każdym okresie próbki będa inne. Nawet jeśli DMA jest w stanie kotłować 25Msps na wyjście, to tak czy inaczej musisz je liczyć na bieżąco zanim je wyślesz. Może tylko jjitter będzie mniejszy niż gdybyś wypychał je programowo. Zaskoczony?

  Prawdę mówiąc trochę tak. Byłem pewny, że to ma działać dokładnie tak jak to co zanegowałeś. Pozostałaby jedynie kwestia odpowiedniego dobrania priorytetów a co do prędkości taktowania to od zawsze miałem takie przeświadczenie, że jeśli chodzi o komputery to im szybciej tym lepiej więc i w tym przypadku również, prawda? ;) Może nie zrozumiałem dokładnie przeznaczenia tego urządzenia dlatego nie wiem po co w każdym okresie próbki miałyby być inne.

Udostępnij ten post


Link to post
Share on other sites

@marek1707 w sumie nie do końca rozumiem. To jest:: co (poza ograniczeniami pamięci) powstrzymuje nas przed zbuforowaniem całego jednego okresu sygnału a następnie kopiowaniem go do bufora DMA co tyle próbek ile ten bufor zmieści?

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
1 godzinę temu, atMegaTona napisał:

nie zrozumiałem dokładnie przeznaczenia tego urządzenia

Tu nie chodzi o przeznaczenie, ale o zasadę pracy systemu DDS. Naiwne podejście do generowania sygnałów za pomocą DACa bazuje na tablicy próbek jednego okresu i okresowym jej odczytywaniu. Jeżeli stablicujesz w ten sposób coś na powiedzmy 256 pozycjach i odczytujesz je co 1ms to dostajesz przebieg wyjściowy o okresie 256*1ms czyli dokładnie 3.90625Hz. Jeżeli dysponujesz procesorem z zegarem np. 10MHz a czas "międzypróbkowy" liczysz jakimś timerem, to następna większa częstotliwość będzie miała okres 256*1.0001ms (dodałem 100ns tj. jeden tick zegara 10MHz więcej) czyli 3.90586Hz. Na razie idzie nieźle: mamy krok 0.00039Hz. Niestety taka metoda ma kilka wad:

  • Przestrajany filtr. Sygnał wyjściowy zawiera mocną składową zegara, który jest zawsze (akurat w tym przykładzie) 256 razy wyższy niż aktualna prędkość próbkowania. To wydaje się fajne, bo przecież łatwo zrobić dobry filtr oddzielający 3Hz od 768Hz np. o częstotliwości odcięcia 20Hz, ale gdyby przyszło do przestrajania to nagle musisz tym samym filtrem odciąć 25.6kHz od 100Hz a przecież przyjęty filtr "kończy się" na 20Hz. Powienieneś mieć zatem filtr przestrajany "podążający" niejako za okresem próbkowania. Jest to kompletnie niepraktyczne, drogie i trudne. Można sobie wyobrazić taktowany odpowiednim zegarem filtr z przełączanymi pojemnościami który by to załatwił, ale "drogie" wciąż zostaje. Poza tym "tylko" 256-krotny oversampling powoduje, że np. generując niższe tony w pasmie akustycznym słychać piszczenie zegara, bo on także leży w zakresie zainteresowania naszego ucha. Wydłużając tablicę np. do 1024 próbek i dając zegar 1024 razy szybszy, szybko zaczynasz mieć z kolei problemy z generacją wyższych częstotliwości. 
  • Zwiększający się krok częstotliwości gdy jesteśmy coraz wyżej. W przykładzie z tablicą 256 próbkową dla okolic 1kHz masz już do wyboru jedynie 1001.6Hz (timer z okresem 3.9us) albo 976.5625Hz (timer ustawiony na 4.0us) więc krok urósł do zaskakujących 25Hz 😞 A co będzie na 5kHz? Masakra..
  • Z mojego punktu widzenia najistotniejszą wadą podejścia ze zmianą okresu próbkowania jest właśnie.. zmiana okresu próbkowania. Jest dobrze gdy masz trywialny przykład z jednym sygnałem generowanym na jedno wyjście. Czasem jednak chciałbyś zagrać dziesięcioma palcami na klawiaturze polifonicznej i wtedy co? Potrzebujesz 10 timerów, 10 DACów i miksowania analogowego? Kompletny bezsens. Poza tym bardziej rozbudowane systemy nie zawsze wysyłają sygnał od razu na wyjście. Czasem trzeba coś odfiltrować, zmodulować czy zniekształcić jeszcze w procesorze i wtedy jeden wspólny zegar (sample rate) dla wszystkich bloków takiego toru DSP jest zwyczajnie koniecznością.

Idea DDS spełnia za jednym zamachem wszystkie te wymagania. Kiedyś tu opisywałem po krótce jak to działa ale jest tego teraz tyle w sieci, że warto poszukać i poczytać. Jakby co, pytaj. Przepraszam wszystkich za spory OT.

BTW: Jedynie stosując DDS możesz na głupim AVR zrobić syntezator dający np. 16-głosową polifonię korzystający z jednego timerka dla taktowania i jednego na wyjście PWM.

EDIT: Odpwiadam @Chumanista:

"co (poza ograniczeniami pamięci) powstrzymuje nas przed zbuforowaniem całego jednego okresu sygnału a następnie kopiowaniem go do bufora DMA co tyle próbek ile ten bufor zmieści?"

Nic, ale DDS tak nie działa. Tak jak napisałem: każdy okres sygnału wyjściowego będzie zawierał inny komplet próbek z tablicy więc musisz de facto przygotować każdą z nich od nowa. "Przygotowanie" jest dość proste, bo polega na policzeniu adresu z tablicy wavetable i pobraniu zaadresowanej próbki, ale tego DMA nie zrobi samo. Nie jest ważne czy będziesz ten algorytm robił blokowo tj. cały nowy bufor (dla DMA?) w jednej pętli czy każdą próbkę osobno. Żeby utrzymać się w czasie rzeczywistym musisz generować je z prędkością przyjętego sample rate, czyli w tym wypadku 25MHz. I tyle.

Edytowano przez marek1707
  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...