
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

Poskładanie hardware poszło szybko, oprogramowanie zajęło kilka dni i powstało coś takiego:

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

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

-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

A tak modulacja FM piłą

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.
Cool? Ranking DIY