Niezwykły kontroler MIDI - MIDIBox (1)

Niezwykły kontroler MIDI - MIDIBox (1)

Projekt MIDIBox Thorstena Klose odkryłem ponad 16 lat temu, w czasach, gdy pomimo braku talentu i umiejętności bardzo chciałem tworzyć muzykę elektroniczną. W tamtych czasach kontrolery i klawiatury MIDI były relatywnie drogie, dlatego droga "zrób to sam" była dla mnie kusząca.

To właśnie przez MIDIBox kupiłem swój pierwszy programator mikrokontrolerów, PICKit3, a potem nauczyłem się programować w C. MIDIBoxa w ostateczności nie uruchomiłem, ale nie z braku chęci. Prędzej czy później wrócę do tego projektu, a tymczasem przybliżę go na łamach "Elektroniki Praktycznej". Zainteresowanych budową odsyłam na stronę projektu: www.uCapps.de.

Czym jest MIDIBox?

MIDIBox jest uniwersalnym urządzeniem MIDI. MIDI (skrót od Musical Instrument Digital Interface, "cyfrowy interfejs instrumentów muzycznych") to interfejs i protokół komunikacyjny pozwalający na współpracę różnych elektronicznych instrumentów muzycznych i współpracujących z nimi urządzeń: syntezatorów, klawiatur i kontrolerów sterujących, sekwencerów czy kontrolerów standardu CV (Control Voltage - napięcie kontrolne - standard używany w analogowych syntezatorach modularnych, jak na przykład syntezatory Moog). MIDI pozwala też na współpracę tych wszystkich urządzeń z komputerami, a konkretnie ze specjalizowanym oprogramowaniem DAW (Digital Audio Workstation - cyfrowa stacja robocza audio) używanym do tworzenia i grania muzyki. Oprogramowanie może sterować syntezatorami sprzętowymi, ale częściej jednak działa to w drugą stronę - instrumenty, klawiatury sterujące i kontrolery MIDI sterują oprogramowaniem. Oczywiście nie są one potrzebne, ale możliwość fizycznego kontrolowania parametrów wirtualnego instrumentu lub efektu za pomocą przycisków i enkoderów oraz grania na nich za pomocą klawiatury sterującej lub instrumentu MIDI bardzo ułatwiają pracę.

Fotografia 1. Moduł główny z mikrokontrolerem PIC

Instrumenty i kontrolery MIDI z reguły nie są tanie, gdyż jest to rynek dość niszowy. MIDIBox powstał w 2005 roku jako tańsza alternatywa i jest wciąż rozwijany. Projekt składa się z trzech elementów:

  • platforma sprzętowa,
  • system MIOS,
  • aplikacja.

Platforma sprzętowa ma budowę modułową, główną częścią jest płytka z mikrokontrolerem - do niej dołączane są inne moduły. Pierwotnie MIDIBox używał mikrokontrolera PIC18F452, wraz z rozwojem samego projektu dodane zostały inne mikrokontrolery PIC, a potem dużo potężniejsze układy LPC1769 od NXP oraz STM32F407VGT6 od STMicro. W obu przypadkach używane są płytki rozwojowe do tych mikrokontrolerów. W skład platformy wchodzi też szereg modułów interfejsowych obejmujących wejścia i wyjścia analogowe, wejścia i wyjścia cyfrowe, moduły pod układy syntezy SID i OPL-3. Osobną kategorię stanowią moduły już nieużywane, wśród nich znajdziemy "moduł", który zbudowałem - interfejs MIDI-USB z mikrokontrolerem PIC18F4550. Powodem jego realizacji był fakt, iż tanie kable USB-MIDI nie działają zbyt dobrze - posiadany przeze mnie egzemplarz gubił dane i dodawał niemal półsekundowe opóźnienie, gdy był podłączony do keyboardu Yamahy. Moduł USB PIC rozwiązał ten problem. Wróćmy jednak do głównego projektu i przyjrzyjmy się platformie sprzętowej.

Core, czyli serce MIDIBoxa

Pierwsza wersja MIDIBoxa została zaprojektowana wokół mikrokontrolera PIC18F452 lub PIC18F4520. Jednak bardziej wymagające aplikacje potrzebowały nieco większego pod względem pamięci programu i operacyjnej układu PIC18F4620 lub PIC18F4685. Tabela 1 prezentuje istotne różnice między tymi układami.

Wszystkie te układy taktowane są z częstotliwością 40 MHz za pomocą zewnętrznego rezonatora kwarcowego 10 MHz i wewnętrznego układu PLL. Ze względu jednak na sposób działania CPU w ośmiobitowych układach PIC rzeczywista prędkość układów wynosi 10 MIPS. Dodatkowo układy są pinowo zgodne, dlatego wystarczy jedna płytka do wszystkich trzech.

Rysunek 1. Schemat modułu z mikrokontrolerem PIC

Schemat pokazuje rysunek 1, wzór PCB z rozmieszczeniem elementów prezentuje rysunek 2.

Rysunek 2. Rozmieszczenie elementów na płytce modułu z mikrokontrolerem PIC

Jak widać, poza samym mikrokontrolerem i elementami potrzebnymi do jego działania znajdziemy tu dużą liczbę złączy i zgodny ze specyfikacją interfejs MIDI. Jak widać, konstrukcja całości jest relatywnie prosta.

Następna wersja rdzenia projektu MIDIBox powstała w oparciu o płytkę rozwojową LPCXpresso z układem LPC1769. W pewnym momencie rozważałem wykonanie tej wersji MIDIBoxa, ale cena tego zestawu rozwojowego mnie skutecznie zniechęciła. Rysunek 3 prezentuje schemat płytki, do której wpina się płytkę rozwojową. Nie będziemy jednak omawiać tego wariantu MIDIBoxa z prostej przyczyny: wymagane płytki LPCXpresso są trudno dostępne. Ponadto autor projektu zaznaczył, iż występują problemy z komunikacją z IDE LPCXpresso, przez co zaprogramowanie tej wersji MIDIBoxa może być niemożliwe.

Rysunek 3. Moduł główny z płytką LPCXpresso

Trzecią opcją do wyboru jest zestaw rozwojowy STM32F4 Discovery. Schemat prezentuje rysunek 4. Brakuje tu klasycznego interfejsu MIDI, gdyż płytka Discovery zapewnia go przez port USB. Autor nie udostępnia wzoru PCB, ale całość jest na tyle prosta, iż każdy może przygotować własny wariant.

Rysunek 4. Moduł główny z płytką STM32 Discovery

Osobiście sugerowałbym zaprojektowanie jednej dużej płytki zawierającej wszystkie komponenty potrzebne do wykonania konkretnego projektu opartego na MIDIBox - ceny chińskich płytek są relatywnie niskie, a taki projekt może być świetnym ćwiczeniem w projektowaniu PCB i układaniu elementów tak, by zminimalizować zajmowane miejsce. Sama płytka Discovery taktowana jest zegarem 168 MHz, co w połączeniu z wydajnym rdzeniem ARM Cortex M4 daje naprawdę spory przyrost mocy obliczeniowej w porównaniu z układami PIC. Dodatkowo mamy jeszcze 1 MB pamięci Flash i 128 kB pamięci RAM do dyspozycji, wspomniany interfejs USB i UART, a także wbudowany programator/debugger ST-LINK V2. Z tego też powodu sama płytka rozwojowa nie jest najtańsza. Byłoby naprawdę dobrze, gdyby powstała też wersja oprogramowania MIOS pod tanie moduły STM32F4 Black Pill.

Główne moduły MIDIBoxa

Wielką siłą MIDIBoxa jest jego modularna budowa. Każda aplikacja MIDIBoxa wymaga różnych modułów, ale kilka z nich powtarza się we wszystkich projektach. Są to ekran LCD, moduły cyfrowych wejść i wyjść oraz moduł wejść analogowych. Do tej listy można jeszcze dodać moduł zawierający pamięć ustawień. Inne moduły są specyficzne dla konkretnych zastosowań, jak na przykład moduł SID pozwalający wstawić słynny układ syntezy firmy MOS, znany z komputerów Commodore.

MIDIBox oryginalnie używał wyświetlaczy LCD HD44870, standardowo 2×16 znaków. MIDIBox SEQ i MIDIBox LC używają dwóch wyświetlaczy łączonych równolegle, by wyświetlać więcej informacji naraz. Standardowo wystarczy jeden wyświetlacz. Z czasem jednak dodano wsparcie dla wyświetlaczy graficznych - obecnie opcji do wyboru jest sporo. Dla mnie to fajny "bajer", ale myślę, że w praktyce lepiej sprawdzi się dobry wyświetlacz znakowy. Warto zaznaczyć, iż MIDIBox wspiera wyświetlacze o różnej liczbie znaków - w moim MIDIBoxie użyty miał być wyświetlacz LCD 4×20.

Moduł DIN służy do obsługi przycisków, przełączników i enkoderów oraz generalnie innych wejść cyfrowych. Rozwiązanie sprzętowe jest banalnie proste - każdy moduł zawiera od jednego do czterech rejestrów przesuwnych 74HC165, z zestawem rezystorów podciągających wejścia do linii +5 V. Moduły można łączyć kaskadowo. MIDIBox oparty o ośmiobitowe mikrokontrolery PIC wspiera do 128 wejść, czyli 16 rejestrów łączonych szeregowo. Jeśli jednak zdecydujemy się użyć wariantu 32-bitowego, standardowa liczba wejść cyfrowych rośnie do 256. Niemal identyczną budowę mają moduły DOUT - wyjścia są realizowane za pomocą połączonych szeregowo układów 74HC595, a każde wyjście zabezpieczone jest rezystorem ograniczającym prąd do ok. 22 mA. Każdy moduł ma cztery układy, moduły można łączyć szeregowo. Ponownie daje to odpowiednio 128 lub 256 wyjść cyfrowych, zależnie od rodzaju płytki głównej. Wyjścia te zazwyczaj sterują diodami LED, i w niektórych projektach diody te łączone są w matryce, by uzyskać pierścienie LED wokół enkoderów. Moduł DIO używa dwóch rejestrów 74HC165 jako wejść i dwóch rejestrów 74HC595 jako wyjść i jest przeznaczony do budowy dużych matryc klawiszowych. Moduł ten pozwala na budowę matryc o rozmiarach 16×16, czyli 256 przycisków. By uniknąć niepożądanych efektów działania matrycy, każdy przełącznik powinien mieć włączoną szeregowo diodę, 2N4148 jest dobrym wyborem. Dzięki połączeniu modułów DIN i DOUT oraz użyciu odpowiedniej aplikacji MIDIBox może współpracować z matrycami diod i przycisków.

Fotografia 2. Matryca diod LED i przycisków 17×17 kontrolowana przez moduły DIN i DOUT

Przykład takiej matrycy prezentuje fotografia 2, na której widzimy matrycę przycisków i diod o rozmiarze 17×17, przy czym diody są dwukolorowe. Łącznie zatem kontrolowanych jest 289 przycisków i 578 diod.
Moduł AIN dodaje 32 wejścia analogowe do MIDIBoxów opartych na mikrokontrolerach PIC. W tym celu używa czterech multiplekserów 4051 i czterech wejść analogowych układu PIC. Moduły te są przeznaczone do obsługi potencjometrów. Dla MIDIBoxów 32-bitowych przeznaczony jest moduł AINSER64 i uproszczony AINSER8. Oba używają układu ośmiokanałowego 12-bitowego przetwornika ADC MCP3208 od firmy Microchip. AINSER64 dodatkowo ma 8 multiplekserów 4051 i własny stabilizator napięcia analogowego 7805. AINSER8 zawiera tylko sam przetwornik ADC. Moduły oferują odpowiednio 64 i 8 wejść analogowych, większą rozdzielczość (układy PIC mają ADC 10-bitowe) i niższe szumy własne. Obsługa do 64 potencjometrów pozwala na budowę kontrolerów do sterowania wirtualnymi instrumentami i wirtualnymi mikserami w oprogramowaniu do tworzenia i produkcji muzyki.

Ostatnim, podstawowym modułem jest BankStick, czyli zewnętrzna pamięć konfiguracji MIDIBoxa. BankStick zawiera do ośmiu układów szeregowych pamięci EEPROM 32 kB/64 kB z interfejsem I²C. Używane są do zapisywania bieżącej konfiguracji kontrolera i mogą być wymieniane bez wyłączania zasilania.

Standardową metodą przyłączania BankSticków do MIDIBoxa jest wtyk i gniazdo DB-9. Pojedynczy układ można ukryć we wtyczce, co jest dość sprytnym rozwiązaniem, choć nie widzę problemów, by połączyć ze sobą kilka układów, odpowiednio konfigurując ich adresy pinami A0...A2. Pamięci EEPROM I²C są relatywnie drogie, gdyż pamięci Flash SPI są dużo powszechniejsze i stosowane w wielu urządzeniach. Za cenę jednego układu 24LC512 można kupić cztery pamięci Flash SPI, każda o pojemności ośmiu takich układów.

Moduły specjalizowane

MIDIBox dorobił się kilku modułów specyficznych dla konkretnych zastosowań. Są to m.in. moduły SID, OPL3, MF, MF_NG i moduły AOUT w trzech różnych wariantach.

Moduły MF i MF_NG przeznaczone są do kontrolowania silników w zmotoryzowanych potencjometrach suwakowych i obrotowych. Spotyka się je w profesjonalnych stołach mikserskich, gdzie każda zmiana położenia suwaków czy gałek może być nagrana, a potem odtworzona. Moduł MF realizował to programowo, emulując sygnały PWM za pomocą rejestrów 74HC595 i driverów MOSFET TC4427. Rozwiązanie to okazało się niedoskonałe, dlatego ten moduł nie jest zalecany - zamiast tego używać należy modułu MF_NG. Jego sercem jest kolejny mikrokontroler PIC18F452(-0). Drivery zamieniono na układy L293D. Ponieważ mikrokontroler generuje sygnały sterujące bezpośrednio, całość działa znacznie płynniej i ciszej. Moduł może działać jako niezależne urządzenie MIDI, ale może też być częścią MIDIBoxa.

Moduł SID przeznaczony jest do projektu MIDIBox SID i tylko do niego. Zarówno moduł, jak i cały projekt zbudowany jest wokół słynnych układów syntezy dźwięku 6580 i 6581 firmy MOS. Układy te nie są już produkowane od lat, a jedynym ich źródłem są stare komputery Commodore 64. Ceny tych układów są wysokie (200...300 złotych za jeden układ), a do tego na rynku krąży spora liczba "malowanek", czyli układów wyglądających jak oryginał. Szczególnie MOS 6581 jest poszukiwanym układem ze względu na rzekomo lepsze brzmienie. Były też podejmowane próby emulacji tych układów, jak na przykład SwinSID, który jest 3...4 razy tańszy od używanego oryginału. Sam moduł jest dość prosty - rejestry 74HC595 są używane, by zamienić dane przesyłane szeregowo na format równoległy, którego oczekuje sam układ. Na płytce znajduje się też obwód zasilania części analogowej SID-a dostarczający napięcie 12 V oraz bufor wyjściowy dla sygnału audio. Bufor ten chroni układ przed przypadkowym uszkodzeniem i składa się z prostego wtórnika emiterowego na tranzystorze BC547.

Rysunek 5. Schemat modułu OPL3

Moduł OPL3 (rysunek 5) pod pewnymi względami przypomina moduł SID, gdyż też jest przeznaczony do budowy syntezatora, tym razem MIDIBox FM Synth. Moduł i cały projekt zbudowane są wokół układu YMF262 firmy Yamaha. Jest to scalony, cyfrowy syntezator FM oferujący 18 niezależnych kanałów, z których każdy zawiera dwa operatory, czyli programowalne generatory audio. Układ oferuje syntezę addytywną - sygnały z obu operatorów są sumowane, albo syntezę FM: pierwszy operator moduluje sygnał generowany przez drugi operator. Dodatkowo dwa kanały można połączyć w jeden, by uzyskać bardziej złożone dźwięki, używając różnych kombinacji syntezy addytywnej i FM. Ponadto trzy kanały można zamienić na 5 predefiniowanych instrumentów perkusyjnych. Układy serii OPL odpowiadają za charakterystyczne brzmienie wielu gier z drugiej połowy lat 80. i lat 90., były też używane w keyboardach Yamahy. Wracając do modułu, to poza układem YMF262 na płytce znajduje się miejsce dla dwóch przetworników DAC YAC512 oraz dwóch układów poczwórnych wzmacniaczy operacyjnych TL074. W praktyce wystarczy jeden układ YAC512 i jeden układ TL074, by uzyskać dwa kanały audio dla dźwięków stereo. Dodanie drugiego zestawu układów pozwala nam uzyskać cztery kanały analogowe. Wielką przewagą modułu OPL3 nad SID-em jest cena - układy YMF262 i YAC512 były używane w wielu kartach dźwiękowych do komputerów PC, zwłaszcza w kartach Creative SoundBlaster z lat 90.

Sama synteza FM pozwala uzyskać wiele ciekawych brzmień, niekiedy bliskich brzmieniom tradycyjnych instrumentów.

Moduły AOUT, AOUT_LC i AOUT_NG mają jedno zastosowanie: wytwarzanie napięć w standardzie CV (Control Voltage) dla modularnych syntezatorów analogowych. Moduł AOUT (rysunek 6) używa dwóch układów MAX525 i dwóch układów TL074 w celu uzyskania ośmiu kanałów analogowych i dwóch sygnałów Gate. W roli źródła napięcia odniesienia pracuje układ MAX6007B, zapewniający stabilne napięcie 2,048 V. Układy TL074 pracują jako wzmacniacze napięcia i bufory wyjściowe. Wartości elementów Rx, Ry i Rp należy dobrać tak, by na wyjściach uzyskać pożądany zakres napięć kontrolnych.

Rysunek 6. Schemat modułu AOUT

Na schemacie podane są przykładowe wartości dla standardu 0...10 V, gdzie zmiana napięcia o 1 V odpowiada jednej oktawie oscylatora w syntezatorze analogowym. Moduł AOUT_LC to mocno budżetowa alternatywa używająca dwóch układów 74HC595, układu TL072 i dużej liczby rezystorów w celu stworzenia prostego przetwornika DAC R2R. Dokładniej to dwa ośmiobitowe przetworniki R2R. Przy czym płytka ma dwie konfiguracje do wyboru: jedna pozwala uzyskać przetwornik 12-bitowy i 4-bitowy do użycia w projekcie MIDIBox SID lub właśnie dwa przetworniki ośmiobitowe. Rozwiązanie z drabinką R2R było używane jako sposób na syntezę dźwięku w komputerach PC w formie adaptera Covox Speech Thing i Disney Sound Source. To, jak dokładne są takie przetworniki, jest mocno zależne od tolerancji samych rezystorów. Dla przetworników ośmiobitowych powinno to być minimum 0,4%, dla każdego dodatkowego bitu tolerancja musi być dwa razy lepsza, szczególnie dla bitów LSB. Dla konfiguracji 12/4 bity moduł AOUT_LC powinien używać rezystorów o tolerancji 0,025%.

Moduł AOUT_NG to zmodyfikowana wersja AOUT. W tym przypadku przetworniki MAX525 zamieniono na układ TLV5630IDW od Texas Instruments. W porównaniu z AOUT wypada nieco gorzej, ale w zamian dodaje możliwość uzyskania także napięć ujemnych. Problemem może być zdobycie samego układu przetwornika DAC i jego wyższa cena. Dlatego moduł AOUT wydaje się jednak lepszą opcją.

Podsumowanie

Projekt MIDIBox od strony sprzętowej jest ciekawym przykładem tego, jak wiele funkcji można uzyskać za pomocą prostych w budowie modułów i dobrze napisanego oprogramowania. Większość komponentów jest łatwo dostępna, autor starał się unikać komponentów SMD, wychodząc z założenia, iż początkujący elektronicy mogą nie poradzić sobie z montażem. Ponadto jednostronne płytki drukowane jest dużo łatwiej wykonać w warunkach domowych, a projekt ten powstał, zanim możliwość zamówienia płytek w Chinach stała się cenowo przystępna.

W następnej części przyjrzymy się systemowi MIOS i aplikacjom, jakie są dostępne dla platformy sprzętowej MIDIBoxa.

Paweł Kowalczyk
urgon@wp.pl

Artykuł ukazał się w
Elektronika Praktyczna
grudzień 2023

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik kwiecień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio maj - czerwiec 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje kwiecień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna kwiecień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich maj 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów