Мой сайт
Воскресенье, 05.05.2024, 13:19



Приветствую Вас Гость | RSS
[ Главная ] [ Модуль электронной барабанной установки ] [ Регистрация ] [ Вход ]
Меню сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Модуль электронной барабанной установки

В данной статье описано 2 варианта исполнения данного устройства из 3-х. первый вариант самый неинтересный и не нуждается в вашем внимании.


Собственно моя практика с микроконтроллерами началась из-за идеи соорудить электронную установку.
Так же и до сих пор этот вопрос остается открыт. Всякий раз делая блок находились ошибки и недоработки, которые в текущем исполнении уже не исправить.

Сама идея заключалась в следующем:
На электронном барабане существует датчик (пъезоизлучатель). При появлении на нем сигнала, нужно узнать силу удара и запустить звук в формате WAV.
В описанной ниже конструкции на каждый барабан отводится 1 канал. т.е. одновременно могут звучать хоть все барабаны вместе.

ИТАК: вариант первый!!!

Внешний вид:




Каждый блок барабана состоял из одной платы. При чем одним контроллером оцифровывался входной сигнал и по заумному алгоритму определялась сила удара.
Тем же контроллером задавался коэффициент усиления и запускался другой контроллер.

Второй же контроллер просто выводил данные с ROM в ЦАП при чем еле успевая на 16 МГц.
Так что если бы одним контроллером отслеживать датчик и воспроизводить, .... ничего хорошего я бы не услышал.

Когда звук уже играет и поступает новый сигнал, звук проигрывается заново.
задержки можно сказать нет.

На фото подключено только 2 барабана (2 платы)



Подробнее о работе одного блока:







Принцип работы одного блока:
На вход подключается 2 датчика (центр барабана и край)
В зависимости от входного сигнала воспроизводится соответствующий звук.
Блок может воспроизводить только один звук.
При этом учитывается сила удара и установленная громкость.

Состоит из 2-х контроллеров (Atmega8):
1.    Непрерывно опрашивает 2  канала встроенного АЦП и ждет пока сигнал не перейдет за пороговое значение. Затем в течении некоторого времени записывает сигнал в память, и ищет максимальное значение. На основе этого значения по входной характеристике задает громкость сигнала на внешний резисторный ЦАП, и запускает один из звуков.                                                                            
2.    При запуске первым контроллером, устанавливает адрес внешней памяти (1-го или 2-го звука) и выводит звук через внешний 16-ти битный ЦАП.                                                                               Если звук еще не закончился, и поступает новый сигнал запуска, воспроизведение начинается заново

Все параметры входной характеристики хранятся в "своем" контроллере.
Загрузка звуков в память на каждом модуле осуществляется с главного модуля.
Для этого в устройстве организована общая шина данных (последовательная ).

По ней передается номер контроллера куда нужно передать и команду затем после получения ответа от контроллера (по отдельной линии подтянутой к нулю) пересылаются либо параметры либо аудиофайл.
Также по шине может информация передаваться и обратно (осциллограмма входного сигнала для настройки чувствительности).

Шину можно считать SPI хотя она не аппаратная и со своими особенностями.
Главный модуль один. Остальные контроллеры подчиненные (slave).


Первый контроллер может:
-    Принимать 4 байта для построения входной характеристики: Пороговое значение, минимальный уровень громкости, величина компрессии, ожидание затухания сигнала.
-    Отправлять 2 байта входного сигнала: о найденном максимуме импульса и установленной громкости.
-    Отправлять массив данных входного импульса (требуется для регулировки чувствительности).
-    Принимать данные о включении и выключении блока.
-    Принимать данные о громкости каждого из 2-х звуков.

Второй контроллер получает 256 кб данных которые по 512 б загружает во внешнюю Flash память (Изменение звучания барабана)


Управляющий блок работает с картой памяти MMC, графическим дисплеем и клавиатурой.

В нем изначально стояла ATmega16, но после её заполнения пришлось перейти на ATmega32. Распиновка такая-же так что переделывать ничего не пришлось.


главное меню:
                                                                                регулировка громкости:




Выбор звука и загрузка его в нужный блок

Здесь пришлось разобратся с такой интересной вещью, как карта памяти MMC и система FAT16.
После долгого мучения был разработан код для работы с картой, которым пользуюсь до сих пор.
 (выбор блока и зоны удара куда загрузим)    (работа в файловой системе ПАПКИ – ФАЙЛЫ
)



Установка входной характеристики



Индикация входного импульса для настройки входной цепи.
(также показан максимум импульса и найденная громкость по характеристике)





Выводы:
Уже когда сделал 3 блока, очень разочаровался в результатах.
- загрузка происходила очень долго. Длинные звуки (5 сек) загружались по 30-40 секунд.
- при быстром повторном ударе был перебой прошлого, это было не реалистично и после того как я поиграл пол часа на 3-х барабанах, пропало желание дорабатывать изделие до конца.

В идеале когда по барабану бьется быстро 2 раза. первый звук не должен резко пропадать. а накладываться со вторым.

Сейчас судьба этого изделия печальна: все ценные детали были постепенно извлечены, ну а коробка валяется на балконе.



ВТОРОЙ ВАРИАНТ!!!
Как то раз мне приглянулся тогда еще новый контроллер ATXmega.
Показался довольно хорошей штукой. Он имеет в себе очень много. и прост так же как и остальные AVR.

То что можно улучшить было следующим:

Первое улучшение:
У новой Хмеги было много аппаратных SPI и 4 внутренних ЦАП.

Значит можно подключить к меге 4 внешних FLASH-ROM (у меня они были в большом количестве).
И если не отпускать SC у каждого FLASH-ROM, то можно параллельно выводить звуки на приличной скорости.

И после проведения исследования и разгона оказалось, то как раз на 4 воспроизведения мега и способна ( не больше)

Если подключить одну большую память. то за каждую дискретизацию требовалось адресоваться в нужную ячейчу, вычитать добавить адрес, запомнить. перейти к след звуку и т.д... а на это она была не способна.

А когда просто выводим с каждого SPI "свой" звук, тогда не нужно никаких адресов - первый раз выставил на начало, а затем данные изут последовательно.

Итак один контроллер способен выдавать 4 независимых звука.
А было решено отвести на каждый барабан по 2 канала.
Звук стал вполне реалистичный (кроме дроби - там и 10 каналов наверное будет мало).

Управляющий модуль уже обслуживал оцифровку всех датчиков и запускал звуки.
Регулировку громкости производила микросхема TDA7448 (6 канальный регулятор громкости I2C)

Второе улучшение - увеличение скорости загрузки.

Раньше была проблема что главный блок загружал блок данных затем по SPI передавал контроллеру который уже записывал его в память:
Карта памяти -> Контроллер -> Контроллер -> Память.

Решил сделать так, чтобы карта памяти была доступна с любого контроллера.
Это было легко достигнуто с помощью диодов.
Если на SC обнаруживался 1 то любой контроллер мог считать с карты информацию.

Теперь для загрузки требовалось контроллеру знать лишь номер папки и файла. А затем контроллер загружал файл в память напрямую.

Карта памяти -> Контроллер -> Память.
Скорость загрузки звуков увеличилась раз в 15-20.
 
В итоге на одной плате вместилось 3 контроллера (6 барабанов)
для полноценной установки требуется 12 ну или больше по желанию.

Печатная плата:

Плата главного модуля:

ну тут все очень скучно.
Дисплей взял от нокия3310 и энкодер освоил для удобства.




Выводы:

Это устройство намного лучше предыдущего. но сильно сложное как для простой барабанной установки.
В данный момент устройство работает (не доделанное) но есть идея сделать все на ОДНОМ микроконтроллере STM.
Так что как только руки дойдут, буду пробовать...



Поиск

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Copyright MyCorp © 2024      Сделать бесплатный сайт с uCoz