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.
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.
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.
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