Popularny post RobertG Napisano Listopad 17, 2019 Popularny post Udostępnij Napisano Listopad 17, 2019 (edytowany) Hej, w tym wpisie chciałbym przedstawić moje postępy z budową generatora laboratoryjnego, nad którym ostatnio pracuję. Główne założenia: - cyfrowo przestrajana częstotliwość, aż do 25MHz, - cyfrowo regulowana amplituda, - komunikacja z komputerem przez protokół SCPI (standard komunikacji dla urządzeń pomiarowych), - dodatkowy 12 bitowy ADC i kilka wyjść procka wyprowadzonych na zewnątrz, by urządzenie było bardziej uniwersalne. - komunikacja z użytkownikiem poprzez wyświetlacz, wybór ustawień poprzez enkoder. Poniżej znajduje się schemat blokowy urządzenia (wykonany w LaTeXu). Poniżej znajduje się render aktualnego zarysu płytki, wciąż nie do końca wiem, jak rozmieścić gniazda, enkoder i wyświetlacz. Planuję, że na przodzie będzie enkoder, wyświetlacz i gniazdo USB, a z tyłu wyjścia GPIO, ADC i wyjście generatora. Część modeli 3D zrobiłem sam (BNC, zielone gniazdo, enkoder, malutkie gniazda RF) w OpenSCAD, później zostały one zaciągnięte do FreeCAD, który ma wsparcie dla tworzenia elementów dla KiCADa. To dość pogmatwane, ale pozwala tworzyć modele w języku programowania OpenSCAD. Na schemacie niżej widać generator DDS, wzorowałem się na nocie katalogowej, więc powinno być w miarę ok. Filtry widoczne na wyjściu na razie nie są obliczone. Na poniższym schemacie znajduje się wzmacniacz, nie jestem pewien, czy obwody Vin- i Vin+ są dobrze zaprojektowane. Reszty schematów nie wklejam, bo nie ma tam nic ciekawego, gdyby ktoś chciał zobaczyć, to wszytko znajduje się na GitHubie Części softowej na razie nie ma, ale napiszę ją w C, zaś sam parser SCPI najprawdopodobniej powstanie w języku Forth - spróbuję osadzić jego interpreter na procesorze. W planach mam też zrobienie obudowy 3D, takiej, która pozwalałaby na łatwy dostęp do tych malutkich gniazd radiowych widocznych w lewym górnym rogu renderingu, coś, jak klapka na baterie w pilocie. To też zaprojektuję w OpenSCAD. Zapraszam na GitHub projektu. Edytowano Listopad 17, 2019 przez RobertG 5 Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Listopad 17, 2019 Udostępnij Listopad 17, 2019 28 minut temu, RobertG napisał: wykonany w LATEXu Proszę, błagam, LaTeXu... LATEX to materiał na BALONY 🙂 1 Cytuj Link do komentarza Share on other sites More sharing options...
Gieneq Listopad 17, 2019 Udostępnij Listopad 17, 2019 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. Cytuj Link do komentarza Share on other sites More sharing options...
RobertG Listopad 17, 2019 Autor tematu Udostępnij Listopad 17, 2019 (edytowany) @ethanak poprawiłem, dzięki! 🙂 @Gieneq kod schematu jest na GitHubie, w tym linku, tutaj zaś jest skrypt do generowania z pliku .tex pliku .png Edytowano Listopad 17, 2019 przez RobertG 1 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Popularny post marek1707 Listopad 17, 2019 Popularny post Udostępnij Listopad 17, 2019 (edytowany) Na szybko kilka pytań kontrolnych po rzucie oka na schematy: Jak chcesz z zegara 25MHz (albo jakiegoś innego, ale chyba większy być nie może w tym scalaku) metodą DDS uzyskać 25MHz na wyjściu, gdzie z definicji dostajesz połowę a i to zaśmieconą jak plaża w Sopocie? W jaki sposób chcesz utrzymać jakąkolwiek czystość spektralną sygnału stosując filtr przepuszczający zegar DDSa na wyjście? Innymi słowy na jaką częstotliwość odcięcia zaprojektowałeś ten filtr, bo mi z pobieżnych obliczeń wychodzi coś ok. 70-80MHz 🙄 a powinien być max na kilka MHz i na tyle co najwyżej powinieneś liczyć na wyjściu jeśli urządzenie ma nie być zabawką do oglądania dziwnych przebiegów na oscyloskopie.. Wejścia wzmacniacza 8325 powinny być sprzężone zmiennoprądowo. Co prawda mają one podobny bias, ale moim zdaniem nie możesz na tym polegać i próbować zwierać je opornikiem, bo może to zaburzyć pracę wewnętrznych układów polaryzacji tych wejść. Acha, filtr masz zakończony impedancją 50R i tu znów na wejściu masz 50R co razem daje 25R. Tak miało być? Ogólnie filtr wygląda jak przerysowany w ciemno blok z czegoś innego. Np. po co jest zestaw C15/C16 skoro zaraz dalej masz C51? Do jakiej częstotliwości od dołu chcesz zejść? Bo to wyznacza sposób sprzężeń pojemnościowych a w typowo RF-owym środowisku 50R trudno schodzić do obszaru np. audio. Nie wiem z jakiego sufitu wziąłeś modele do swojej ślicznej wizualizacji, ale indukcyjności 150nH tak nie wyglądają. Może spróbuj poszukać ich w sklepie, bo jeśli nie wstawisz na PCB czegoś w obudowie 805 albo 603 to możesz się zdziwić ich parametrami RF. Poza tym nawet gdybyś robił filtr na 1MHz i z jakiegoś powodu użył jednak dużych cewek przewlekanych,, to takie ich fizyczne ułożenie spowoduje, że będą się rewelacyjnie sprzęgać i cały filtr możesz potłuc o kant d.. EDIT: OK, widzę zdanie: "Filtry widoczne na wyjściu na razie nie są obliczone." To może zrób to, bo to jeden z kluczowych elementów tego urządzenia. Edytowano Listopad 17, 2019 przez marek1707 4 Cytuj Link do komentarza Share on other sites More sharing options...
RobertG Listopad 23, 2019 Autor tematu Udostępnij Listopad 23, 2019 @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. 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 :):) Cytuj Link do komentarza Share on other sites More sharing options...
Anonim Listopad 23, 2019 Udostępnij Listopad 23, 2019 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. Cytuj Link do komentarza Share on other sites More sharing options...
RobertG Listopad 23, 2019 Autor tematu Udostępnij Listopad 23, 2019 @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 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
Anonim Listopad 23, 2019 Udostępnij Listopad 23, 2019 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. Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Listopad 23, 2019 Udostępnij Listopad 23, 2019 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. 2 Cytuj Link do komentarza Share on other sites More sharing options...
Anonim Listopad 23, 2019 Udostępnij Listopad 23, 2019 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 Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Listopad 23, 2019 Udostępnij Listopad 23, 2019 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. 1 Cytuj Link do komentarza Share on other sites More sharing options...
Anonim Listopad 23, 2019 Udostępnij Listopad 23, 2019 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. Cytuj Link do komentarza Share on other sites More sharing options...
Chumanista Listopad 23, 2019 Udostępnij Listopad 23, 2019 @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? 1 Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Listopad 23, 2019 Udostępnij Listopad 23, 2019 (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 Listopad 23, 2019 przez marek1707 2 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!