Opisując zmiany w układzie zacznę oczywiście od źródła sygnału sterującego. W oryginale była to synteza na bazie układów AD98..
W międzyczasie pojawił się układ SI5351 nie dość, że tani to jeszcze z dużym zakresem częstotliwości, dość łatwy w programowaniu i o dużej funkcjonalności.
Problemem poprzedniego rozwiązania była kiepska praca dla częstotliwości powyżej 20MHz bo układy AD nie pozwalały na osiągnięcie odpowiedniej częstotliwości a dodatkowo przełączanie nie działało z dostateczna precyzją.
Dla moich potrzeb napisałem (na podstawie dokumentacji i wzorując się na rozwiązaniach w C) swój prosty sterownik SI5351.
Pełny opis z kodem źródłowym znajduje się na GitHub-ie
Sterownik pozwala na korektę zegara SI5351 - dla przykładu mój układ generatora pracuje, po ustabilizowaniu termicznym ok. 180Hz wyżej niz częstotliwość referencyjna 900MHz (zegar SI ma częstotliwość 25MHz).
Dokładność sterowania to mniej więcej 1Hz na częstotliwości 10MHz czyli ok. 10Hz dla 100MHz na wyjściu. Niestety, uPython dla ESP32 ma, w przeciwieństwie do python-a ograniczoną dokładność obliczeń ale jak widać dla potrzeb tego generatora jest to wystarczające.

Na rysunku widać symbolicznie układy użyte na podstawowej płytce (poza dzielnikiem sygnału F0) i widać, że do dyspozycji są trzy sygnały o częstotliwościach F0,F1 i F2. W modyfikowanej wersji DC01/02 korzystam z częstotliwości F0 przy odbiorze i nadawaniu SSB oraz z częstotliwości F1 podczas pracy CW. W tym ostatnim przypadku po prostu sygnał CW jest tworzony bezpośrednio i kluczowany wprost poprzez programowe kluczowanie portu F1 z uwzględnieniem zarówno przesunięcia w stosunku do częstotliwości odbioru oraz bieżącego ustawienia RIT-a.
Na
portalu youtube obejrzeć można jak w praktyce wygląda kontrola generatora z poziomu uPython-a. Zwykle taka kontrola jest elementem większego kodu ale w tym przypadku pokazałem elementarne funkcje napisanego przeze mnie sterownika. Pokazana platforma do programowania w uPython-ie to Thonny (open source).
Przy okazji przepraszam za lekkie rozsynchronizowanie dźwięku i obrazu. Jestem w fazie eksperymentów ze sklejaniem i mieszaniem video ze soba i video z dźwiękiem. Próbuje też różnych aplikacji do tego celu ale chyba pozostanę przy Shotcut (open source).
l.j.
W uzupełnieniu danych na temat generatora SI5351 dodam, że główny program do obsługi DC01/02, napisany oczywiście w python-ie, na etapie uruchomienia odczytuje plik konfiguracyjny ustawiający podstawowe parametry układu.
Plik konfiguracyjny jest typu tekstowego a więc łatwego do korekty za pomocą prostych edytorów i zawiera (na razie) następujące dane:
mpx,4 -> współczynnik podziału heterodyny F0 (wartości 1,2 lub 4)
Fp1,9000000 -> częstotliwość na wyjściu F1
Fp2,9000000 -> częstotliwość na wyjściu F2
fcorr,0 -> korekta częstotliwości zegara SI5351
cwof,800 -> przesunięcie częstotliwości nadawania dla cw w [Hz]
delay,1.0 -> opóźnienie przy pracy cw [sek] co 0.1 sek
Encoder,1 -> zmiana kierunku pracy enkodera
mem,1800000,3500000,7000000,10500000,14000000,18068000,21000000,24890000,28000000 -> wstępne wartości pamięci częstotliwości p1-p9 [Hz]

Dla ułatwienia tych ustawień napisałem też prosty moduł, który można uruchomić podczas startu procesora naciskając odpowiedni klawisz urządzenia. Oczywiście dane te można zmienić ale przewidziałem też ładowanie tych wartości jako domyślne z użyciem innego klawisza.
Jeśli parametr mpx ma wartość 1 to można ustawić na stałe wartości częstotliwości F1 i F2 co może się przydać w użyciu w urządzeniu z jedną lub z dwiema przemianami. Oczywiście F0 dziła zawsze jako główna heterodyna.
Dla mpx o wartości 2 lub 4 opcje dla F1 i F2 są wygaszone a taka konfiguracja jest dedykowana dla urządzenia o bezpośredniej przemianie.
Na podstawie wartości mpx główny program obsługujący trx w trybie bezpośredniej przemiany (dc) koryguje wskazania wyświetlacza i dla przykładu jeśli mpx ma wartość 4 to częstotliwości na ekranie o wartości np. 14001000Hz odpowiada heterodyna F0 o wartości 4x14000000=56000000Hz przy odbiorze oraz nadawaniu ssb natomiast przy pracy cw używane jest wyjście F1 generujące na częstotliwości 14000000+800=14000800Hz.