Na rynku możemy spotkać masę tanich, gotowych „arduinowych” płytek z Chin, które wyręczają nas w realizacji prostych bloków elektronicznych na etapie eksperymentów i nauki, zwłaszcza dotyczących układów programowalnych. Nie znalazłem jednak modułu, który pozwoli na podłączenie elektronicznego sprzętu muzycznego w standardzie MIDI do mikrokontrolera lub procesora sygnałowego – w związku z tym, że ta tematyka mnie interesuje, postanowiłem wykonać taki moduł samemu.
Schemat układu jest ukazany na rysunku 1. Budowa została oparta na mikrokontrolerze IC1 STM32F030F4P6 (rdzeń ARM Cortex M0), który wykorzystuje wbudowane interfejsy szeregowe: UART do odbioru komunikatów w standardzie MIDI oraz SPI do komunikacji z zewnętrznym układem, jako standardowy i powszechny interfejs transmisji danych. Mikrokontroler ten jest zasilany napięciem 3,3 V. Postanowiono, że cały konwerter zasilany będzie równolegle z tego samego zasilacza, co płytka z procesorem docelowym, stąd zastosowany został stabilizator 78L33 (IC3), wraz ze standardowym gniazdem niskonapięciowym oraz diodą zabezpieczającą przed odwrotną polaryzacją. Napięcie wejściowe może wynosić 6…12 V. Istnieje również możliwość dostosowania konwertera do zasilania go stabilizowanym napięciem przez szpilki SPI.
Do gniazda CON1 (standardowe DIN5) podłączane jest urządzenie nadające komunikaty MIDI. Standard ten definiuje zastosowanie optoizolowanej pętli prądowej, aby uniknąć powstawania pętli mas oraz przenikania zakłóceń od dużej ilości sprzętu elektroakustycznego. Obwody odbiorcze zostały zrealizowane w sposób w pełni zgodny z zaleceniami w standardzie. W pętli prądowej znalazł się transoptor Sharp PC900V, rezystor, dwa koraliki ferrytowe i dioda D1 (na wypadek podłączenia sygnału o obwrotnej polaryzacji). Zastosowane zostały także kondensatory C11, C12, mające blokować zakłócenia EMI z pasma ponadakustycznego, indukujące się w ekranie przewodu. Sama transmisja MIDI jest kompatybilna z 8-bitową transmisją UART o prędkości 31250 baud, z 1 bitem stopu, bez kontroli parzystości. Zero logiczne odpowiada wartości prądu ok. 5 mA w pętli, a jedynka 0 mA. Parametry obwodu zostały dostosowane do pracy z napięciem zasilania 3,3 V. Sygnał wyjściowy z transoptora trafia na odpowiedni pin mikrokontrolera.
Aby zapewnić stabilną pracę głównego układu, zastosowany został kontroler napięcia zasilania (IC2) z serii MCP130, który zresetuje mikrokontroler, kiedy napięcie zasilające spadnie poniżej 3,0 V, a także po włączeniu zasilania. Zawiera on obwód typu open-drain (stan aktywny niski), więc w żaden sposób nie będzie uniemożliwiać procesu programowania mikrokontrolera.
Zastosowane zostały trzy kontrolki LED, z których jedna wskazuje obecność napięcia zasilającego, a pozostałe są sterowane przez mikrokontroler. Został również wyprowadzony pad lutowniczy do pinu mikrokontrolera umożliwiającego wykorzystanie jego nadajnika UART, gdyby ktoś potrzebował rozbudować konwerter o możliwość nadawania komunikatów MIDI. Zrezygnowano z umieszczania wyjścia MIDI-OUT oraz MIDI-THRU na płytce konwertera, ponieważ zakładano minimalizację jej wymiarów oraz ceny. Praktyka pokazała również, że przy realizacji prostych programów na procesorach sygnałowych z użyciem MIDI, użytkownicy korzystają tylko z wejścia.
Do podłączenia układu odbierającego dane przez SPI, zostały przewidziane szpilki goldpin 2×3 (JP2). Umożliwiają one zrealizowanie dwukierunkowej komunikacji wraz z linią slave select (NSS). Wszystkie linie sygnałowe są podłączane przez szeregowe rezystory 33 V, masa przez rezystor-zworę 0 V, a ostatnia (szósta) linia może być dołączona do GPIO mikrokontrolera lub do linii zasilającej. Złącze JP1 służy do programowania mikrokontrolera w standardzie SWD.
Do montażu konwertera została zaprojektowana dwustronna płytka drukowana, której schemat montażowy pokazano na rysunku 2. Prawie wszystkie elementy są w obudowach do montażu SMD. Zalecam zacząć od strony dolnej, lutując najpierw mikrokontroler, następnie wszystkie pozostałe elementy w dowolnej kolejności. Montaż strony górnej wykonujemy standardowo, zaczynając od elementów najniższych. Na końcu lutujemy goldpiny, gniazdo zasilające i masywne gniazdo DIN-5. Jeśli chodzi o gniazdo zasilające, na rynku dominują równolegle dwa standardy: 5.5/2.1 oraz 5.5/2.5 – są natomiast dostępne w handlu wersje kompatybilne z obydwoma rozmiarami i warto właśnie taki zastosować. Podczas montażu pomocne mogą być fotografie 3 i 4. Na tym etapie możemy wprowadzić możliwość zasilania przez SPI, nie montując R20, a w miejsce R21 rezystor-zworę 0 V. Należy mieć jednak na uwadze, że musi ono mieć stabilne 3,3 V, a układ nie będzie chroniony przed odwrotną polaryzacją napięcia.
Po uważnym sprawdzeniu poprawności montażu, włączamy zasilanie i sprawdzamy wartość napięcia VDD. Powinna zaświecić się również zielona dioda LED3. Jeśli wszystko jest w porządku, przystępujemy do programowania mikrokontrolera. Przygotowany został bardzo prosty program, który każdy może dowolnie modyfikować. Szkielet programu dla środowiska Keil 5 został wygenerowany w narzędziu STM32CubeMX – zarówno pliki źródłowe programu, jak i projekt w Cube są dostępne wśród materiałów dodatkowych do tego numeru EP. Po zaprogramowaniu, zmontowany ze sprawnych elementów konwerter będzie gotowy do pracy.
Jako obudowę urządzenia, przewidziano zaciśnięcie na całej płytce przeźroczystej koszulki termokurczliwej, zostawiając tylko odkryte goldpiny, gniazdo zasilania oraz MIDI-IN. Jest to rozwiązanie szybkie i estetyczne, wyraźnie widać światło diod, a całość nie zajmuje dużo miejsca w pudełku. Na fotografii tytułowej pokazano tak wykonane urządzenie. Do równoległego podłączenia zestawu uruchomieniowego oraz opisywanego konwertera do wspólnego zasilacza wtyczkowego, przygotowany został prosty rozdzielacz z gniazdem oraz dwiema wtyczami na krótkich odcinkach przewodów. Na fotografii 5 pokazano konwerter wraz ze współpracującym sprzętem.
SPI mikrokontrolera zostało skonfigurowane do pracy w jednokierunkowym trybie master ze sprzętowym sterowaniem linią NSS (slave select). Dane są wystawiane na narastającym zboczu zegara, począwszy od pierwszego zbocza, od bitów najbardziej znaczących. Szybkość transmisji wynosi 3 Mbit/s, a dane są wysyłane w pakietach 16-bitowych. Wprawdzie komunikaty MIDI są 8-bitowe, ale mikrokontrolery tej serii nie pozwalają na transmisję pojedyńczych paczek 8-bitowych. Natychmiast po odebraniu komunikatu MIDI, jest ona odsyłana przez SPI. W takiej 16-bitowej paczce 8 najstarszych bitów jest zawsze zerowych, a informacja MIDI jest zawarta w 8 najmłodszych. Przy każdym odebraniu i przekazaniu komunikatu MIDI, układ mruga niebieską diodą LED1. Dodatkowo, przy uruchomieniu konwertera mruga również czerwona dioda LED2, co oznacza prawidłowy rozruch mikrokontrolera – może się przydać podczas uruchamiania urządzenia. W przygotowanym oprogramowaniu, wyprowadzenie oznaczone FLAG jest nieużywane (skonfigurowane jako analogowe – o wysokiej impedancji) Oczywiście, urządzenie można dostosowywać do swoich potrzeb, modyfikując jego oprogramowanie.
Michał Pędzimąż
mpedzimaz@gmail.com