73! Zbyszek
|
WALET – czyli jak buduję sobie transceiver SDR
|
|
Zbyszku, gratuluję tempa montażu urządzenia.
Proszę pamiętaj o właściwym wlutowaniu pinów łącznika na drugiej płytce i kolejnych oraz o prawidłowym sposobie montażu kondensatora C31 co zapobiega ewentualnemu wzbudzaniu się wzmacniacza. [Obrazek: https://lx-net.pl/walet/image/noisy.jpg] Polecam zapoznanie się z opisami płytek w aplikacji Kickad dla wersji 1.1 Dodatkowo, w folderach h0 i h1 znajdują się aktualne schematy i opisy montażowe tej wersji a dodatkowo zamieściłem tam rysunki wersji uproszczonej zawierającej minimalną ilość elementów zapewniających działanie układu. Z działająca płytką h0 można przeprowadzić testy formowania sygnału jakie opisałem w postach #43 i #44. płytka h0 płytka ha Przy tej okazji informuję, że konstrukcja Waleta znalazła uznanie na konkursie PUK i otrzymała nagrodę. A ponieważ konstrukcja ta nie jest jakimś wiekopomnym odkryciem to zakładam, że komisja uznała za bardziej wartościowy sposób w jaki prezentuję i wyjaśniam moją pracę niż jej wartość techniczną. Ostatni tydzień trwałem jeszcze w szoku po nagrodzie w konkursie PUK ale mówiąc poważnie podjąłem próbę pomiaru odbieranego sygnału w domenie cyfrowej zamiast układów analogowych. Niestety, wielokrotne próby zastosowania biblioteki VolumeMeter z Arduino Audio Tools nie przyniosły rezultatu więc w końcu zdecydowałem się na kontakt z autorem (Phil Saltzman). Tu również początkowo nie udało się nam rozwiązać problemu ale na końcu okazało się, że winna była moja niekompetencja jako programisty ale przede wszystkim używałem starszej wersji ArduinoAudio Tools i o tym napiszę z detalami jutro. lj. GitHub
23-09-2026, 12:14
Pomiar siły odbieranego sygnału za pomocą narzędzi Arduino Audio Tools możliwy jest przez włączenie do łańcucha przetwarzania danych modułu z klasy VolumeMeter.
Do tej pory algorytm działał w cyklu: i2s -> filters -i2s gdzie lewe i2s to wejście sygnału po zamianie z analogowego na cyfrowy a prawe i2s to wyjście sygnału analogowego po zamianie z cyfrowego. W module filters znajduje się łańcuch hilbert -> lpf/bpf tak więc w rzeczywistości pełny łańcuch wyglądał następująco: i2s -> hilbert -> lpf/bpf -> i2s. Niestety, w przypadku procesora ESP32A1S z wbudowanym kodekiem audio (konwerter A/C i C/A + inne funkcje) rozróżnienie między i2s na wejściu i i2s na wyjściu nie jest oczywiste i realizowane jest przez dokładniejsze precyzowanie tych portów w sekcji setup{ } programu. Poza tym, klasa VolumeMeter nie posiada, jak większość innych narzędzi Audio Tools tzw. defaultConfig czyli zestawu ustawień domyślnych niezbędnych do uruchomienia instancji z klasy VolumeMeter dlatego pewien czas zajęło mi wyszukanie sposobu w jaki zainicjować moduł VolumeMeter. Sposobem na to okazało się zbudowanie uniwersalnego pliku konfiguracyjnego: Kod: uint16_t sample_rate = 24000;Plik info zawiera niezbędne informacje potrzebne dla instancji klasy VolumeMeter do jej uruchomienia. Pomiar sygnału może być włączony w dowolnym miejscu strumienia przetwarzania ale zwykle robi się to na wejściu lub na wyjściu. Ale z punktu widzenia pomiaru siły sygnału konkretnego sygnału celowe jest mierzenie jego siły na wyjściu za filtrami ograniczającymi pasmo przetwarzania. Gdyby włączyć pomiar na wejściu to pomiarowi podlegałyby wszystkie sygnały docierające do konwertera a/c a konwersja z prędkością sample_rate "zobaczy" wszystkie sygnały o częstotliwości sample_rate/2 (zgodnie z teorią próbkowania) czyli w tym przypadku do 12kHz. Filtry działające przed pomiarem ograniczają pasmo do 3.6/2.4kHz dla SSB oraz do niewielkiego pasma wokół 800Hz przy odbiorze CW a więc w zasadzie mamy pomiar jednego sygnału. Tak więc włączenie pomiaru w strumień przetwarzania danych poszerza ten łańcuch do postaci: i2s -> filters -> volumeMeter -> i2s . Poniżej prezentuję obecną sekwencję przepływu danych w kodzie programu po włączeniu cyfrowego pomiaru siły sygnału. Kod: ......Jak wspominałem, początkowo pokazany kod powodował, że kompilacja odbywała się bez błędów ale po wgraniu jej do procesora następował cykliczny jego restart co ok. 1 sek. Nie mogąc sam sobie z tym poradzić zapytałem autora pakietu Arduino Audio Tools i prawie tydzień zajęło nam wykrycie, że winna było niezgodność pakietu podstawowego Audio Tools z pakietem Driver Tools, który obsługuje kodeki w ESP32A1S. O ile mój pakiet Driver Tools był aktualny to Audio Tools miało wersję dość odległą od obecnej co generowało problemy. Wydaje się, że początkowa instalacja mojego pakietu Audio Tools nie odbyła się ze strony na GitHub ale z jakiegoś miejsca gdzie ten pakiet polecano i tamten link prowadził właśnie do starszej wersji. Po ustaleniu przyczyny okazało się, że mój początkowy kod włączenia pomiaru sygnału był poprawny ale kosztowało to stratę kilku dni i wykazaniem się słabą znajomością narzędzi Audio Tools wobec autora tego oprogramowania. Trochę to bolało ale żadna wiedza nie przychodzi łatwo ;-) Pomiar sygnału w torze cyfrowym umożliwia całkowitą rezygnację z pomiaru na drodze analogowej. [Obrazek: https://lx-net.pl/walet/image/arw01.jpg] [Obrazek: https://lx-net.pl/walet/image/arw02.jpg] Te elementy można usunąć całkowicie bez szkody dla działania całości na płytce h0 [Obrazek: https://lx-net.pl/walet/image/arw03.jpg] Dodatkowo, można też usunąć Q5 z otoczeniem z płytki ha Obecny kod programu zawiera pomiar sygnału w torze cyfrowym co daje jednoznaczne wartości bez konieczności regulowania trymerami ustawień w torach analogowych. Pisałem o tym wcześniej ale warto to przypomnieć w tym miejscu, że dynamika toru a/c to 16 bitów (65535 poziomów) ale w praktyce można liczyć na połowę tej wartości bo pełna dynamika dotyczy sygnałów zarówno na plus jak i na minus co oznacza ograniczenie do 15 bitów (32767 poziomów). Z moich pomiarów i kalibracji miernika volumeMeter wynika, że tło szumowe przetwornika (bez sygnału na wejściu) to ok. 50 a największy poziom jaki można odebrać w tej skali (32767) to ok. S9 + 23dB. Wydaje się to być wystarczające dla większości sytuacji z ewentualną reakcją dla sygnałów S9 +30, +40 i +60dB. Taka reakcja może być wykonana za pomocą pokazanego powyżej układu U9 (PCF8574) oraz D7/RV2, D8/RV3 i ewentualnie D9/RV4. Może uda się zredukować tłumik sygnału na czterech diodach PIN do jednej lub dwóch ale na razie, jeśli jest on zamontowany to należy pozostawić jedynie D7/RV2 z RV2 ustawionym na poziom ok. 3-4k. Na Github zamieściłem w części dotyczącej wersji 1.1 zarówno kod źródłowy jak i pliki bin dotyczące tej wersji. lj. Github |
|
« Starszy wątek | Nowszy wątek »
|
Użytkownicy przeglądający ten wątek: 1 niewidocznych użytkowników, 1 gości

