Transceiver uSDX z Adruino Nano

Osobiście uważam, że “prawdziwe” radio SDR to takie, gdzie sygnał radiowy jest odbierany przez antenę, a następnie (ewentualnie po przejściu przez bierne układy filtrujące), próbkowany przez przetwornik analogowo-cyfrowy. Dalsza obróbka sygnału odbywa się w domenie cyfrowej. Jednak do kategorii SDR włącza się także inne urządzenia, które w mniejszym lub większym stopniu korzystają z przetwarzania cyfrowego sygnału. Przykładem jest właśnie opisany poniżej jeden z wariantów transceivera uSDX. Powstał on po lekturze ciekawego artykułu „Transceivery QRP uSDX”, który był opublikowany w magazynie „Świat Radio” nr 2/2021.

Projekt uSDX sięga korzeniami do produktów firmy „QRP Labs” https://www.qrp-labs.com/. Na podstawie bardzo udanego mini-transceivera QCX Guido (PE1NNZ) wymyślił projekt uSDX w celu wypróbowanie tego, co można osiągnąć przy minimalnej złożoności układowej, przenosząc ją do realizacji w domenie cyfrowej 8-bitowego mikrokontrolera ATmega328P. Przyjęte podejście polega na uproszczeniu projektu tam, gdzie to możliwe, przy jednoczesnym zachowaniu rozsądnej jakości. Rezultatem tego jest tani, prosty w budowie, wszechstronny transceiver QRP SSB/CW/digi, który umożliwia wykonywanie QSO (także w warunkach zawodów), nawet jeśli względu na eksperymentalny charakter niektóre elementy projektu są jeszcze w fazie rozwoju.

Układ odbiornika jest rozwiązaniem z bezpośrednią przemianą. Wykorzystuje on układ scalony typu 74HC4053 jako wysokowydajny detektor kwadraturowy, znany również jako „detektor Tayloe N7VE” lub „mieszacz I-Q”. Detektor ten charakteryzuje się bardzo wysoką wartością punktu przechwytu trzeciego rzędu (IP3) i dużym zakresem dynamicznym, a także niskimi stratami. Tak naprawdę mamy tu 2 mieszacze, które są kluczowane sygnałami o częstotliwości pracy, lecz przesuniętymi między sobą o 90 stopni. Sygnały kluczujące dla detektora CL0/CL1 generowane są w module zawierającym układ syntezatora częstotliwości PLL typu Si5351, który jest sterowany z procesora za pośrednictwem magistrali I2C .

Jest kilka typów podwójnych wzmacniaczy w obudowie DIL-8 na rynku; pokazany na schemacie NE5532 jest łatwo dostępny, lecz pracuje on tutaj w warunkach poza-katalogowych. Lepiej użyć tutaj wzmacniacz z kategorii mało-szumnych LM4562, lub nawet LT6231. Zamiast układu 74HC4053 jako detektor kwadraturowy częściej stosuje się układ FST3253. Rezystancja włączonego klucza w tym układzie jest znacznie mniejsza, dlatego trzeba ograniczyć wzmocnienie IC1A/B poprzez dodanie rezystorów 100 omów między C28 i pinem 2 oraz między C11 i pinem 6. Wpływ na jakość odbioru ma także symetria obu torów analogowych I i Q. Warto dobrać elementy w taki sposób, aby ich wartości w wymienionych grupach były możliwie zbliżone do siebie: C9/C10/C11/C28; R6/R7; C7/C30; C26/C27; R2/R3/R4/R5.

Sygnały wyjściowe z detektora, po wzmocnieniu i ograniczeniu pasma akustycznego przez podwójny wzmacniacz operacyjny IC1A/B są podawane bezpośrednio do wejść multipleksera przetwornika analogowo-cyfrowego mikrokontrolera ATmega328P, jaki jest w użytym tutaj module Arduino Nano. Dalsze przetwarzanie sygnału następuje wyłącznie w domenie cyfrowej, co jest sporym osiągnięciem, biorąc pod uwagę ograniczone możliwości 8-bitowego mikrokontrolera. ATmega328P próbkuje wejścia analogowe z częstotliwością próbkowania 62 kHz, dokonuje decymacji, wykonuje operację przesunięcia fazowego za pomocą transformaty Hilberta (stałe przesunięcie fazy niezależne od częstotliwości składowych – bardzo trudne do realizacji w układzie analogowym), następnie sumuje składowe kwadraturowe w celu stłumienia niepożądanej wstęgi bocznej, potem stosuje filtrowanie dolnoprzepustowe, automatyczną regulację wzmocnienia, a nawet funkcję redukcji szumów.  Przy 10-bitowym przetworniku ADC i czterokrotnym nadpróbkowaniu, teoretyczny zakres dynamiki dla pasma 2,4 kHz SSB to 72 dB. Przełączanie trybu LSB/USB odbywa się poprzez zmianę przesunięcia fazowego o 90 stopni w sygnałach CLK0/CLK1 układu PLL Si5351. Dostępne są trzy wbudowane tłumiki umożliwiające optymalne wykorzystanie zakresu dynamiki. Pierwsze tłumienie daje przełącznik RX FET Q2 odpowiedzialny za tłumienie około 20dB, drugie jest poprzez regulację zakresu przetwarzania ADC (napięcie odniesienia 1,1V lub 5V, wybierane poprzez logikę mikrokontrolera ATmega) – odpowiada za tłumienie 13dB, a trzecie jest wynikiem podłączenia „pull –down” wejścia analogowego ATmega poprzez wyjście GPIO – odpowiada za tłumienie 53dB. Połączenie trzech tłumików zapewnia stopnie tłumienia: 0dB, -13dB, -20dB, -33dB, -53dB, -60dB, -73dB.Układ odbiornika nie ma analogowego wzmacniacza słuchawkowego – wykorzystano wyjście cyfrowe z modulacją szerokości impulsu PWM. Sygnał audio jest dostatecznie silny, można wykorzystać nawet mały głośnik o impedancji 8 omów.

Układ nadawczy SSB jest realizowany w całości w sposób cyfrowy i jest oparty na oprogramowaniu: mikrokontroler ATmega328P próbkuje wejściowy sygnał z mikrofonu elektretowego i rekonstruuje sygnał SSB poprzez sterowanie fazą syntezatora PLL SI5351 (poprzez niewielkie zmiany częstotliwości sterowane z szybkością ponad 800kbit/s za pomocą interfejsu I2C) oraz kontroluje moc chwilową PA (poprzez kluczowanie szerokości impulsów – PWM). Ideą wzmacniacza klasy E do generowania mocy RF jest użycie tranzystorów w trybie kluczowania do wytworzenia fali prostokątnej, która jest użyta do sterowania obwodu rezonansowego. Taka konstrukcja ze sterowaniem PWM sprawia, że nasz transceiver SSB jest prosty, mały, energooszczędny i tani.

Moduł Arduino dodatkowo obsługuje wyświetlacz LCD 2×16 znaków, przyciski oraz enkoder obrotowy (impulsator z przełącznikiem). Cały transceiver jest zasilany jest napięciem 5V poprzez stabilizator 7805, za wyjątkiem stopnia wzmacniacza mocy w klasie E, zasilanego bezpośrednio napięciem wejściowym – typowo 13,8 V.

Układ jest na tyle prosty, że postanowiłem go zmontować na uniwersalnej płytce drukowanej. Wykorzystałem koncepcję mechaniczną swojego kontrolera rotora GNI-r8 wraz z wyświetlaczem 2×16 OLED.

Kody źródłowe (open source ), szczegółowa zasada działania oraz dokumentacja pomysłodawca projektu Guido PE1NZZ udostępnia dla wszystkich na portalu GitHub https://github.com/threeme3/QCX-SSB oraz https://github.com/threeme3/QCX-SSB/tree/feature-rx-improved . Oprócz teorii i schematu jest tam również opis menu poleceń oprogramowania urządzenia. W krótkim czasie projekt znalazł wielu entuzjastów skupionych w grupie na forum https://groups.io/g/ucx . Projekt jest w ciągłym rozwoju, i to w różnych odmianach i wersjach. Mój schemat bazuje głównie na rozwiązaniach kolegów: Barb WB2CBA https://antrak.org.tr/blog/projeler/usdx-an-arduino-based-sdr-all-mode-hf-transceiver-pcb-iteration-v1-02/ ,  Manuel DL2MAN https://dl2man.de/ i Miguel PY2OHH https://www.qsl.net/py2ohh/trx/usdxnano/usdxnano.html . Warto także zajrzeć na stronę Boba KD8CGH  https://sites.google.com/view/kd8cgh/Home/introduction-to-the-usdx .

Zamiast modułu Arduino Nano w innych wariantach uSDX stosuje się najczęściej procesor ATmega328P w obudowie DIL. W takim przypadku dołącza się do niego rezonator kwarcowy 20MHz, oraz trzeba zapewnić dodatkowe złącze do programowania (albo programować mikrokontroler po wyjęciu z podstawki). W moim przypadku moduł Arduino można bezpośrednio zaprogramować przez kabel USB. Moduł jednak wymaga przeróbki. Oryginalny kwarc 16 MHz trzeba zamienić na 20 MHz i trzeba usunąć rezystor SMD dołączony do diody LED (oznaczonej L). Po takiej przeróbce nie da się już zaprogramować z komputera ze środowiska Arduino IDE, chyba że zastosuje się sposób na bezpośrednie zaprogramowanie Arduino Nano 20MHz przez Arduino IDE zaproponowany przez PE1DDA:

1. Znajdź plik o nazwie boards.txt, typowo znajduje się on w folderze typu „Pliki programów (x86)\Arduino\hardware\arduino\avr”.
2. Otwórz do edycji plik board.txt.
2.1 Znajdź linię:  nano.name = Arduino Nano
2.2 Zaznacz i skopiuj wiersze od linii ## Arduino Nano w/ ATmega328P (old bootloader)” aż do „nano.menu.cpu.atmega328old.build.mcu=atmega328p”
2.3 Wklej te wiersze poniżej tego ostatniego: „nano.menu.cpu.atmega328old.build.mcu = atmega328p”
2.4 W każdej linii zamień atmega328old na „atmega328old20MHz”
2.5 Zastąp wiersz: „nano.menu.cpu.atmega328old20MHz=ATmega328P (Old Bootloader)” poprzez: „nano.menu.cpu.atmega328old20MHz=ATmega328P (Old Bootloader-modify-20MHz)”
2.6 Edytuj wiersz „nano.menu.cpu.atmega328old20MHz.upload.speed = 57600”, zamień na „57600” na „72000”
2.7 Zapisz i zamknij plik boards.txt
3. Uruchom Arduino IDE:  Narzędzia, Płytka Arduino Nano”, Menadżer płytek…, kliknij Aktualizuj
3. Zrestartuj Arduino IDE, powinniśmy mieć nową płytkę jak pokazano niżej:

Teraz można ładować programy bezpośrednio z IDE przez USB do Arduino NANO z kwarcem 20 MHz.

Moduł syntezatora częstotliwości Si5351 także wymaga przeróbki. Jest on sterowany z mikrokontrolera za pośrednictwem magistrali I2C o ponad-standardowej szybkości 800 kbit/s, i zastosowany tam układy translatora napięcia jest zbyt wolny. Należy usunąć 2 tranzystory FET SMD oraz 4 oporniki 10k SMD. Następnie należy zamontować 2 oporniki 1k SMD oraz 2 zworki między drenem i źródłem po tranzystorach FET. Poniżej pokazano wygląd obu modułów po przeróbkach.

Do sterowania tranzystora mocy Q1 zastosowano 3 połączone równolegle bramki typu 74ACT00. Mogą to być inne bramki, ale koniecznie z serii ACT – HC czy HCT nie mają wystarczającej wydajności prądowej aby dobrze wysterować tranzystor wzmacniacza PA. Na forum https://groups.io/g/ucx  można znaleźć szereg innych propozycji sterowania tranzystora wyjściowego, lecz moje doświadczenia potwierdzają, że 3 równoległe bramki typu 74ACT00 wydają się być optymalny rozwiązaniem, także ze względu na względnie dobrą dostępność tych układów.

Z tranzystorem Q1 jest podobnie – na wspomnianym wyżej forum można prześledzić różne opcje. Miałem do dyspozycji BS170, 2N7000, IRF510, IRF540N oraz IRF610. Najlepiej u mnie sprawdziły się IRF540N na pasmach 80m i 40m, oraz 3 połączone równolegle 2N7000 na paśmie 20m. Warto sprawdzić inne opcje.

Dla uzyskania odpowiedniej mocy wyjściowej bardzo istotne znaczenie dla wzmacniacza klasy E ma obwód wyjściowy. Z założenia jest to wzmacniacz rezonansowy. Zdecydowałem się wykorzystać jedno z rozwiązań WB2CBA, które wydaje się być dobrym kompromisem między jakością i prostotą. Aby uzyskać zadowalające mnie rezultaty musiałem dobrać wartości parametrów obwodów. Muszę wyraźnie zaznaczyć, że poniżej podane niżej wartości to niekoniecznie wartości całkowicie optymalne. Po pierwsze – ich wartości silnie zależą od typu, a nawet egzemplarza tranzystora, konstrukcji, oraz obciążenia. Próby robiłem przy zasilaniu 13,8V ze sztucznym obciążeniem 50 omów aż do momentu osiągnięcia zadowalających mnie rezultatów, za jakie uznałem:

3,700 MHz moc 5,8W sprawność 76% (IRF540N)
3,500 MHz moc 9,4W sprawność 78% (IRF540N)
7,100 MHz moc 8,8W sprawność 93% (tak mi wyszło z obliczeń!) (IRF540N)
14,200 MHz moc 2,7W sprawność 56% (3x 2N7000)

Poniżej jest zrzut ekranu oscyloskopu sygnału wyjściowego na sztucznym obciążeniu dla pasma 80m. Nie mierzyłem zawartości harmonicznych, ale sygnał wygląda na dość „czysty”. Obok jest wygląd sygnału RF na drenie Q1. Jak widać tranzystor Q1 pracuje w trybie kluczowania. Prąd drenu płynie w czasie, gdy napięcie na nim jest bliskie zeru, co zapewnia dużą sprawność wzmocnienia. Pokazane jest to bardzo ładnie w artykule https://people.physics.anu.edu.au/~dxt103/160m/class_E_amplifier_design.pdf . Jak widać chwilowa wartość napięcia osiąga 81,6V. Miguel PY2OHH robił próby z napięciem zasilania nawet 32,5V. Dla pasma 80m dawało to 20W mocy wyjściowej przy sprawności 75%. Napięcia drenu są w tedy znacznie wyższe, stąd tranzystor Q2 2N7000 musi być zamieniony na bardziej odporny, np. IRF510. Nie można także zapomnieć o diodach zabezpieczających D1 i D2!

 

 

 

 

 

Oryginalne rozwiązanie filtrów z szeregowym obwodem rezonansowym WB2CBA jest pod adresem https://antrak.org.tr/blog/usdx-multiband-low-pass-filter/ . Poniżej są podane wartości komponentów dla trzech najbardziej popularnych pasm. Wartości, które zmieniłem w stosunku do oryginału są wytłuszczone. Dławik L1 to 12 zwojów DNE 0,8 na rdzeniu pierścieniowym T50-2 (a nie na FT37-43 jak pokazano na schematach!). Indukcyjności L2 i L3 nawinięte mogą być za pomocą drutu nawojowego 0,2-0,4mm lub drutu w izolacji (np. kynaru jak na zdjęciu powyżej) na rdzeniach T37-2.

Pasmo C1 C2 C3 C4 C5 C6 L2 L3
80 m 680pF 360pF 1,5nF 1,8nF 620pF 1,8nF 15 zw. 15 zw.
40 m 360pf 180pF 470pf 1nF 180pF 1nF 12 zw. 10 zw.
20 m 100pF 470pF x 470pF 150pF 470pF 8 zw. 7 zw.

Filtry wykonałem w postaci wymiennych modułów. W sieci jest szereg przykładów i gotowych rozwiązań kilku-pasmowych układów wyjściowych z przełącznikami lub przekaźnikami, np. : https://dl2man.de/bottom-layer-rf-board/ .

Autorski kod źródłowy na ATmega328P jest do ściągnięcia na GitHubie https://dl2man.de/bottom-layer-rf-board/ .Sprawdziłem w moim układzie uSDX kilka wersji programu, warto poszukać najnowszej np. TUTAJ. Aby program pracował na Arduino Nano został on lekko przerobiony. W wersji v.1.02p zmieniłem tylko 2 linie:

line 12: //#define CAT             1   // GNI blocked, CAT-interface (CAT takes a lot of memory space)
(funkcja CAT wyłączona aby zwolnić zasoby pamięci mikrokontrolera)
line 15: #define F_XTAL 25000373   // GNI changed, 25MHz SI5351 crystal  (enable for 25MHz TCXO)
(wartość została dobrana eksperymentalnie dla mojego egzemplarza modułu Si5351)

W swoim prototypie uSDX zastosowałem nowocześniejszy wyświetlacz 2×16 OLED. Sprawdził się on moich sterownikach rotora https://hf5l.pl/wp-content/uploads/2020/11/User-manual-PL_r8_v03.pdf . Aby działał prawidłowo musiałem dodać elementy D3/R19. W przypadku standardowego wyświetlacza LCD z podświetleniem są one zbędne, za to trzeba dodać potencjometr do regulacji kontrastu i rezystor do podświetlenia jak pokazano na schemacie niżej.

Po zaprogramowaniu modułu w środowisku Arduino IDE (Nano – Atmega328P – Old Bootloader-modify-20MHz) i umieszczeniu go w podstawce zmontowanego odbiornika najpierw należy ustawić kontrast wyświetlacza za pomocą potencjometru 10k. Do obsługi radia służą 3 przyciski: lewy L, prawy R,  przycisk enkodera ENC oraz mechaniczny enkoder obrotowy (przycisk enkodera warto zdublować mikroprzyciskiem, który wymaga znacznie mniejszego nacisku i jest wygodniejszy w obsłudze). Do przycisków przyporządkowane są następujące funkcje (x wciśnięcie, 2x podwójne wciśnięcie, d długie wciśnięcie):

L x – wejście do Menu oraz pod-Menu
R x – zmiana trybu: LSB (dolna wstęga), USB (górna wstęga), CW (telegrafia) oraz powrót z Menu
R 2x
– zmiana szerokości pasma odbioru: Filter Full, 3000 Hz, 2400 Hz, 1800 Hz (dla CW inaczej)
R d – zmiana VFO A, RIT, VFO B, RIT
ENC x –  krok przestrajania: 1M, 100k, 10k, 1k, 500, 100, 10 Hz
ENC d –  krok przestrajania: 10 Hz 100, 500, 1k, , 10k, 100k, 1M,
ENC 2x – przemiatanie predefiniowanych częstotliwości CW/FT8 na kulejnych pasmach amatorskich
ENC + obrót – zmiana głośności.

W skrócie – strojenie można wykonywać obracając enkoder obrotowy. Rozmiar kroku można zmniejszyć lub zwiększyć przez krótkie lub długie naciśnięcie ENC. Zmianę pasma można wykonać podwójnym naciśnięciem ENC. Tryb pracy zmienia się krótkim naciśnięciem prawego przycisku; dwukrotne naciśnięcie prawego przycisku zmniejsza szerokość pasma filtra odbiornika, szerokość pasma jest resetowana po każdej zmianie trybu. Głośność zmienia się, obracając pokrętło przy wciśniętym enkoderze. Zawartość menu trochę zależy od wersji programu, opisów jego funkcji można szukać w dokumentacji np. : https://github.com/threeme3/QCX-SSB/tree/feature-rx-improved .

Funkcja automatycznej regulacji wzmocnienia (AGC poz. 1.8 w Menu) jest domyślnie włączona, przez co zwiększa się głośność w przypadku słabych sygnałów i zmniejsza w przypadku silnych. Jest to korzystne dla sygnałów SSB, ale może być uciążliwe dla CW. AGC można wyłączyć w menu, dzięki czemu odbiornik jest cichszy, ale wymaga ręcznej zmiany głośności. Można także włączyć funkcję redukcji szumów w menu za pomocą parametru NR (poz. 1.9). Aby optymalnie wykorzystać dostępny zakres dynamiki, można stłumić przychodzący sygnał, włączając tłumik (ATT poz. 1.10). Szczególnie na częstotliwościach 3,5-7 MHz poziomy szumów atmosferycznych są znacznie wyższe, a więc można polepszyć właściwości odbioru włączając tłumienie (-13 dB).

Typ miernika sygnału S-metr (dBm, S, S-bar) można wybrać za pomocą parametru S-meter (poz. 1.12). Wybranie S-bar powoduje wyświetlenie paska siły sygnału, w którym każdy znacznik reprezentuje jeden punkt skali S (6 dB).

Aby skalibrować częstotliwość transceivera, można dostroić się do skalibrowanego źródła sygnału (np. WWV na 10 MHz) i zdudnić sygnał do zera, zmieniając wartość parametru „Ref freq” (poz. 8.1) za pomocą enkodera.

W połączeniu z komputerem transceiver uSDX można używać także do trybów cyfrowych. W przypadku trybu FT8 (lub innego cyfrowego), wybierz jedno z zaprogramowanych pasm FT8, dwukrotnie naciskając przycisk ENC enkodera, i podłącz gniazdo słuchawkowe do gniazda mikrofonowego karty dźwiękowej, gniazdo głośnika karty dźwiękowej do gniazda mikrofonu i naciśnij długo prawy przycisk, aby przejść do trybu VOX. Ustaw głośność na minimum i uruchom wybraną aplikację FT8 (na przykład WSJT-X).

Wartości parametrów nadajnika najlepiej dobrać eksperymentalnie. Wartość TX Drive (poz. Menu 3.3) stosowana jest zwykle w zakresie 4-6 (u mnie 6). Mając oscyloskop pomocna jest obserwacja obwiedni modulacji sygnału na wyjściu. Podsłuch na innym odbiorniku nie sprawdza się. Sygnały generowane przez układy cyfrowe na płytce uSDX nakładają się na sygnał użyteczny, przez co wydaje się on bardzo zniekształcony i nie można ocenić rzeczywistej jakości sygnału SSB na wyjściu antenowym. PA Bias min (poz. 8.1) według mnie nie ma dużego znaczenia (u mnie jest 10). PA Bias max (poz. 8.2) można dobrać w następujący sposób: w trybie CW obserwujemy jednocześnie sygnał na sztucznym obciążeniu i prąd pobierany z zasilacza; za pomocą enkodera tak długo zwiększamy wartość parametru PA Bias max, aż dalszy przyrost prądu nie daje wzrostu mocy na wyjściu. U mnie wyszła wartość PA Bias max = 105.

Działanie mojego transceivera sprawdziłem w eterze. Najdalsze łączności na SSB to IZ2LSR na 80 m (1130 km), YU1XA na 40m (950 km), EC5K na 20m (2200 km).

Życzę dobrej zabawy przy montowaniu i używaniu transceivera uSDX. Należy jednak pamiętać, że jest to rozwiązanie eksperymentalne i ma szereg ograniczeń wynikających nie tylko z prostoty budowy. Warto sprawdzać nowe pomysły i rozwiązania w sieci, np: https://github.com/KD9PDP/uSDX-x . Gotowe płytki zostały opracowane już przez kilku kolegów i powinny być dostępne, np. tu: https://www.hamshop.cz/usdx-c57/dl2man-sandwich-oled-partially-assembled-i403/ .

Mirek SP5GNI

 

 

 

Liczba komentarzy: 1

Skomentuj

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *