Pedał ekspresji V-USB MIDI z czujnikiem pojemnościowym
Pierwsza wersja pedału
Trzecia wersja pedału - z 10 programowalnymi przełącznikami nożnymi
English version of this document
Moim celem było zbudowanie, taniego, płynnie i cicho działającego oraz
prawie niezniszczalnego nożnego manipulatora mogącego pracować jako
"pedał ekspresji" MIDI dla wirtualnych efektów gitarowych
(np. w programach
jack-rack,
guitarix
or rakarrack)
lub dla wirtualnych syntezatorów muzycznych
(np. ZynAddSubFx lub
LMMS).
Standardowe tanie pedały, używające potencjometrów najczęściej nie są
zbyt ciche, ani zbyt trwałe. Dlatego postanowiłem wypróbować inne podejście
- czujnik pojemnościowy.
Okazuje się, że współczesne mikroprocesory pozwalają łatwo zbudować
proste czujniki pojemnościowe o wystarczającej rozdzielczości i dokładności.
Użyty przeze mnie kondensator zmienny składa się z dwóch płytek miedzianych
(np. niewytrawionych płytek drukowanych) o wymiarach 60mm x 90mm.
Są one połączone zawiasem, dzięki czemu odległość między nimi może się zmieniać
(jak to widać na poniższym rysunku).
W rzeczywistości jedna z płytek jest zamontowana wewnątrz plastikowej obudowy
a druga na zewnątrz, co zapobiega ich zwieraniu.
Nie byłem w stanie znaleźć dostatecznie "gładko" działającego zawiasu, więc
zbudowałem go samodzielnie - z mosiężnych rurek - jednej o średnicy wewnętrznej 5mm
i drugiej o średnicy zewnętrznej 5mm.
Pomiar pojemności jest przeprowadzany w bardzo prosty sposób.
Blok PWM w mikrokontrolerze generuje falę prostokątną. Zmienny kondensator czujnika
tworzy całkujący układ RC z zewnętrznym rezystorem o wartości 1.5MΩ. Scałkowany (i na skutek tego opóźniony)
sygnał jest podłączony do bloku "input capture" w mikrokontrolerze. Podczas pracy układu
mierzone jest opóźnienie między zboczami sygnału generowanego przez blok PWM i zboczami sygnału
odbieranego przez układ ICP1 (patrz schemat układu jako zbiór PDF,
lub źródła schematu
w formacie KiCad).
Okazało się, że takie proste rozwiązanie zapewnia rozdzielczość i dokładność wystarczającą na potrzeby
pedału ekspresji MIDI, lecz wymaga kalibracji czujnika pedału przed użyciem.
Aby umożliwić tę kalibrację, pedał wyposażony jest w prosty interfejs składający
się z jednego przycisku i diody LED.
Procedura kalibracji jest wbudowana w oprogramowanie pedału ("firmware") i przebiega
następująco:
Po podłączeniu pedału do interfejsu USB, dioda szybko miga.
Naciśnij wtedy pedał do oporu, a potem naciśnij i przytrzymaj przycisk kalibracji
(cały czas przy wciśniętym pedale)
Gdy dioda zacznie świecić nieprzerwanie, zwolnij przycisk kalibracji,
nadal trzymając wciśnięty pedał. Dioda zgaśnie.
Gdy pierwszy krok kalibracji zakończy się, dioda zacznie migać powoli. Wtedy zwolnij pedał.
Po kilku sekundach ponownie naciśnij przycisk kalibracji (przy zwolnionym pedale),
rozpoczynając drugi etap kalibracji.
Gdy dioda zacznie świecić nieprzerwanie, zwolnij przycisk (pedał powinien być cały czas zwolniony).
Podczas drugiego kroku kalibracji dioda LED pozostanie zgaszona. Po zakończeniu kalibracji
dioda będzie zapalać się na krótko (ok. 1/2 sekundy) co około 2 sekundy - oznacza to,
że pedał jest gotowy do pracy.
Procedura kalibracji może być powtórzona - wystarczy nacisnąć pedał, wcisnąć ponownie przycisk kalibracji
i powtórzyć powyższą procedurę od punktu 2.
Aktualnie pedał działa całkiem niezawodnie, choć jego charakterystyka jest nieliniowa (ponieważ pojemność
jest odwrotnie proporcjonalna do odległości między płytami). Aby poprawić liniowość, należy (przez
odpowiednią konstrukcję mechaniczną) zachować dość mały stosunek między minimalną i maksymalną odległością między płytami, lub można dodać w oprogramowaniu pedału odpowiednią procedurę linearyzującą charakterystykę. Pełne źródła oprogramowania (firmware'u), są dostępne na licencji GPL.
Oprogramowanie pedału jest w znacznej mierze oparte na projekcie
V-USB-MIDI
udostępnionym na licencji GPL, który z kolei jest oparty na projekcie
V-USB.
Wersja 2 - z obsługą przełączników nożnych
Przygotowałem także nową, rozszerzoną wersję, pozwalającą użyć przełączników
nożnych do wybierania zapisanych ustawień w programach rakarrack i guitarix
(lub brzmień w programie ZynAddSubFx).
Do złącza P2 można podłączyć trzy przełączniki nożne
(patrz schemat,
lub źródła schematu w formacie KiCad).
Gdy jeden ze styków (1, 2 or 3) zostanie zwarty do masy (pin 4), pedał
wysyła komunikat MIDI "program change" z numerem programu 0, 1 lub 2.
Źródła oprogramowania w wersji 2, obsługującej przełączniki nożne, są dostępne
tutaj.
Wersja 3 - z programowaną obsługą 10 przełączników nożnych
Aby do maksimum wykorzystać możliwości mikrokontrolera użytego w pedale,
zaprojektowałem wersję 3, pozwalającą na zamontowanie maksymalnie 10 przełączników
nożnych (dostępny jest
schemat jako PDF
oraz
źródła schematu
w formacie KiCad.
Nowa wersja biblioteki atmel.lib KiCad'a zawiera zmieniony symbol ATMEL8-P.
Dlatego aby poprawnie odtworzyć schemat, należy ściągnąć i rozpakować
starą wersję
tej biblioteki w tym samym katalogu, w którym jest zapisany plik ze schematem.
).
Oczywiście wymaga to odpowiednio dużej obudowy, aby pozwolić na wygodną obsługę
takiej liczby przełączników.
Ponadto, aby zwiększyć możliwości urządzenia, postanowiłem dodać możliwość
programowania funkcji pedału i poszczególnych przełączników.
Po włączeniu pedału, pedał wysyła komunikat zmiany ustawienia
regulatora 0x70, a każdy przełącznik przy wciśnięciu wysyła komunikat
"program change" z odpowiednim numerem programu, a przy zwolnieniu nie wysyła
żadnego komunikatu.
Możliwe jest jednak przeprogramowanie komunikatów MIDI wysyłanych zarówno przez pedał,
jak i przy
wciśnięciu oraz zwolnieniu poszczególnych przycisków.
Pozwala to użyć pedału do sterowania różnymi funkcjami współpracującego oprogramowania,
a poszczególnych przycisków np. do sterowania funkcją "looper" w programach
guitarix lub rakarrack, albo do włączania i wyłączania różnych efektów.
Programowanie funkcji odbywa się przez wysyłanie odpowiednich pakietów USB do
endpointu 0 urządzenia (można też przerobić firmware tak, aby użyć do tego
komunikatów System Exclusive MIDI). Osobiście używam do tego celu skryptów
napisanych w języku Python i wykorzystujących bibliotekę pyusb.
Aby przeprogramować komunikat wysyłany przy zmianie pozycji pedału, musimy
wysłać komunikat (zgodnie ze składnią pyusb).
dev.ctrl_transfer(0x40,0xbf,0xB1B2,0xB3B4)
Spowoduje to wysyłanie komunikatu USB MIDI składającego się z bajtów B1, B2, B3 i bajtu
kodującego pozycję pedału. Jeśli B4 jest równe zero, to pozycja będzie kodowana od 0 przy zwolnionym
pedale, do 127 przy maksymalnie wciśniętym pedale, a jeśli B4 jest różne od zera
to pozycja będzie kodowana od 127 przy zwolnionym
pedale, do 0 przy maksymalnie wciśniętym pedale.
Możliwość zmiany kodowania pozycji pozwala nam wybrać, np. czy w spoczynkowym położeniu pedału
chcemy mieć maksymalne, czy minimalne natężenie sterowanego efektu.
Aby uzyskać wysyłanie przy naciśnięciu N-tego przycisku pakietu USB MIDI
o kolejnych bajtach B1, B2, B3 i B4, musimy wysłać komunikat USB
(zgodnie ze składnią pyusb):
dev.ctrl_transfer(0x40,0x8N,0xB1B2,0xB3B4)
Uwaga, jeśli B1 będzie równe 0, to żaden komunikat nie zostanie wysłany.
Podobnie, aby zaprogramować wysyłanie pakietu USB MIDI o kolejnych bajtach
B1, B2, B3 i B4 przy zwolnieniu N-tego przycisku,
musimy wysłać komunikat USB (zgodnie ze składnią pyusb):
dev.ctrl_transfer(0x40,0xcN,0xB1B2,0xB3B4)
Uwaga, jeśli B1 będzie równe 0, to żaden komunikat nie zostanie wysłany.
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}=="V-USB-MIDI-PEDAL+SWITCH", ATTRS{bcdDevice}=="0003", MODE="660", OWNER="root", GROUP= "audio", RUN+="/usr/local/midi/setup_pedals_v3.py"
Aby dostosować ten program do własnych potrzeb warto przestudiować
informacje na temat USB MIDI
oraz tablicę komunikatów MIDI.
.
Ponieważ przy podłączeniu do jednego komputera kilku instrumentów może mieć
sens podłączenie kilku pedałów, włączyłem obsługę numeru seryjnego.
Należy pamiętać, aby przed skompilowaniem firmware'u i zaprogramowaniem kolejnego urządzenia właściwie
ustawić niepowtarzalny numer seryjny w pliku "usbconfig.h".
Przykładowy program przeprogramowujący
pedał pokazuje, jak można wykorzystać numer seryjny, aby zaprogramować poszczególne urządzenia
w różny sposób.
Konstrukcja mechaniczna pedału w wersji 3
Obudowa pedału w wersji 3 została wykonana z dwóch obudów Z37 połączonych razem. Połączenie obudów nie jest zagadnieniem prostym.
Użyłem do tego celu kleju dwuskładnikowego, ale nie wiem, jak długo połączenie wytrzyma instensywną
eksploatację.
Regulator nożny wykonałem identycznie jak w pierwszej wersji.
Jako przełączniki nożne wykorzystałem przełączniki
TL6520-112, ale można także
użyć np. przełącznika PBS24-112.
Układ elektroniczny jest na tyle prosty, że można go zmontować na płytce uniwersalnej.