Radio definiowane programowo z Adruino Nano

Arduino to ulubiona zabawka entuzjastów elektroniki. Istnieje tysiące konstrukcji zaprojektowanych w oparciu  o te moduły. Oto następna – najprostszy i najtańszy odbiornik radiowy SDR na świecie!

“Prawdziwe” radio SDR to takie, gdzie sygnał radiowy odbierany przez antenę jest bezpośrednio próbkowany przez przetwornik analogowo-cyfrowy. Dalsza obróbka sygnału odbywa się na ciągach „zer i jedynek”. Jednak do kategorii SDR włącza się też inne urządzenia, które korzystają z przetwarzania cyfrowego sygnału. Takim przykładem jest pokazany poniżej odbiornik uSDX-RX, umożliwiający odbiór sygnałów z modulacją AM, FM, SSB (modulacja jednowstęgowa) i CW (telegrafia – kod Morse’a) w szerokim zakresie częstotliwości. Układ jest na tyle prosty, że można go szybko zmontować na uniwersalnej płytce drukowanej lub prototypowej płytce stykowej.

Uwaga – schemat uSDX-RX uaktualniono 6.04.2021 – dodano R8.

Wejściowy obwód dopasowujący antenę odbiorczą to nawinięte na rdzeniu pierścieniowym 3 uzwojenia, z czego środkowe to obwód rezonansowy, dostosowany do wybranego zakresu częstotliwości pracy. Teoretycznie obwód można pominąć i antenę można dołączyć bezpośrednio do kondensatora C13, ale kosztem znacznego pogorszenia jakości odbioru.

Nasz układ to odbiornik z bezpośrednią przemianą – z częstotliwości radiowej od razu na sygnał małej częstotliwości. Wykorzystuje on łatwo dostępny układ typu 74HC4053 jako wysokowydajny detektor kwadraturowy, znany również jako „detektor Tayloe N7VE” lub „mieszacz I-Q”. Tak naprawdę są to 2 mieszacze, które są kluczowane sygnałami o częstotliwości odbioru, lecz przesuniętymi między sobą w fazie o 90 stopni. Więcej informacji na ten temat można znaleźć:
https://hf5l.pl/wp-content/uploads/2020/07/Uklady_na_COS_1.pdf .

Sygnały kluczujące CL0/CL1 generowane są w popularnym i tanim module zawierającym układ syntezatora częstotliwości Si5351, który jest sterowany z procesora za pośrednictwem magistrali I2C .

Sygnały wyjściowe z detektora, po wzmocnieniu i ograniczeniu pasma akustycznego przez podwójny wzmacniacz operacyjny IC1A/B są bezpośrednio podawane do wejść przetworników analogowo-cyfrowych procesora ATmega328P w module Arduino Nano. Jest kilka typów podwójnych wzmacniaczy w obudowie DIL-8 na rynku, pokazany na schemacie LM4562 jest wzmacniaczem z kategorii mało-szumnych, podobnie jak  np. LT6231. Można w ostateczności zastosować łatwo dostępny NE5532, lecz będzie on tutaj pracować w warunkach poza-katalogowych.

Dalsze przetwarzanie sygnału następuje wyłącznie w domenie cyfrowej, co jest niezwykłym osiągnięciem, biorąc pod uwagę zdawałoby się ograniczone możliwości 8-bitowego procesora. ATmega328P próbkuje wejścia analogowe z częstotliwością próbkowania 62 kHz, dokonuje decymacji do niższej częstotliwości, 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, stosuje filtrowanie dolnoprzepustowe, automatyczną regulację wzmocnienia, a nawet funkcję redukcji szumów. 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.

Moduł Arduino dodatkowo obsługuje wyświetlacz LCD 2×16 znaków, przyciski oraz enkoder obrotowy (impulsator z przełącznikiem). Cały odbiornik zasilany jest poprzez złącze USB-mini z komputera lub ładowarki telefonicznej z wyjściem USB.

Skąd wziął się pomysł na ten odbiornik? Sięga on korzeniami do produktów firmy „QRP Labs” (QRP w kodzie radioamatorskim oznacza „mała moc”). Firma ta specjalizuje się w zestawach urządzeń nadawczo-odbiorczych małej mocy, przeznaczonych do samodzielnego montażu. Na podstawie bardzo udanej radiostacji o nazwie QCX holenderski krótkofalowiec Guido (PE1NNZ) wymyślił projekt uSDX, w którym „co się dało” z analogowego układu QCX zostało przeniesione do realizacji w domenie cyfrowej procesora ATmega328P. Kody źródłowe (open source), szczegółowa zasada działania oraz dokumentacja uSDX są dostępne dla wszystkich na portalu GitHUB: https://github.com/threeme3/QCX-SSB oraz https://github.com/threeme3/QCX-SSB/tree/feature-rx-improved . 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 odbiornik bazuje głównie na rozwiązaniach Manuela DL2MAN  i Miguela PY2OHH . Bezpośrednią moją inspiracją była lektura znakomitego artykułu „Transceivery QRP uSDX” opublikowanego w magazynie „Świat Radio” nr 2/2021.

Kod źródłowy zastosowany w mojej wersji odbiornika uSDX-RX to wersja QCX-SSB_1_02n.ino. Aby program pracował na standardowym Arduino Nano został on lekko przerobiony. Zmieniłem tylko 4 linie:

line 12: //#define CAT             1   // GNI blocked, CAT-interface (CAT takes a lot of memory space)
line 15: #define F_XTAL 25000373   // GNI changed, 25MHz SI5351 crystal  (enable for 25MHz TCXO)
(wartość została dobrana eksperymentalnie dl a mojego egzemplarza modułu Si5351)
line 38: #define SIG_OUT 13        //GNI swaped PB3    (pin 17)   (pin 15 nano D11) nc
line 40: #define DIT     11        //GNI swaped PB5    (pin 19)   (pin 17 nano D13) PTT
(z powodu rezystora i LED dołączonych do pinu D13 w module Nano)

Przerobiona wersja kodu QCX-SSB_1_02n_GNI_3_RX.ino jest do ściągnięcia i rozpakowania:
https://hf5l.pl/wp-content/uploads/2021/03/QCX-SSB_1_02n_GNI_3_RX.zip .

Po zaprogramowaniu modułu w środowisku Arduino (Nano – Atmega328P – Old Bootloader) 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ć mikro-przyciskiem, 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 wyjście 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 kolejnych pasmach amatorskich
ENC + obrót – zmiana głośności.

Niektóre z poniżej wymienionych funkcji Menu (L x – krótkie wciśnięcie lewego przycisku) są przeznaczone tylko do części nadawczej – nie należy ich używać!

1.1 – poziom głośności 0-16
1.2 – modulacja LSB, USB, CW, FM, AM
1.3 – szerokość filtru pasmowego (dla SSB zalecane 2400 Hz)
1.4 – wybór pasma amatorskiego 160, 80, 60, 40, 30, 20, 17, 15, 12, 10 lub 6 m
1.5 – krok przestrajania
1.6 – wybór generatora VFO A lub B
1.7 – RIT – nie używać
1.8 – wł/wył automatycznej regulacji wzmocnienia AGC
1.9 – poziom redukcji szumów 0-8
1.10 – tłumik sygnału wejściowego ATT (używać tylko 0 lub –13dB)
1.11 – drugi tłumik ATT2 cyfrowy w krokach 6 dB (używać 2 lub więcej)
1.12 – typ miernika sygnału S-meter
2.1 – wł/wył dekodera sygnałów telegrafii Morse dla emisji CW
2.4 – 2.8 – nie używać
3.1 – 3.5 – nie używać
8.1 – do kalibracji generatora Si5351
8.2 – 8.4 – nie używać

A więc 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.

Odbiornik może być używany do różnego typu emisji radiowych, w tym stacji broadcasting-owych (w tym przypadku lepiej stosować tryb LSB/USB niż AM). Może być on przestrajany w sposób ciągły od 100kHz do ponad 50 MHz. Niewątpliwie najciekawsze do  nasłuchów są łączności SSB w pasmach amatorskich. W połączeniu z komputerem można go używać także do trybów cyfrowych, takich jak FT8, JS8, FT4.

Nasz odbiornik to jednak rozwiązanie eksperymentalne i należy uwzględniać szereg ograniczeń wynikających nie tylko z prostoty budowy. Najważniejsze z nich to antena, z reguły drutowa. Ogólna zasada – czym antena dłuższa tym jest lepsza. Za dostatecznie długą należy uznać antenę o długości przynajmniej ćwierć fali (np. dla pasma amatorskiego 3,5 MHz czyli 80 m – będzie to drut 20m). Jak wspomniano już wyżej, teoretycznie antenę można dołączyć bezpośrednio do wejścia detektora poprzez kondensator C13. W takim przypadku trzeba jednak pamiętać, że do wejścia odbiornika poza sygnałem pożądanym doprowadzamy nie tylko pełne spektrum radiowe, ale także wszystkie szumy i zakłócenia, jakie „zbiera” antena. Dlatego selektywny obwód dopasowujący antenę do wejścia odbiornika jest bardzo korzystny. Oczywiście najlepsza jest antena typu dipol pół-falowy z doprowadzeniem kablem koncentrycznym, ale jest ona droższa, trudniejsza do wykonania i z założenia wąskopasmowa.

Na naszym schemacie pokazano przykładowe rozwiązanie obwodu dostosowanego dla trzech najbardziej popularnych pasm amatorskich: 20-, 40- i  80cio-metrowego. Transformator jest bardzo prosty do nawinięcia na popularnym rdzeniu pierścieniowym typu T37-2. Uzwojenia należy nawinąć używając drutu nawojowego 0,2-0,4mm lub drutu w izolacji (np. kynaru jak na zdjęciu poniżej). Należy zacząć od uzwojenia L2 – ma 25 zwojów (czyli 25 przejść drutu przez otwór środkowy). Uzwojenie antenowe L3 ma 4 zwoje, a L1 – 8 zwojów. Wartości kondensatora rezonującego z indukcyjnością L2 dla poszczególnych pasm podano na schemacie. Są to wartości orientacyjne, ponieważ optymalne pojemności zależą od konstrukcji i typu anteny. Najlepiej dobrać je doświadczalnie, a nawet można zastosować równoległy trymer lub kondensator zmienny. W celu zmiany pasm można wymieniać kondensator wraz ze złączką wtykaną na dwa gold-piny jak pokazano niżej, można także zastosować przełącznik pasm lub przekaźniki. Dostosowanie odbiornika do innych zakresów częstotliwości zostawiam inwencji użytkowników.

 

 

 

 

 

 

 

Gdzie szukać stacji? Krótkofalowcy w swojej pracy na pasmach kierują się tzw. band planem (patrz https://hf5l.pl/abc-bandplan-kf/ ). W paśmie 80-cio metrowym na fonii (emisją jednowstęgową LSB – dolna wstęga) pracuje się w zakresie 3,600 do 3,800 MHz. Polskie stacje najłatwiej znaleźć w zakresie 3,700 do 3,750 MHz.  W paśmie 40-metrowym zakres foniczny (LSB) to 7,050 – 7,200 MHz, a w paśmie 20-metrowym zakres foniczny (USB – górna wstęga) to 14,100 – 14,350 MHz.

Kiedy słuchać? Każde pasmo radiowe ma swoja specyfikę, wynikającą z właściwości jonosfery. Z kolei jej właściwości zależą od wielu czynników, jak pora roku, pora doby czy stan aktywności słonecznej. Podstawowe informacje o propagacji fal radiowych można znaleźć tu: https://hf5l.pl/abc-kf/ . W szczególności pasmo 80m jest najbardziej aktywne wieczorem i nocą, bardziej zimą niż latem. Pasmo 40 m jest w zasadzie aktywne całą dobę, w dzień dla łączności w regionie Europy, nocą z całym światem. Pasmo 20m, zwane królową pasm umożliwia nasłuchy bardzo dalekich stacji, zwykle w ciągu dnia.

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 i AM. 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).

Aby skalibrować częstotliwość odbiornika, możesz 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.

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).

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. Ustaw głośność na minimum i uruchom wybraną aplikację FT8 (na przykład WSJT-X).

Zainspirowany moim pomysłem na uSDX-RX, opartym na Arduino Nano, Barb WB2CBA opracował swoją wersję odbiornika SDR z wyświetlaczem OLED. Schemat jest dostępny TUTAJ, a wygląd płytki jest pokazany poniżej.

 

 

 

 

 

 

Pełna dokumentacja, w tym: pliki Gerbera PCB RX, pliki Gerbera płytki czołowej, schemat RX, layout RX PCB, layout płytki czołowej są do ściągnięcia na:
https://groups.io/g/ucx/files/uSDX%20NANO%20RX_V_1.1%20files.zip

Kilka krótkich uwag na temat konstrukcji WB2CBA: aby zachować elastyczność jako filtr dolnoprzepustowy Barb zastosował moduł filtru LPF QRP Labs. Wyświetlacz to 128×32 OLED, który można kupić prawie w każdej witrynie internetowej z częściami. Wyświetlacz OLED, elementy sterujące i moduł SI5351 należy przylutować z tyłu płytki drukowanej po stronie lutowania. Nie ma potrzeby modyfikowania modułu SI5351, może być używany taki, jaki jest. Port 13 Arduino Nano ma podłączoną diodę LED, co uruchamia nadawanie TX. W oprogramowaniu uSDX należy dokonać zmian jak opisano to wyżej, oraz należy od-komentować definicję OLED, usuwając //, a następnie trzeba wykonać kompilację i wgranie szkicu do mikrokontrolera Arduino.

Ciekawe rozwiązanie odbiornika uSDX-RX w formie nakładki Arduino UNO shield z wyświetlaczem 2.23″ 128×32 OLED można znaleźć TUTAJ (schemat i pliki Gerbera).

Życzę dobrej zabawy przy montowaniu i używaniu odbiorników uSDX-RX! Następnym krokiem może jego rozbudowa do pełnoprawnego trancseivera jak to pokazano TUTAJ lub na forum w grupie https://groups.io/g/ucx, ale do tego trzeba mieć licencję krótkofalarską. W sieci jest mnóstwo informacji jak ją zdobyć, np. na stronach klubu HF5L: https://hf5l.pl/abc-intro/ .

Mirek SP5GNI

 

Liczba komentarzy: 4

  • Bardzo fajny projekt jeśli chodzi o proste uruchomienie odbiornika SDR bez komputera… na pewno przetestuje, zwłaszcza że mam wszystkie elementy do jego realizacji.
    Moja propozycja do tego projektu była by taka, by dodać kod do programu umożliwiający wygenerowanie dodatkowego sygnału z generator Si5351 na CL2 przesuniętego od częstotliwości sygnału CL0 o 800 Hz by uzyskać prosty transceiver telegraficzny. Nośna (stała) potrzebna do TX na CL2 mogła by być włączana to podaniu sygnału (up) na jedno z wejść mikroprocesora. Ja niestety nie jestem programistą by to zrobić, może ktoś byłby w stanie podjąć się takie modyfikacji programowej, ja wtedy chętnie doprojektuję część nadawczą CW z układem kluczowania poza mikroprocesorem, by z odbiornika powstał prosty TRX CW QRP.

    Odpowiedz
  • Końcowy komentarz do mojego poprzedniego wpisu.
    Jak się okazało, wersja programu do opcji układu – Radio definiowane programowo z Adruino Nano – nie różni się od wersji programu transceivera, więc wszystkie funkcje działają łącznie z CW. W związku z tym wykonałem prosty trx CW na bazie tej wersji układu. Po włączeniu TX CW na CL2 Si5351 pojawia się sygnał nośnej CW przesunięty o shift, więc nie ma problemu podać go na dowolny wzmacniacz mocy nadajnika. Trzeba zwrócić uwagę, że w tej wersji programu na Arduino Nano zostały zamienione programowo piny D13 na D11 (jak w pisie wyżej). Nadawanie kluczem automatycznym Dit – D11, Dash – D12 (z rezystorem 10k do +5V), sterowanie PTT nadajnika CW można uzyskać z pinu D10. W zakresie nadawania CW szystko działa poprawnie. Dla jasności sytuacji można oprzeć się na schemacie transceivera uSDX na Arduino Nano biorąc pod uwagę powyższy opis. W tej wersji TRX CW nie ma potrzeby wymieniać rezonator w Arudino Nano.

    Odpowiedz
  • Cześć Witaj!
    Pobrałem plik: xxxx_GNI_3_RX_ino.
    Czy jakieś biblioteki bedę potrzebował do Arduino IDE?
    Rozumię, że Si5351 pracuje z kwarcem 25MHz i Nano 16MHz ?
    Czy odbiornik posiada też NBFM? (na 29MHz i do ewent. konwerera)?
    Pozdrawiam serdecznie

    Maciej sp9wfh

    Odpowiedz
  • Z tego co pamiętam to żadne biblioteki nie były potrzebne.
    W przypadku TYLKO odbioru moduły Arduino i Si5351 nie wymagały przeróbek.
    Co do modulacji FM to jest (do wyboru LSB, USB, CW, FM i AM).
    Mirek SP5GNI

    Odpowiedz

Skomentuj

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