WZab's animated logo

Cyfrowy system bezprzewodowy do gitary elektrycznej

English version of this document
SVG image showing design of the Digital Wireless Guitar System
Niżej opisany system stanowi DARMOWY PROJEKT, opublikowany bez żadnej gwarancji! Jeśli chcesz go zbudować i używać, robisz to na własne ryzyko! Zwróć też uwagę że to urządzenie korzysta z transmisji radiowej. Zanim zaczniesz go używać, upewnij się, że nie narusza to przepisów obowiązujących w miejscu lub kraju Twojego pobytu!

Opisywany system został stworzony aby: Oczywiście istnieją profesjonalne systemy oferując powyższe funkcje, jednak ich ceny znacznie wykraczają poza możliwości gitarzysty-amatora. Z drugiej strony mój system wprawdzie nie oferuje takich parametrów jak systemy profesjonalne, ale za to daje się go zbudować za dość skromną cenę. Zasadnicze elementy to: Aktualnie system oferuje następujące parametry: Aktualny schemat dostępny jest jako projekt KiCad, lub jako oddzielne pliki PDF: nadajnik, blok regulatorów, nakładka z przetwornikiem CS5343/CS5344, odbiornik.
Aktualne źródła firmware'u są dostępne jako archiwum oraz (z historią ostatnich zmian) w repozytorium github, a niektóre wcześniejsze wersje były publikowane na grupie alt.sources.
W aktualnej wersji systemu nadajnik został zmontowany na specjalnie zaprojektowanej płytce drukowanej (pełna dokumentacja jest zawarta w projekcie KiCad) umieszczonej w obudowie Z32. Aby umieścić potencjometry pod pojemnikiem na baterie, konieczne było znalezienie możliwie płaskich potencjometrów oraz lekkie podfrezowanie obudowy.
Zmontowany nadajnik wygląda następująco:



Wnętrze nadajnika z włożonymi akumulatorkami:



Wnętrze nadajnika z wyjętym pojemnikiem na akumulatorki - widoczne potencjometry:



Widok płytki drukowanej nadajnika został ukazany na dwóch poniższych zdjęciach:





Widok płytki drukowanej odbiornika został ukazany na dwóch poniższych zdjęciach:





Zasilanie nadajnika

W celu zapewnienia wydajnego zasilania bateryjnego, użyto dwóch akumulatorów NiMH (można zamiast nich użyć także baterii alkalicznych) i przetwornicy podnoszącej napięcie wykorzystującej układ MCP1640. Jest to rozwiązanie dość ryzykowne w systemie mającym przenosić sygnały akustyczne o dużej dynamice. Aby uniknąć zakłóceń, napięcie zasilające układy scalone jest stabilizowane scalonymi stabilizatorami trójkońcówkowymi. Istotne jest także właściwe dobranie pojemności odsprzęgających. Nadajnik wyłączany jest wyłącznikiem (nie pokazanym na schemacie) połączonym szeregowo z akumulatorkami.

Współpracujące oprogramowanie

System został stworzony przy założeniu, że użytkownik korzysta z cyfrowego, wirtualnego wzmacniacza/procesora dźwięku. W moim przypadku jest to program guitarix lub rakarrack działający na komputerze pracującym pod kontrolą systemu Linux, współpracujący z systemem jack. Do rejestracji i obróbki dźwięku używam programu ardour.
Przy normalnie skompilowanym oprogramowaniu odbiornika system zgłasza się jako urządzenie dostarczające dźwięku monofonicznego próbkowanego w trybie 24 bity/24 kHz (efektywnie tylko 20 bitów). Do przetwarzania dźwięku z wielu źródeł zazwyczaj używam systemu "jack" pracującego z częstotliwością próbkowania 48kHz. Niezbędną konwersję częstotliwości i synchronizację zapewnia program "alsa_in" (wywołany jako:$ alsa_in -d hw:2,0,0 -r 24000 -c 1 -n 2).
Aby umożliwić współpracę systemu z komputerami działającymi pod kontrolą MS Windows, dodałem tryb emulacji częstotliwości próbkowania 48 kHz. Aby go uaktywnić, należy przed kompilacją firmware'u odbiornika odkomentować linię #define WGS_EMUL_48KHZ w pliku customize.h. Mimo zgodności częstotliwości próbkowania także w tym przypadku należy użyć programu "alsa_in", aby zapewnić korektę drobnych różnych częstotliwości próbkowania i synchronizację między systemem gitarowym i systemem jack. W tym przypadku program "alsa_in" należy wywołać jako $ alsa_in -d hw:2,0,0 -r 48000 -c 1 -n 2.

Dlaczego system pracuje z częstotliwością próbkowania 24kHz?

Tak naprawdę przetwornik CS5343/CS5344 pracuje z częstotliwością próbkowania 48kHz i w trakcie pierwszych prób systemu udało mi się uzyskać prawdziwą transmisję dźwięku cyfrowego 24bity/48kHz. Niestety z uwagi na ograniczoną szybkość transmisji modułu RFM70 wymagało to wyłączenia mechanizmów potwierdzenia i automatycznej retransmisji pakietu, co ostatecznie (z uwagi na "gubienie pakietów") dało gorszą jakość dźwięku niż transmisja 20 bity/24kHz użyta w finalnej wersji systemu. Gdyby udało się znaleźć zamiennik modułu RFM70 oferujący większą przepustowość, powinno się dać zmodyfikować oprogramowanie tak, aby uzyskać transmisję 24bity/48kHz.

Modyfikowanie komend wysyłanych przez regulatory

Aby zapewnić maksymalną uniwersalność systemu, użytkownik może określać jakie komendy MIDI ma wysyłać system przy wciskaniu i zwalnianiu przycisków oraz przy zmianie pozycji potencjometrów. Programowanie jest zrealizowane podobnie, jak w opracowanym przez mnie "Pedale ekspresji MIDI z przełącznikami nożnymi".
Początkowo system wysyła przy wciśnięciu jednego z przycisków polecenie MIDI "Program Change" z numerami programu od 1 do 4. Zwolnienie przycisków początkowo nie powoduje wysyłania żadnych komend. Ustawienia regulatorów są początkowo wysyłane jako komendy MIDI "Control/Mode Change" z numerami regulatorów od 80 do 82.
W celu zmiany komend należy przy pomocy specjalnego programu do odbiornika wysłać pakiety kontrolne USB. Osobiście używam do tego celu prostego programu napisanego w języku Python, korzystającego z biblioteki "pyusb".
Aby uzyskać zmianę komunikatu wysyłanego przy zmianie pozycji jednego z regulatorów, należy wysłać pakiet sterujący o następującej postaci (składnia dla języka Python z pyusb):
dev.ctrl_transfer(0x40,0xbN,0xB1B2,0xB3B4)
gdzie N oznacza numer regulatora (od 0 do 2), a wartości B1, B2 i B3 oznaczają kolejne bajty wysyłanej komendy MIDI, podczas gdy B4 jest zastępowany aktualnym ustawieniem regulatora (gdy B4=0) lub "odwróconym" ustawieniem regulatora (gdy B4 jest różne od 0).
Aby uzyskać zmianę komunikatu wysyłanego przy wciśnięciu N-tego przycisku, należy wysłać pakiet sterujący o następującej postaci (składnia dla języka Python z pyusb):
dev.ctrl_transfer(0x40,0x8N,0xB1B2,0xB3B4)
gdzie N oznacza numer przycisku (od 0 do 3), a wartości B1, B2, B3 i B4 oznaczają kolejne bajty wysyłanej komendy MIDI z jednym zastrzeżeniem: jeśli B1 jest równe zero, to przy wciśnięciu przycisku nie będzie wysyłana żadna komenda.
Aby uzyskać zmianę komunikatu wysyłanego przy zwolnieniu N-tego przycisku, należy wysłać pakiet sterujący o następującej postaci (składnia dla języka Python z pyusb):
dev.ctrl_transfer(0x40,0xcN,0xB1B2,0xB3B4)
gdzie N oznacza numer przycisku (od 0 do 3), a wartości B1, B2, B3 i B4 oznaczają kolejne bajty wysyłanej komendy MIDI z jednym zastrzeżeniem: jeśli B1 jest równe zero, to przy zwolnieniu przycisku nie będzie wysyłana żadna komenda.
Przykład programu przeprogramowującego system można znaleźć tutaj. Przez odpowiednie zdefiniowanie pliku reguł "udev" w Linuksie można uzyskać automatyczne skonfigurowanie pedału po jego podłączeniu. Na przykład w moim systemie mam dodaną regułę: ACTION=="add", SUBSYSTEM=="usb", ATTRS{product}=="WZab Digital Wireless Guitar System 1", ATTRS{bcdDevice}=="0001", MODE="660", OWNER="root", GROUP= "audio", RUN+="/usr/local/midi/setup_dwgs_v1.py" Aby dostosować ten program do własnych potrzeb warto przestudiować informacje na temat USB MIDI oraz tablicę komunikatów MIDI.

Przełączanie kanałów

Transmisja sygnału przez tor radiowy może być zakłócana np. przez sieć WiFi. Dlatego w systemie przewidziano dwa przyciski do zmiany używanego kanału. Aby nie wykroczyć poza pasmo ISM, w którym może pracować system, możemy wykorzystać 83 dolne kanały (rozmieszczone co 1MHz) udostępniane przez moduł RFM70. Przyciski zmiany kanału powodują przejście o 8 kanałów w górę lub w dół (modulo 83). Ponieważ liczby 8 i 83 są względnie pierwsze, to przez wielokrotne naciśnięcie jednego z przycisków możemy wybrać dowolny kanał. Z drugiej strony przeskakiwanie o 8 kanałów naraz pozwala szybko "odsunąć się" od częstotliwości zajętej przez sieć Wi-Fi.

Stara wersja schematu i oprogramowania

Wcześniejsza wersja systemu jest dostępna jako projekt KiCad (schematy i płytka nadajnika) oraz jako archiwum ze źródłami oprogramowania.