Введение
MIDI-контроллер — устройство, преобразующее определённый физический процесс в набор цифровых команд формата MIDI. Физическим процессом может являться всё, что угодно — от нажатия пальцем на клавишу до поворота ручки громкости. Полученный поток команд передаётся посредством протокола MIDI другим устройствам — компьютеру, аппаратным семплерам, синтезаторам или внешним секвенсорам и расшифровывается там определённым образом. Наиболее распространённым типом MIDI-контроллера является MIDI-клавиатура — электронный аналог клавиатуры фортепиано. Также существует множество других типов контроллеров, среди которых — электронные ударные установки.
На современном рынке представлено огромное количество разнообразных MIDI-контроллеров электронных установок, различающихся по всевозможным критериям, таким как цена, качество, технические характеристики и т.д. Так же существует несколько законченных пользовательских устройств, которые реализованы как коммерческие проекты (eDrum, megaDrum). Но, не смотря на все это, желание создать подобное устройство своими руками по прежнему живет в умах современных Кулибиных.
Так и я несколько лет назад с небольшим запозданием загорелся созданием подобного устройства, так как принимал участие в музыкальной группе тяжелого направления. Мы играли тяжелый рок, а точнее что-то типа brutaldeath, goregrind, grindcore. Я играл на электрогитаре. Немногим ранее мы прикупили барабанную установку Sonor и шумели по вечерам в гараже. Позже с гаража нас попросили, и встал вопрос о помещении. Ничего путного не найдя, мы решили репетировать дома, что сразу привело к конфликту с соседями. Тут и встал вопрос об электронных барабанах.
Параллельно игре на живых инструментах я занимался написанием электронной музыки и использовал VST инструменты и плагины, в частности для создания ударных партий я отдавал предпочтение Addictive drums и ezDrums, которые имеют возможность работать с MIDI-интерфейсом. Даже не погуглив данную тему, я с головой окунулся в разработку собственного MIDI-контроллера на доступном микроконтроллере ATMega32 в DIP-корпусе, который имел на борту 8 ацп каналов. Городить схему не хотелось, и я решил ограничиться 8-мью входами. Так как аппаратного usb у ATMega32 нет, я использовал стандартное подключение к компьютеру через virtual usb. Повозившись несколько дней с программированием мне удалось запустить устройство. Каково же было мое удивление, когда в интернете я обнаружил готовое устройство со схемой и прошивкой (MegaDrum). Но все что не делается – все к лучшему.
Полноценный USB
По специальности я программист, но по роду деятельности я программист-электронщик, кандидат технических наук, и как говаривал мой бывший научный руководитель – и швец, и жнец, и на трубе дудец. Как это часто водится, я зациклился на AVR-ках, не потому что питал к ним чувства, а потому что по работе они полностью устраивали своими техническими характеристиками. Но пришло то время, когда их стало не хватать. И тогда на смену пришел stm32, помимо всего прочего, имеющий на борту полноценный usb интерфейс. Тут то и пришла мысль сделать полноценный MIDI-контроллер. К тому же опыт работы с MIDI-интерфейсом у меня уже был.
С чего начать? stm32 в DIP корпусах у нас не водились (если они вообще есть в природе), поэтому идея паять на монтажной плате сразу отпала. Как раз тогда стали появляться дешевые отладочные платы на базе микроконтроллеров stm32, такие как DISCOVERY. И вот я счастливый обладатель отладочной платы STM32F407DISCOVERY, имеющей в своем составе сразу и программатор ST-Link. Процессор STM32F407 имеет 16-каналов ацп, правда 4 канала заняты под периферию, которой просто нафарширована отладочная плата. Но для моих целей 12 каналов было достаточно.
Потратив какое то время на изучение среды программирования Keil, архитектуры микропроцессора STM32F407 а так же стандартных библиотек периферии для работы с USB я накидал программку опроса всех каналов АЦП с использованием канала прямого доступа к памяти, а так же композитного USB устройства, которое включает в себя MIDI Audio Device и HID для изменения настроек устройства.
В качестве датчиков для барабанов я использовал пьезозвонок ЗП-1, который можно было купить в магазине за недорого.
Схему обвязки взял от MegaDrum.
Управляющую программу написал на Delphi сразу с запасом в 16 каналов. В принципе количество каналов устройства можно увеличивать до бесконечности, путем дополнения схемы аналоговыми мультиплексорами, как это и сделано в Megadrum, но для наших целей достаточно и 16 каналов, так как мы не такие продвинутые музыканты. А для начинающего барабанщика такого количества барабанов будет просто за глаза.
Устройство тестировалось как в Windows, так и в Linux с использованием трекера Renoise. Особых проблем в работе обнаружено не было.
Но на этом результате я решил не останавливаться. STM32F407 достаточно навороченный процессор, поэтому относительно не дешевый. Дешевле было сделать устройство на STM32F103. На помощь пришел ebay. Я купил отладочную плату с STM32F103RBT6 на борту.
Правда в ее составе нет встроенного программатора. Мне повезло, так как у меня остался от предыдущей работы программатор ST-Link.
Пришлось полностью переписать прошивку, так как принципы работы у 407 и 103 процессоров хоть и не кардинально, но различаются.
Далее я наткнулся в интернете на отладочную плату, которая стоила вообще копейки, и решил, что таким образом можно свести стоимость комплектующих к минимуму.
Это отладочная плата с процессором STM32F103C8T6. Размеры у нее просто мизерные, правда в этом корпусе в наличии только 10 каналов АЦП. Обвзяку сделал свою, что бы минимизировать затраты и монтаж элементов.
Использовал стабилитроны КС568А и резисторы номиналом 10 кОм.
Так же отказался от прошлых датчиков ЗП-1, а взял обычные пьезокерамические сенсоры.
При таком раскладе расходы на изготовление практически свелись к нулю.
В следующих статьях я планирую выложить схемы, прошивки и видео.
Ссылки
1. ru.wikipedia.org/wiki/MIDI-контроллер
2. www.edrum.info
3. www.megadrum.info
4. www.obdev.at/products/vusb/index.html
5. easystm32.ru/stm32f4-discovery
6. www.renoise.com
Автор: pavelstaf