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

Generator - wobulator na Arduino UNO/NANO + AD9833 ewentualnie ESP32 Wemos D1

Bucefal76 01 Mar 2025 13:50 3255 4

TL;DR

  • Powstał amatorski generator funkcyjny i prosty wobulator na AD9833, sterowany przez Arduino UNO/NANO lub ESP32 Wemos D1 R32.
  • Układ generuje sinus, trójkąt i prostokąt, a interfejs realizuje konsola szeregowa; rampę dla drugiego kanału daje DAC ESP32 lub MCP4725.
  • W obecnej wersji sygnał wyjściowy ustawiono na 1V p-p, a wcześniej sinus i trójkąt miały około 600mV p-p.
  • Aby wyrównać amplitudę, zastosowano dwie ścieżki analogowe: wzmacniacz ze wspólnym emiterem dla sinusa i trójkąta oraz tłumienie prostokąta przed mikserem.
  • Dodatkowe tranzystory pogorszyły maksymalną częstotliwość, a zasilanie części analogowej z płytki CPU przez USB autor uznaje za nieoptymalne.
Wygenerowane przez model językowy.
REKLAMA
📢 Słuchaj (AI):
  • Edit: 03-10-2025:
    Poprawiłem schemat układu normalizującego sygnały wyjściowe, dopracowałem bufor (wtórnik emiterowy), który sprawiał nieco problemów.

    Zupełnie dla zabawy popełniłem generator funkcyjny, sinus, trójkąt oraz prostokąt w oparciu o programowalny generator AD9833 (SPI).

    Ekran oscyloskopu z żółtą falą trójkątną o częstotliwości 998 Hz i amplitudzie szczytowej 1,22 V.

    Ekran oscyloskopu z widocznym sygnałem sinusoidalnym o częstotliwości 998 Hz i wartości szczytowej 1,23 V.

    Wykres oscyloskopowy z sygnałem prostokątnym na ekranie Hantek.

    Projekt używa jako sterownika generatora do wyboru Arduino UNO/ NANO lub ESP32 w Wemos D1 R32 (lub odpowiednie klony).
    Dodatkowo CPU oczywiście realizuje interfejs operatora, w tym przypadku najprostszy z możliwych w postaci konsoli znakowej portu szeregowego.
    Do wyboru jest rodzaj sygnału, częstotliwość, włączenie lub wyłączenie danego kanału (maksymalnie 2).

    Widok konsoli PuTTY z tekstowym interfejsem generatora sygnałów.

    Na razie mam go tylko w postaci prototypu wetkniętego w płytkę stykową:

    Prototyp generatora funkcyjnego z oscyloskopem Hantek.

    Dodatkowo wykorzystałem wyjście DAC ESP32 lub zewnętrzny DAC (MCP4725, i2C) podpiętego do UNO/NANO by generować "ramp signal" w celu sterownia drugim kanałem oscyloskopu. Tak by oscyloskop przesuwał prążek amplitudy wyjścia generatora w czasie gdy programowalny generator zmienia częstotliwość sinusa na pierwszym wejściu, w zadanym zakresie z zadamy krokiem. Powstaje w ten sposób pewnego rodzaju prymitywny wobulator:





    Problemem układu AD9833 jest różnica amplitudy generowanego sygnału, w przypadku sinusa i trójkąta jest to 600mV p-p, a dla prostokąta jest to praktycznie rail to rail.
    Zastanawiałem się jak to elegancko rozwiązać, by mieć niezależnie od rodzaju wybranego sygnału taką samą amplitudę. Pierwszym pomysłem było użycie elektronicznego potencjometru sterowanego z procka (X9C103S). Zmieniało tłumienie sygnału (równał w dół) zależnie od wybranego typu przebiegu.

    Ostatecznie wybrałem nieco bardziej złożone rozwiązanie polegające na zaprojektowaniu układu analogowego, który tworzy dwie ścieżki sygnału.
    Na jednej ze ścieżek nich znajduje się wzmacniacz ze wspólnym emiterem (dla sinusa i trójkąta). Na drugiej ścieżce rezystor (potenciometr montażowy) tłumiący prostokąt przed wejściem do miksera sygnału. Następnie jest już wyjściowy wtórnik emiterowy. Generalnie układ może być taki sobie, moje doświadczenie w elektronice to raptem przeczytanie kursu elektroniki z EP :).

    Schemat elektroniczny generatora funkcyjnego opartego na AD9833.

    Oczywiście wstawienie tej ilość tranzystorów na wyjściu pogorszyło parametry maksymalnej częstotliwości osiąganej przez generator.
    Zasilanie do analogowej czesci jest pociągnięte bezpośrednio z płytki z CPU, co pewno nie stanowi najoptymalniejszego rozwiązania.
    Czyli zasilamy generator z tego samego kompa na porcie USB, z którym gadamy przez konsolę znakową.
    Chętnie przyjmę sugestie jak poprawić.

    W obecnej edycji schematu z poprawionym wtórnikiem sygnał wyjściowy jest tak ustawiony by było ładne 1V p-p.

    Oprogramowanie znajdziecie pod tym linkiem: https://github.com/bucefal76/signal_generator_ad9833
    Gotowe do kompilacji pod VSC z PlatformIO (ESP wsparte na Arduino framework nie native ESP32).
    Tam też są dokładne informacje na temat konfiguracji generatora, patrz README.md, dalej Include/ModuleConfig.hpp.

    Z góry ostrzegam, że może ono być trochę zbyt złożone na pierwszy rzut oka dla amatora szkiców Arduino.
    Jeśli ktoś ma ochotę grzebać wewnątrz to na początek warto przeczytać o MVC: https://pl.wikipedia.org/wiki/Model-View-Controller

    Fajne? Ranking DIY
    O autorze
    Bucefal76
    Poziom 17  
    Offline 
    Specjalizuje się w: kolumny głośnikowe
    Bucefal76 napisał 422 postów o ocenie 449, pomógł 2 razy. Mieszka w mieście Bielsko-Biała. Jest z nami od 2016 roku.
  • REKLAMA
  • #2 21461551
    rb401
    Poziom 39  
    Posty: 3001
    Pomógł: 750
    Ocena: 983
    Fajny projekt. Szczególnie jeśli chodzi o pomiary wobuloskopowe, które jakoś straciły na popularności w obecnych czasach. A szkoda bo niosą sporo informacji.
    Ale tak po prawdzie, tu na dzisiejsze realia, oscyloskop nie jest koniecznym składnikiem systemu pomiarowego, który i tak w tych pomiarach nie prezentuje kształtu przebiegu a jedynie obwiednię.
    I jeśli już mamy tu mikrokontroler to zamiast DAC, generującego oś Y (którą trzeba odpowiednio wyregulować w oscyloskopie i przeliczyć jakoś na częstotliwość), bardziej przydatnym byłby prostownik szczytowy podłączony do ADC. Wtedy system miałby pełnie informacji o charakterystyce i można by ją wyświetlać na wyświetlaczu, czy wysyłać plik z wynikami pomiaru (np. pod Excel) lub graficzny z opisami osi do oglądania na komputerze. Szybciej i wygodniej.
  • REKLAMA
  • #3 21461589
    IS
    Poziom 19  
    Posty: 244
    Pomógł: 16
    Ocena: 96
    ADC w ESP32 to jest nieporozumienie. Musiałby dołożyć zewnętrzny przetwornik.
  • REKLAMA
  • #4 21461939
    Urgon
    Poziom 38  
    Posty: 7244
    Pomógł: 197
    Ocena: 2630
    AVE...

    W podcaście o generatorach DDS sprzed kilku lat wspominałem o drobnej wadzie modułów z AD9833, otóż filtr wyjściowy jest w nich błędny. Może warto go obejść i sprawdzić, czy to rozwiąże problem różnic w amplitudach?

    Sam projekt jest ciekawy i użyteczny, choć nie jestem wielkim fanem środowiska Arduino...
  • #5 21467175
    gulson
    Administrator Systemowy
    Posty: 29327
    Pomógł: 148
    Ocena: 6020
    Dzięki za podzielenie się projektem, sporo rzeczy na ESP32 jest realizowane :)
    Nie znalazłem nigdzie zakresu częstotliwości czy precyzji?
    Podeślij paczkomat i wyślę mały upominek.
📢 Słuchaj (AI):
REKLAMA