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).
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).
Na razie mam go tylko w postaci prototypu wetkniętego w płytkę stykową:
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
.
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
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).
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).
Na razie mam go tylko w postaci prototypu wetkniętego w płytkę stykową:
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
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