Skocz do zawartości
RobertG

25MHz generator laboratoryjny sterowany komputerowo

Pomocna odpowiedź

(edytowany)
16 godzin temu, RobertG napisał:

@atMegaTona

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ę.

Cześć,

dałoby się to zrobić bez "tracenia taktów" wystarczy wykorzystać DMA (Direct Memory Acces) . Praktycznie duża część MCU z rodziny STM32 mogą obsługiwać DAC za pomocą DMA, bez udziału CPU. Zobacz np. taką serię STM32F407 (ARM Cortex-M4 taktowany do 168 MHz):

https://www.st.com/en/microcontrollers-microprocessors/stm32f407-417.html

Masz wydajny procesor i dwa 12-to bitowa DAC'i

Do tego masz bezpłatne IDE+kompilator (STM32CubeMX+System Workbench for STM32).

Tutaj kilka linków jak można wygenerować podstawowe przebiegi korzystając z DMA i DAC'a:

http://elastic-notes.blogspot.com/p/blog-page_1.html

https://jeelabs.org/2018/dac-with-dma/

https://stackoverflow.com/questions/43017610/stm32f3-dac-signal-generation-using-dma

Co prawda nie używałem nigdy DAC z DMA, ale często korzystałem z kilku kanałów (do 8 ) ADC z DMA i działa to bardzo dobrze i wydajnie (i to na wolniejszym MCU - np. STM32G070 KBT6).

Pozdrawiam

 

Edytowano przez FlyingDutch
  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

@marek1707 

Dzięki za rady co do filtru. Zastosowałem filtr eliptyczny siódmego rzędu + zostawiłem na końcu filtr by wyciąć zegar. Zero tego filtra musi być przy 25MHz, więc nie mogłem się pozbyć "teoretycznego" kondensatora 405p, więc dałem 390p || 15p 🙂

Policzyłem to wymienionym kalkulatorem, a potem przerysowałem do LTSpice i pozmieniałem trochę cewki, by miały łatwe do kupienia wartości.

Według mnie jest OK. 

DDSFunctionGenerator1.thumb.png.d8d0160447b0bcee392aa9ce578df8e6.png

Plot2.thumb.png.e8ab8e22beb448cf202d8f16a2066018.png

 

 

19 godzin temu, marek1707 napisał:

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.

To też już mam policzone. Dzięki.

DDSFunctionGenerator2.thumb.png.e51721293466f2bd0042f1b390d2fa6b.png

 

 

19 godzin temu, marek1707 napisał:

Jak chcesz z robić transformator wyjściowy?

Planuję wykorzystać taki ferryt, o największym rozmiarze z tego datasheeta. Wybrałem taki, a nie inny kształt, bo sugerowałem się kształtem rdzeni balunów - tutaj ten transformator też działa jako balun. Na razie nie mam tego policzonego. 

 

19 godzin temu, marek1707 napisał:

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. 

Tego nie wiem, ale im niższa tym byłoby dla mnie lepiej, tak 1kHz maximum.

By zejść do niższych częstotliwości ograniczają mnie tylko parametry C51, C52 i charakterystyka transformatora wyjściowego, prawda?

 

PS. na wyjściu dodałem jeszcze trzy włączane niezależnie tłumiki typu pi, każdy po 32dB, by mieć sygnały o malutkich amplitudach.

 DDSFunctionGenerator3.thumb.png.f797761ff85fc31e28a700d9229437a0.png

 

Edytowano przez RobertG
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Widzę, że mają tam dwa rodzaje ferrytów. Jeśli użyjesz rdzenia z N30 (wtedy niestety najwyższe h=8.3mm) z AL=10E3 to jest szansa przy kilkunastu zwojach po każdej stronie na zejście do 1kHz. Ale to tylko moje wstępne szacunki.

Na schemacie filtra coś mi nie pasuje w tej ostatniej "pułapce" 25MHz. Możesz to jeszcze raz sprawdzić? Bo jakbym nie liczył, to ten dziwny kondensator plus 100nH lądują gdzieś w okolicach 20MHz.

Jeśli chcesz z robić tłumik do w sumie >90dB to zastanowiłbym się nad przekaźnikami projektowanymi do pracy w środowisku 50Ω a przynajmniej takimi ze specyfikacją RF. Te co masz to owszem z nazwy są sygnałowe, ale nic o nich nie wiadomo (a to zwykle źle wróży) - przede wszystkim jakie mają pojemności otwartych styków i jakie pasożyty między stykami. To może być dobre do audio, ale na MHz może nie zadziałać jak się spodziewasz tym bardziej, że na jednym stopniu chcesz mieć 30dB w szerokim paśmie. A właśnie (o ile pamiętam) jakieś 30dB sprzężenia to mają low-costowe (czyli < 100zł) przekaźniki specjalnie do RF, np. serii G6K Omrona więc o tych z Relpola to raczej bym zapomniał... Jeżeli już idziesz w coś tańszego, to pomyśl o półprzewodnikowych switchach RF. Potrafią pobierać zero prądu, przenoszą moce >24dBm przy 3.3V, są SPDT, DPDT i większe, np. coś od Skyworks czy Qorvo. W Mouserze tego pełno, z kilkuset typów na pewno coś wybierzesz. Musisz tylko znaleźć taki co pracuje od 0MHz, bo czasem dolne ograniczenie jest dość wysoko..

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

@marek1707

1. Wg. mnie 25MHz filtr jest ok. To widać też na symulacji, którą załączyłem wcześniej, że zero wypada koło 25MHz.

2. Poszukam przekaźników o parametrach wspomnianych przez Ciebie, ale o takim samym footprincie, jak te, które zastosowałem. Jeśli trzeba będzie to kupię droższe, ale na początku spróbuję z tymi, które aktualnie wybrałem. 3x100zł to już sporo, a i bez tego ten generator tani jakoś nie będzie 🙂 Dzięki za uwagę, bo może to zaoszczędzić zamawiania nowego PCB z nowymi footprintami.

3. Co do transformatora, nie bardzo wiem, jak się za to zabrać, ale wyliczyłem tak:

a)  Np (ilość zwojów uzwojenia pierwotnego, wybrana arbitralnie) = 20

b)  AL (z datsheeta ferrytu) = 1*10^4, trzeba przemnożyć przez 1*10^-9, bo tyle ukrywa jednostka, więc wychodzi 1*10^-5

Teraz:

Lp = AL * Np^2 = 1*10^-5 * 20^2 = 400 * 10^-5 = 4 *10^-3 = 4mH

Np/Ns  = 1.22 (z tego kalkulatora, Zin=75, Zout=50)

Ns = Np/1.22 = 20/1.22 = 16

Ls = AL * Ns^2 = 1*10^-5 * 16^2 = 256 * 10^-5 = 2,5 *10^-3 = 2,5mH

Wyniki wrzuciłem do symulacji w LTSpice:

Transformer2.thumb.png.0cd2870ec16b472a321f2d801c7fe702.png

Transformer1.thumb.png.637dd40b9c892e22f5a50e1cbf5acf01.png

Dla 1kHz wyszło mi -8dB.

Całkiem możliwe, że gdzieś popełniłem błąd, ale rozumowanie wydaje mi się OK, bo im większa ilość zwojów, tym wychodzi mniejsze tłumienie dla małych częstotliwości.

Edytowano przez RobertG

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Skończyłem bloki z interfejsem użytkownika (LCD + enkoder), interfejsem z komputerem (I2C <-> USB) i ADC, załączam je poniżej, jakby ktoś chciał zobaczyć. 

UserInterface.thumb.png.1eecbb2578ff038604af4e65eeb5367c.pngComputerInterface.thumb.png.f073d345881c2b12e537567d18c4b2bf.pngADC.thumb.png.55dd665f1a684781875500f721bc044b.png

Nie pomyślałem o tym, że dzielnik dla ADC będzie miał różne wartości w zależności od zakresów napięć, które bym chciał mierzyć, więc nie jest to zbyt uniwersalne w tej formie w jakiej jest. Trzeba by otwierać urządzenie i lutować nowe wartości rezystorów.

 

Rysować płytkę nie jest łatwo. Moje założenia:

- płytka jest dwuwarstwowa, maksymalnie 10cmx10cm, bo takie są najtańsze u Chińczyków,

- na dolnej warstwie jest tylko masa, ścieżki i komponenty są na górnej warstwie,

- osobna masa dla części radiowej i dla części cyfrowej.

Zacząłem od zasilania części radiowej, na razie wygląda ono tak, jak na obrazku. Na czerwono podświetlone są ścieżki z zasilaniem 5V dla części analogowej (dodałem zielonymi kreskami, gdzie te ścieżki konkretnie idą dalej, bo KiCAD nie pozwala podświetlać kilka ścieżek na raz). Na szaro zaznaczyłem sygnał z zegara. Na niebiesko zaznaczona jest droga z DDS, prze filtry, do wzmacniacza.

Vccplusextra.thumb.png.59237291fdc3968c37524f1aea345742.pngvanilla.thumb.png.8a6754604434a45279fe9f7d47000a1f.png

Według mnie, jest ok, zmieściłem się ze wszystkim na jednej warstwie. Ścieżki zasilania pogrubię, by miały mniejszą impedancję, a rezystory i kondensatory zmienię na te w obudowie 0603, bo 0805 są trochę za duże i się nie mieszczę w niektórych miejscach.

Nie wiem, w którym miejscu połączyć obie masy (analogową i cyfrową).

Zapraszam do komentowania 🙂

Edytowano przez RobertG

Udostępnij ten post


Link to post
Share on other sites
22 minuty temu, RobertG napisał:

Nie wiem, w którym miejscu połączyć obie masy (analogową i cyfrową).

Najlepiej jak najbliżej złącza zasilania. Poza tym dziwnie zasilasz ten enkoder, rozumiem, że piny z pull-down? Ja zawsze robiłem common gnd z podciągiem do Vcc na kanałach. Można też zrobić 3 warstwy z laminatów, może nie wygląda to 'pro' ale zadanie spełnia - mniej motaniny i zakrętów a dodatkowo można zegar i sygnał puścić pomiędzy polami masy.

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...