DDS_1_00a.zip

Dwukanałowy generator DDS 600kHz na ESP32

https://obrazki.elektroda.pl/9289076200_1640030671_thumb.jpg Pracując nad kolejnym projektem stwierdziłem, że brakuje mi drugiego generatora sygnałowego. Tak zrodził się pomysł, aby zrobić na szybko generator na jakimś gotowym, tanim mini-module, do tego wyświetlacz LCD2x16 i enkoder z przyciskiem do wyboru parametrów. No i oczywiście oprogramowanie sterujące wszystkim. Po krótkim przeglądzie opcji na placu boju został tylko ESP32, a konkretnie DevKit-C v4. Trochę trudniej było z zakresem funkcjonalnym, bo apetyt rośnie w miarę jedzenia :-). Tak więc z prostego generatora zrobił się całkiem wypasiony. Poskładanie hardware poszło szybko, oprogramowanie zajęło kilka dni i powstało coś takiego: https://obrazki.elektroda.pl/6180346400_1640030958_thumb.jpg Parametry generatora -Dwa kanały DSS mogące pracować niezależnie lub synchronicznie (w stosunku częstotliwości 1:1 do 1:20). Tutaj praca synchroniczna w stosunku 3:1 Kanał 1: 75KHz, kanał 2: 25kHz https://obrazki.elektroda.pl/9179141600_1640033136_thumb.jpg -Zakres częstotliwości każdego kanału 0.1Hz - 600kHz z dokładnością ustawiania co 0.1Hz. -Zmiana częstotliwości z ustawialnym skokiem dla każdego kanału: x0.1Hz x1Hz, 10, 100, 1000Hz, 1k, 10k, 100k -Ustawialne przebiegi dla każdego z kanałów: --Sinus, --piła narastająca, --piła opadająca, --trójkąt, --prostokąt (50%). -można zapisać i potem odtworzyć 6 zestawów ustawień. Pierwszy zestaw jest odtwarzany automatycznie przy starcie urządzenia. Jest to przydatne przy dłuższej pracy z jakimś projektem. Tak wygląda prostokąt i piła ("najtrudniejsze" przebiegi z racji stromych zboczy sygnału) o maksymalnej częstotliwości 600kHz: https://obrazki.elektroda.pl/1352427400_1640032679_thumb.jpg -Drugi kanał może modulować pierwszy kanał: AM - głębokość modulacji od 5 do 100% co 5%. FM- dewiacja od 0,1% do 50% OOK – kluczowanie (wypełnienie) od 10 do 90% FSK – kluczowanie (wypełnienie) od 10% do 90%, offset częstotliwości (w dół) od 0,1% do 50% Sweep (przemiatanie od ustawionej częstotliwości do częstotliwości N razy niższej) – czas 1..10sek, N=2..100. Np. do badania charakterystyki częstotliwościowej układu. -Maksymalna częstotliwość sygnału modulującego 20kHz, -Sygnał modulujący (o zakresie napięcia 0-2.4V) można też podać z zewnątrz na dodatkowe wejście generatora. Tak wygląda sinus zmodulowany trójkątem https://obrazki.elektroda.pl/9655836300_1640032632_thumb.jpg A tak modulacja FM piłą https://obrazki.elektroda.pl/2116875200_1640032891_thumb.jpg Trochę danych szczegółowych: Wykorzystuję wewnętrzny DAC i DMA do generowania przebiegu. Wyjścia DAC są buforowane, ale napięcia wyjściowe są w poziomach DAC-a 0..3V (asymetryczne), z racji zasilania tylko dodatnim napięciem. Bufor wyjściowy ma również filtr dolnoprzepustowy, bo trzeba wyfiltrować wszystkie zakłócenia i stany przejściowe, oraz wyższe harmoniczne. Próbkowanie sygnału wyjściowego jest 6.67 MSPS, wiec dla maksymalnej częstotliwości 600kHz przebieg składa się z 11 próbek. Dla modulacji próbkowanie (przeliczanie) jest 0.22 MSPS, co ogranicza maksymalną częstotliwość modulacji do 20kHz (przy zachowaniu 11 próbek/okres przebiegu modulującego) Wszystkie przebiegi (w tym prostokąt) są generowane jako DDS. Dla fali prostokątnej zbocza mają czasy narastania/opadania rzędu 200ns. Tablice LUT dla przebiegów są 8 bitowe (rozdzielczość DAC w ESP32 to 8 bitów) i 1024 elementowe. Zasilanie jest 7-25V (wbudowana przetwornica step down) lub 5V z USB. Program napisany w C z wykorzystaniem RTOS dla ESP32. Środowisko IDE Visual Studio + VisualGDB , do tego debugger JTAG FTDI. Obudowa metalowa (kupiona), przedni panel to wydruk 3D. Płyta główna (z płytki uniwersalnej) zawiera złącza do ESP, LCD, enkodera, JTAG-a oraz bufory wyjściowe (na tranzystorach) Sterowanie generatorem jest następujące: *Obracanie enkoderem zmienia generowaną częstotliwość wybranego kanału *Wciśnięcie enkodera i obracanie przy wciśniętym zmienia skok zmiany częstotliwości (x1Hz,x10Hz…x100k) *Wciśnięcie i puszczenie (kliknięcie) bez obracania zmienia cyklicznie z kanału 1 na kanał 2, a z kanału 2 do obsługi menu (a w nim wybór przebiegu i modulacji) i potem znów powrót do kanału 1. Schematy układu (osobno generator i osobno bufor) są zamieszczone w kolejnych postach. W załączniku pliki firmware do wgrania (oczywiście trzeba rozpakować zip-y i wgrywać pliki *.bin), oraz instrukcja flashowania w pliku pdf.

  • DDS_1_00a.zip
    • DDS_1_00a.bin


Pobierz plik - link do postu