logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] Generator arbitralny ATXMega z regulacją wyjścia analogowego -10V do +10V, 8MHz, 2R2

czarusgg 16 Sty 2023 18:25 471 14
REKLAMA
  • #1 20388694
    czarusgg
    Poziom 12  
    Posty: 146
    Ocena: 28
    Witam Wszystkich!

    Buduję generator arbitralny na bazie mikrokontrolera ATXMega. Mikrokontroler tworzy przebieg analogowy na bazie drabinki rezystorowej 2R2, której wyjście podawane jest na wzmacniacze operacyjne. W efekcie końcowym na wyjściu wszystkiego mam sygnał analogowy z zakresu -10 .. +10 V i maksymalnej częstotliwości zmian do 8MHz.

    Chciałbym mieć możliwość odłączania wyjścia z takiego generatora sygnałem cyfrowym 0..+3,3 V. Jak zaprojektować taką funkcjonalność? Na dzień dzisiejszy steruję po prostu przez tranzystor NPN, przekaźnikiem.

    Rozwiązanie o tyle przyjemne, że nie wprowadza do sygnału żadnych zmian i jest "idealnym" wyłącznikiem. Aczkolwiek nie podoba mi się rozwiązanie mechaniczne. Chciałbym zaprojektować wyjście czysto elektroniczne. Podpowie ktoś jak to osiągnąć?

    Z góry dziękuję za wszelkie sugestie...
  • REKLAMA
  • #2 20388749
    stachu_l
    Poziom 38  
    Posty: 2964
    Pomógł: 476
    Ocena: 1112
    Może wystarczy programowo ustawiać 0V jak na wejściu mikrokontrolera jest określony sygnał.
    Chyba, że koniecznie ma być odcięcie do stanu wysokiej impedancji.
  • #3 20388784
    czarusgg
    Poziom 12  
    Posty: 146
    Ocena: 28
    No właśnie zależy mi na odłączeniu wyjścia :). Jak próbowałem zrobić to za pomocą tranzystora NPN w sposób jak na rysunku, to tylko zniekształcało mi sygnał wyjściowy :(.
    Generator arbitralny ATXMega z regulacją wyjścia analogowego -10V do +10V, 8MHz, 2R2
  • #4 20388786
    jarek_lnx
    Poziom 43  
    Posty: 22581
    Pomógł: 4167
    Ocena: 6039
    MOSFET jest całkiem dobrym przybliżeniem elementu stykowego, ale jest bocznikowany diodą co trochę utrudnia, trzeba stosować dwa, JFET nadaje się do AC ale ma sporą rezystancje w stanie włączenia, są scalone klucze analogowe, pokaż schemat, to pomyślimy co gdzie wstawić.

    Dodano po 6 [minuty]:

    czarusgg napisał:
    No właśnie zależy mi na odłączeniu wyjścia
    Jak to rozumiesz, przerwa, zwarcie, brak sygnału?

    czarusgg napisał:
    Jak próbowałem zrobić to za pomocą tranzystora NPN w sposób jak na rysunku, to tylko zniekształcało mi sygnał wyjściowy .
    Próbowałeś zrobić zwarcie do masy, ale tranzystory bipolarne mają asymetryczne wzmocnienie i napięcie nasycenia przez co temu układowi daleko do ideału, były produkowane specjalne tranzystory do takiej pracy (do wyciszania sygnału audio)
  • REKLAMA
  • #5 20388805
    Yansi
    Poziom 16  
    Posty: 167
    Pomógł: 19
    Ocena: 49
    @czarusgg sorry za offtop ale w jakim programie zrobiłeś ten schemat?
  • #6 20388879
    czarusgg
    Poziom 12  
    Posty: 146
    Ocena: 28
    Yansi napisał:
    @czarusgg sorry za offtop ale w jakim programie zrobiłeś ten schemat?


    KiCAD

    Dodano po 3 [minuty]:

    Oto schemat, oczywiście obcięty ze wszystkiego co zaciemniałoby obraz. Zasilanie uC oraz filtrowanie zasilania.

    Generator arbitralny ATXMega z regulacją wyjścia analogowego -10V do +10V, 8MHz, 2R2

    U2A, daje połowę napięcia zasilania do wzmacniacza różnicowego, by dokonać przesunięcia do wartości ujemnych
    U2B, Odejmuje napięcie z U2A od sygnału
    U2C, Mnoży sygnał, także z zakresu -1,65 .. +1,65V, daje zakres ok. -10V .. +10V

    Drabinka R2R jest w wersji scalonej.

    Przekaźnik K1 w tej chwili realizuje odcięcie wyjścia.
    Na schemacie tego nie ma, ale równolegle do cewki przekaźnika wstawiona jest zaporowa dioda zabezpieczająca.
  • REKLAMA
  • Pomocny post
    #7 20389114
    jarek_lnx
    Poziom 43  
    Posty: 22581
    Pomógł: 4167
    Ocena: 6039
    Najprościej użyć klucza analogowego np DG419.

    Rezystory przy wzmacniaczach mają bezsensowne wartości.
    Wzmacniacz, widzę, że ma małą wydajnosć prądową, w fabrycznych generatorach stosują takie które mogą dostarczyć 200mA i rezystor 50R na wyjściu dający standardową rezystancję wyjściową dopasowaną do popularnych kabli koncentrycznych. Tłumików też nie przewidujesz?
  • #8 20389132
    czarusgg
    Poziom 12  
    Posty: 146
    Ocena: 28
    R26 ma mieć właśnie 50Ohm. Nie zwróciłem uwagi, że nie ustawiłem tej wartości. Ale on właśnie ma mieć 50Ohm.

    jarek_lnx napisał:
    Tłumików też nie przewidujesz?


    :( Niestety, domena analogowa nie jest moją mocną stroną... Już idę czytać...

    Dodano po 39 [minuty]:

    No to, teraz zmieniona wersja schematu :). Tłumików nie przewidywałem. Wzmacniacza będę musiał poszukać, takiego, który będzie miał powyżej 8MHz pasma i wydajność prądową większą.

    Generator arbitralny ATXMega z regulacją wyjścia analogowego -10V do +10V, 8MHz, 2R2

    Nie podoba mi się samo wyjście za układem DG418.

    Mianowicie R24 wraz R26 tworzą dzielnik napięcia, który pewnie zniekształci sygnał, oraz C1. Choć pojemność 22pF Raczej nie wpłynie na pasmo rzędu 8MHz.

    Elementy R24 i C1 pochodzą z datasheed do układu DG418.
  • #9 20389582
    jarek_lnx
    Poziom 43  
    Posty: 22581
    Pomógł: 4167
    Ocena: 6039
    czarusgg napisał:
    Elementy R24 i C1 pochodzą z datasheed do układu DG418.
    Ze schematu jak testowali parametry, to nie jest zalecenie do aplikacji.

    Ja używałem wzmacniaczy z prądowym sprzężeniem zwrotnym, mają doskonałe SR, jeśli planujesz generowanie przebiegów prostokątnych szybkość narastania jest ważna, przebieg ze zboczem 1us nie wygląda jak prostokąt.

    czarusgg napisał:
    R26 ma mieć właśnie 50Ohm. Nie zwróciłem uwagi, że nie ustawiłem tej wartości. Ale on właśnie ma mieć 50Ohm.
    Czyli przydał by się klucz analogowy o mierniejszej rezystancji.

    czarusgg napisał:
    Niestety, domena analogowa nie jest moją mocną stroną... Już idę czytać...
    Do czego będziesz używał tego generatora? przykładowo jak testujesz wzmacniacz i chcesz wygenerować 200mVpp
    (nie możesz podać więcej, bez przesterowania wzmacniacza ) z układu który daje do 20Vpp, to tłumiąc sygnał w mikrokontrolerze, z rozdzielczości 8 bit zostanie 1 bit.
  • #10 20390482
    czarusgg
    Poziom 12  
    Posty: 146
    Ocena: 28
    W tej chwili trwają "prace rozwojowe". Do tej pory złożyłem na płytce stykowej układ z drabinką scaloną 4816P-R2R L-103 i wzmacniaczami w układzie MC33079D w taki sposób, że wyjście z drabinki podane zostało na wzmacniacz i wzmocnione do 10V. Całość na ten moment zasilana z zasilacza ATX (-12V, +12V, +3,3V). Do uC wgrany program, który za pomocą DMA wysyła kolejne próbki SINUSA obliczone w arkuszu dla kątów od 0 do 359stopni. W ten sposób osiągnięto maksymalną prędkość 8MS. Daje to realny przebieg o częstotliwości 22KHz z bardzo ładnym sinusem. Wybierając z bufora co n-tą próbkę, można sztucznie zwiększać realną częstotliwość. Przy 16 próbkach wynik jeszcze przypomina sinus a częstotliwość wzrasta do 500KHz. Dlatego, chcę po prostu zrobić generator arbitralny, czyli układ, któremu dostarczamy bufor 360 próbek później za pomocą interfejsu możemy wpływać na kilka parametrów. Ustawiając offset, częstotliwość, amplitudę, generować różne przebiegi. W planach są dwa kanały oraz wejście ADC z możliwością różnego mieszania sygnałów z obu kanałów lub z ADC. Chodzi o modulacje różnego typu. Przy rozdzielczości 8 bitów mam rozdzielczość na drabince 39mV a na wyjściu wzmacniacza 780mV. OK. Pisząc ten opis właśnie doszedłem do wniosku, że dokładność na poziomie 0,7V jest do du...py :) Także projekt chyba właśnie umarł śmiercią naturalną :) Myślałem, że uda mi się uzyskać dokładność przynajmniej 0,5V i zakres -10V .. +10V, co byłoby dla mnie akceptowalne. Chyba, że tak wyskaluję wzmacniacz wyjściowy by mieć zakres -6V .. +6V, wtedy da się zrobić dokładność 0,5V.

    Nie mniej jednak dziękuję bardzo za podsunięcięcie układu DG418 :)

    W tej chwili zastanawiam się nad możliwością poprawy parametrów. Niestety rozdzielczość musi być 8 bitowa. Chyba, że przesiądę się na jakiegoś ARMA z STM32 (mam jeszcze dwie płytki NUCLEO :)) i wtedy da się zrobić 16 bitową rozdzielczość i większą częstotliwość :)
  • #11 20390704
    jarek_lnx
    Poziom 43  
    Posty: 22581
    Pomógł: 4167
    Ocena: 6039
    czarusgg napisał:
    W ten sposób osiągnięto maksymalną prędkość 8MS. Daje to realny przebieg o częstotliwości 22KHz z bardzo ładnym sinusem. Wybierając z bufora co n-tą próbkę, można sztucznie zwiększać realną częstotliwość. Przy 16 próbkach wynik jeszcze przypomina sinus a częstotliwość wzrasta do 500KHz.
    Wiesz jak działają DDSy? akumulator fazy?
    czarusgg napisał:
    kolejne próbki SINUSA obliczone w arkuszu dla kątów od 0 do 359stopni
    Tablica o rozmiarze 2^n ułatwia obliczenia :)

    Tam gdzie próbek na okres robi się mało, pomoże filtr rekonstrukcyjny.

    czarusgg napisał:
    W planach są dwa kanały oraz wejście ADC z możliwością różnego mieszania sygnałów z obu kanałów lub z ADC. Chodzi o modulacje różnego typu
    Nie wyobrażam sobie że zrobisz modulację AM czy FM tą metodą.

    czarusgg napisał:
    Przy rozdzielczości 8 bitów mam rozdzielczość na drabince 39mV a na wyjściu wzmacniacza 780mV. OK. Pisząc ten opis właśnie doszedłem do wniosku, że dokładność na poziomie 0,7V jest do du...py Także projekt chyba właśnie umarł śmiercią naturalną Myślałem, że uda mi się uzyskać dokładność przynajmniej 0,5V i zakres -10V .. +10V, co byłoby dla mnie akceptowalne.
    Jak to policzyłeś?

    czarusgg napisał:
    W tej chwili zastanawiam się nad możliwością poprawy parametrów. Niestety rozdzielczość musi być 8 bitowa.
    Podejrzewam że nie masz nawet 8bit, drabinka ma tolerancję 2% a ty chcesz LSB 0,39% zakresu, DNL tego przetwornika pewnie będzie >1 LSB, statycznie na mierniku możesz sprawdzić czy napięcie dla kilku stanów w pobliżu 0x80
    Charakterystyka przejściowa R-2R z nieprecyzyjnych rezystorów może wyglądać tak
    Generator arbitralny ATXMega z regulacją wyjścia analogowego -10V do +10V, 8MHz, 2R2
    Ale może być też tak
    Generator arbitralny ATXMega z regulacją wyjścia analogowego -10V do +10V, 8MHz, 2R2

    czarusgg napisał:
    Chyba, że przesiądę się na jakiegoś ARMA z STM32 (mam jeszcze dwie płytki NUCLEO ) i wtedy da się zrobić 16 bitową rozdzielczość i większą częstotliwość
    Nie zrobisz 16 bit na R-2R, bardzo drogo wyjdzie. Taniej kupić gotowy przetwornik.
  • REKLAMA
  • #12 20390842
    czarusgg
    Poziom 12  
    Posty: 146
    Ocena: 28
    Owszem, taniej, ale wolniej. Nawet jak przetwornik jest szybki, to wykłada się na komunikacji z nim. Chciałem zastosować DACa z uC, ale drabinka jest o niebo szybsza. Nie robię drabinki sam, tylko używam scalonej. Podane dane pochodzą z oscyloskopu. :) Tylko rozdzielczość z wyliczeń. 20V/256 kroków. Dlatego mina mi zrzedła, jak wynik oscylował w okolicy 780mV. A 39 wyszło z 1/256. Ale pokręciłem 1V dotyczyłby DACa a nie drabinki :( Zakres za drabinką zaś to 0V..3,26V.

    Mam DACa z wejściem równoległym o czasie konwersji 150ns :) To chyba będzie najlepsze rozwiązanie. DAC0808LCN :) Muszę tylko trochę dogłębniej zaznajomić się z jego datasheet i poeksperymentować.

    Czyli teoretycznie można uzyskać 6MS o przyzwoitej stabilności. A w porównaniu z R2R to wręcz bardzo dużej stabilności.
  • Pomocny post
    #13 20391048
    jarek_lnx
    Poziom 43  
    Posty: 22581
    Pomógł: 4167
    Ocena: 6039
    czarusgg napisał:
    Owszem, taniej, ale wolniej. Nawet jak przetwornik jest szybki, to wykłada się na komunikacji z nim. Chciałem zastosować DACa z uC, ale drabinka jest o niebo szybsza. Nie robię drabinki sam, tylko używam scalonej.
    Na rezystory do R-2R 16bit musiał byś wydać kilka tysięcy złotych, no i nie podłączysz tego do portu uC, bo ten ma sporą rezystancję, która zepsuje dokładność, w takiej cenie są takie przetworniki że hoho...
    Przykładowo znalazłem 16bit 2,5GSPS - za 700zł - cena kilka razy niższa niż R-2R a parametry lepsze.

    Generalnie jak ma być szybkie, szukaj przetworników z interfejsem równoległym.

    czarusgg napisał:
    Nie robię drabinki sam, tylko używam scalonej.
    Dlaczego to ma tolerancję tylko 2%?

    czarusgg napisał:
    Dlatego mina mi zrzedła, jak wynik oscylował w okolicy 780mV.
    Czego wynik? coś mi się nie zgadza.
  • #14 20391081
    czarusgg
    Poziom 12  
    Posty: 146
    Ocena: 28
    Jeśli po wszystkich wzmacniaczach chciałem mieć zakres -10V .. +10V, czyli zakres 20V, ale steruję to tylko 8 bitami, zatem mogę wystawić tylko 256 wartości. Zatem jeśli 20V podzielę przez te 256 dostępnych dla mnie kroków to wyjdzie 0,078125 Czyli z takim krokiem mógłbym sterować napięciem na wyjściu. czyli 78 mV. (Teraz wychodzi nawet na to, że mam klopoty z liczeniem w zakresie do 100 :D) Z tego mi się to wzięło. Jeśli wzmocnienie ostatniego wzmacniacza dobrałbym tak, że dla 0V z drabinki otrzymywałbym -6V a z 3,28V z drabinki otrzymywałbym 6V, to miałbym zakres 12V / 256 = 0,046875 czyli 46mV co już jest poniżej dokładności 0,05V. Generalnie rzecz ujmując, z 8 bitami nie da się nic sensownego zrobić. Generator zaś z zakresem 2V i dokładnością 7mV na nic mi :( To już taniej, łatwiej i lepiej jest kupić gotowego chińczyka za 700zł :) -20V .. +20V i 60MHz :) Chciałem po prostu sam zbudować z zakresem częstotliwości do 1MHz, ale chyba nie tędy droga. Same DACi odpowiednio szybkie równoległe nie dadzą mi tego co ten chińczyk :) Nie mówiąc już o całym torze wyjściowym :)

    Także odpowiedź na swoje pytanie uzyskałem. Za co dziękuję bardzo. Da się zrobić sensowny generator do powiedzmy 300KHz (nie każdy kształt przebiegu) na wbudowanym DACu w uC z 12 bitową rozdzielczością :) Popłynąłem po prostu na fali tego, że mogę "szybko" wystawiać próbki za pomocą DMA i tego, że przy niskich rozdzielczościach przebieg na oscyloskopie z drabinki wyglądał bardzo "ładnie" :) Oczywiście przy próbie uzyskania większych częstotliwości i dokładności zaczynam "dostrzegać" ograniczenia tej metody.

    W zasadzie DAC w uC jest o niebo lepszy, i "tylko" 8 razy wolniejszy :)

    To ostatnie, to oczywiście sarkazm...

    No i lipa, nawet wbudowany DAC o czasie konwersji 1us nie za bardzo się nadaje do DDS :(

    Gdy użyję tylko 10 próbek na okres sygnału, częstotliwość spadnie do 100KHz. A z 10 próbkami świata się nie zwojuje.

    Biorąc pod uwagę nawet ten scalak, co go posiadam z czasem 150ns, mogę sobie pozwolić na 9 próbek na 1MHz. Czyli przy "szczegółowych" próbkach da się uzyskać co najwyżej kilka setek KHz :(

    A chińczyki staniały do ok. 500zł.

    Sam projekt pozbawiony sensu.

    Dziękuję wszystkim i zamykam....
  • #15 20391249
    czarusgg
    Poziom 12  
    Posty: 146
    Ocena: 28
    Wykazałem bezsensowność całego przedsięwzięcia:)

Podsumowanie tematu

✨ Użytkownik buduje generator arbitralny oparty na mikrokontrolerze ATXMega, który generuje sygnał analogowy w zakresie -10V do +10V z maksymalną częstotliwością 8MHz. Obecnie używa tranzystora NPN do odłączania wyjścia, ale poszukuje elektronicznego rozwiązania. W dyskusji zaproponowano użycie kluczy analogowych, takich jak DG419, oraz wzmacniaczy o wysokiej wydajności prądowej. Użytkownik eksperymentuje z drabinką R2R i wzmacniaczami MC33079D, a także rozważa zastosowanie DAC0808LCN dla lepszej stabilności i wydajności. Wskazano na problemy z dokładnością przy użyciu 8-bitowego przetwornika oraz na wyzwania związane z generowaniem sygnałów o wysokiej jakości.
Wygenerowane przez model językowy.
REKLAMA