(авторский вариант статьи «Радио», 2013, №03, 04, с.47–50.)
Вместо труб использованы электромеханические излучатели, нагруженные на рупоры и резонансные камеры. Электрическую энергию вырабатывает генератор на базе шагового двигателя от 5-дюймового дисковода, который также задает и темп исполнения. Мелодия считывается с SD-карты, а при ее отсутствии – из внутренней Flash памяти контроллера.
Вниманию читателей предлагается несколько ранний вариант моего инструмента, нежели описанный в [1]. Он отличается использованием более адекватной микросхемы CY8C27443-24PI как с точки зрения любительского монтажа (корпус DIP28 с шагом выводов 2,54 мм), так и с точки зрения ее «начиненности» для данного применения. Это микроконтроллер с изменяемой конфигурацией аналоговой и цифровой части, так называемая «программируемая система на кристалле» («PSoC»), с примером использования которой читатели могли познакомиться в [2]. В данном случае используется ее возможность построить на кристалле, кроме других необходимых модулей, шесть независимых генераторов импульсов с широтно-импульсной модуляцией (ШИМ или «PWM» в английской аббревиатуре) для работы в качестве тон-генераторов.
Кроме того, в этой версии для хранения музыкального материала используются ставшие ненужными карты памяти SD небольшого объема, позволяющие хранить, тем не менее, тысячи песен. При отсутствии карты мелодия считывается из внутренней памяти микроконтроллера, но в этом случае количество песен ограничено, а для замены требуется «перепрошивка» микроконтроллера.
Приведу далее основные постулаты построения инструмента.
В обычной (механической) шарманке работает воздух, нагоняемый мехами в распределительный механизм, заставляющий звучать ту или иную трубу. Каждой взятой ноте соответствует своя звучащая труба – для расширения исполнительских возможностей требуется увеличивать их количество, а это приводит к удорожанию агрегата (а также его веса и габаритов). Обычно останавливаются на компромиссе из двух-трех десятков труб. Я предлагаю другой путь – ограничить число излучателей до минимума (связанного с количеством одновременно звучащих нот, например – до шести), но при этом заставить каждый источник работать в широком диапазоне частот. Такое возможно только с использованием электромеханических излучателей, работа которых целиком задается подводимым электрическим сигналом. В качестве излучателей подойдут недорогие динамические головки, нагруженные на рупор – с одной стороны, и на резонансную камеру – с другой.
Механическая часть при этом также упрощается – убираются меха и прочая пневматика, исключаются механизм включения нот и сам механический носитель программы – валик, перфолента или гармошка перфокарт (к слову сказать, в современных шарманках часто используются электронные запоминающие устройства). Все это заменяется простым электронным устройством, питание которого осуществляется от электрогенератора, приводимого в действие рукой музыканта (Рисунок 1). Этот же генератор формирует импульсы для задания темпа исполнения мелодии.
Рисунок 1
Рупорные излучатели и резонансные камеры («резонаторы Гельмгольца») повышают отдачу динамических головок и вносят своеобразную окраску в звучание, делая его неповторимым и не столь резким при подведении сигнала прямоугольной формы. Главное же достоинство конфигурации, в которой используются несколько излучателей – это чистый звук при посредственных (с точки зрения аудиофила) характеристиках головках. Оно и понятно – ведь всю «грязь» создают комбинационные частоты, которым при суммировании в воздухе взяться просто неоткуда. Требования к оконечным усилителям также снижаются – в данном случае они могут быть просто ключевыми.
Другой вариант – формирование сигнала с помощью АЦП и вывод его через высококачественный усилитель на единственную головку – я считаю крайним случаем, уравнивающим инструмент с заурядным музыкальным плейером, который лишен основной черты древней шарманки – акустической многоголосности.
В данном проекте использовано шесть 60-мм динамиков мощностью по 0,25 Вт, т.е., выражаясь техническим языком, используется 6-голосная полифония. Это не так уж много по сравнению, например, с компьютерными звуковыми картами, но вполне достаточно для многих музыкальных произведений. Все каналы сделаны равнозначными – это облегчает процесс подготовки музыкального материала (распределения нот по каналам), хотя было бы интересно поэкспериментировать с излучателями, настроенными каждый на свой частотный диапазон.
Внутренняя структура микросхемы PSoC вместе с окружением в виде блок-схемы показана на Рисунке 2. Я специально по-возможности сохранил тот вид, в котором внутренняя структура микросхемы выглядит в среде разработки – PSoC Designer. Выбор серии CY8C27ххх против CY8C29ххх был обусловлен ее доступностью и более низкой ценой, хотя применение последней позволило бы обойти многие уловки, понадобившиеся для решения задачи.
Рисунок 2
Итак, CY8C27443-24PI – это 24-х мегагерцовый 8-разрядный микроконтроллер с объемом Flash-памяти всего 16 кб, оперативной – 256 байт, но основное достоинство которого – это наличие матрицы цифровых (2х4) и аналоговых (3х4) блоков [3, 4]. Каждый блок может быть запрограммирован под вполне определенную функцию, блоки могут соединяться в цепочки, а функции блоков и межсоединения могут изменяться в процессе выполнения задачи, разумеется – во вполне определенных пределах.
Для построения инструмента были использованы:
• – шесть блоков Counter8_1…Counter8_6 под тон-генераторы,
• – модуль PRS8_1 – для получения двух тактовых частот: на одну и две октавы ниже исходной,
• – модуль RX8_1 – для организации связи с компьютером через COM-порт,
• – модуль CMPRG_1 – для формирования импульсов от генератора, задающих темп исполнения,
• – таймер Sleep Timer – для выполнения фоновых задач (сканирования клавиатуры и проч.)
Я не воспользовался готовым программно-аппаратным модулем «SDCard» для работы с картами памяти и файловой системой FAT16/32, поскольку этот модуль недоступен для серии CY8C27xxx, а написал свой собственный код, реализующий минимум необходимых функций.
Основная уловка, позволившая использовать серию CY8C27xxx – это использование 8-разрядных, а не 16-разрядных (на которые требуется по два 8-разрядных блока) счетчиков для получения нот всего музыкального звукоряда. Выбранные 8-разрядные значения коэффициентов деления от 127 до 239 позволяют получить равномерную темперацию нот внутри октавы с погрешностью не хуже 0,4%. Две октавы ниже получаются подачей тактовых импульсов со вдвое и вчетверо меньшей частотой, октавы выше – уменьшением коэффициентов деления в 2, 4, и т.д. раза. В последнем случае погрешность задания нот начинает резко увеличиваться, что с учетом особенностей округления результатов операций приводит к завышению нот в верхнем регистре.
Можно считать это недостатком – я же так не думаю по двум соображениям. Во-первых, отклонение шкалы настройки музыкальных инструментов от идеальной в области высоких нот (расширение музыкальных интервалов) отмечают многие исследователи [5], что связано не только с физикой колеблющихся тел (яркий пример тому – энгармоничность струн, приводящая к нарушению точного соотношения гармоник 1:2:3:4…), но и с особенностями человеческого восприятия (мелодические интервалы растянуты по сравнению с гармоническими). Во-вторых, реальный инструмент должен в разумных пределах быть слегка расстроенным для создания живости исполнения.
Получение двух частот одним блоком PSoC – это еще одна нетривиальная задача, решение которой позволило сэкономить целый блок и использовать освободившийся ресурс под другие задачи (связь с компьютером). Не напрягая читателя, здесь лишь коротко скажу, что в данном случае используется модуль «PRS8» (генератор псевдослучайной последовательности с разрядностью 8 бит) с особыми значениями внутренних регистров. Такие значения приводят к появлению на выходах двух неперекрывающихся сигналов прямоугольной формы с частотами, равными четверти частоты тактового сигнала. Объединение этих сигналов логическим элементом «ИЛИ» позволяет получить частоту, которая уже в два раза ниже, чем входная. Поделенные частоты транслируются на внутренние линии микросхемы и могут быть выбраны в качестве источников тактовой частоты для счетчиков Counter8_1…Counter8_6.
Счетчики Counter8_1…Counter8_6 используются для дальнейшего деления частоты с целью получения нужных нот. Каждый из них имеет два регистра – регистр периода и регистр сравнения, с помощью которых устанавливаются коэффициент деления и длительность выходных импульсов. Это соответствует высоте ноты и ее субъективной громкости. Запись значения 0 в регистр сравнения приводит к появлению импульсов нулевой длительности, т.е. к выключению ноты. Запись же значения, соответствующего половине регистра периода, приводит к генерации меандра, что соответствует максимальной громкости.
Через модуль RX8_1 организуется связь с компьютером посредством COM-порта. В данной реализации эта связь однонаправленная – от компьютера к инструменту. Ее назначение – это оперативная подготовка на компьютере музыкального материала и его немедленная проверка на «живом» инструменте. Скорость обмена задается частотой тактового сигнала VC3, выбираемой при конфигурации системы в среде PSoC Designer. В проекте установлена скорость 9600 бод, один стоповый бит, 8 бит на посылку, отсутствие проверки четности, хотя ничто не мешает установить скорость 31500 бод и подключаться напрямую к MIDI-порту компьютера. В последнем случае (при условии реализации протокола MIDI в инструменте – это дело будущего), не потребуется дополнительное программное обеспечение для «проигрывания» песен, т.к. средств стандартного проигрывателя или музыкального редактора будет достаточно. Для работы с компьютером инструменту, естественно, понадобится внешний источник питания.
Единственный аналоговый модуль, используемый в проекте – это компаратор с программируемым порогом CMPRG_1. Из переменного сигнала меняющейся амплитуды, поступающего с генератора, он вырабатывает прямоугольные импульсы, вызывающие прерывания с целью отслеживания вращения ручки генератора. Программа написана так, что темп исполнения мелодии оказывается жестко привязан к движениям музыканта, а при остановке ручки происходит полная остановка песни с заглушением всех звучащих нот.
Электрическая схема была поделена на две части – процессорную и силовую. Такое деление было обусловлено необходимостью их независимого макетирования и отладки. «Сердцем» процессорного модуля (Рисунок 3) является микроконтроллер D1. Тактовую частоту стабилизирует часовой кварц XT1. Микропроцессор опрашивает органы управления PS1, PS2, PS3, B1…B4, считывает информацию с карты памяти SD1 и генерирует сигналы для усилителей мощности, выполненных на транзисторах VT1…VT12.
Рисунок 3
Элементы PS1, PS2 и PS3 представляют собой 10-позиционные переключатели с выходным кодом 1-2-4-8. Тройка таких переключателей задает номер песни, который может быть установлен в диапазоне от 0 до 999. Кнопки B1…B4 – это установка номера песни по текущему положению переключателей, выбор предыдущей песни, переход к следующей и проигрывание песни без вращения ручки (в случае питания от отдельного источника). Эти кнопки нужны только как альтернатива 10-позиционным переключателям и для отладочных целей. Светодиод VD17 индицирует нормальную работу процессора (сканирование органов управления). Внешние подтягивающие резисторы R12…R15 применены из соображения экономии потребляемого тока, поскольку сопротивление внутренних резисторов микроконтроллера достаточно мало (около 5,6к).
Импульсы, соответствующие вращению ручки, поступают с разъема J4. В данной версии анализируется сигнал, приходящий только с одной обмотки генератора, поэтому программа не делает различия между вращением ручки по часовой стрелке и против. Возможность анализа второго (сдвинутого на 90о) сигнала заложена в схеме для будущего развития инструмента.
Усилители мощности выполнены на комплементарных парах транзисторов VT1…VT12, представляющих собой эмиттерные повторители. Такое включение позволяет запитывать выходной каскад от отдельного источника, у которого напряжение может меняться, вплоть до 0. При нулевом напряжении питания такой каскад все-таки раскачивает излучатели BA1…BA6 – благодаря управляющему току с микросхемы, протекающему через резисторы R16…R21 и p-n переходы транзисторов. О меняющемся напряжении питания речь пойдет чуть ниже.
Разъем J3 служит для программирование микросхемы «в устройстве». Для программирования может быть использован программатор, описанный ранее в журнале «Радио» [2]. Единственная тонкость, которую здесь надо учитывать – программирование осуществляется при напряжении 5В, а максимально допустимое напряжение у карт памяти – всего 3,6В, в связи с чем перед программированием надо обязательно позаботиться об извлечении карты памяти.
Силовая часть схемы показана на Рисунке 4. В работе этого узла есть несколько особенностей, неочевидных с первого взгляда. В качестве генератора здесь использован шаговый двигатель KP39HM2-S07 от старого компьютерного 5-дюймового дисковода, который при 4-х оборотах в секунду выдает амплитуду переменного напряжения порядка 11 В. Большую мощность мешают снимать два фактора – высокое внутреннее сопротивление обмоток (порядка 75 ом для каждой полуобмотки) и их сравнительно большая индуктивность. Индуктивность не имела бы значения при однополупериодном выпрямлении (помогая только сглаживать пульсации), но тогда энергетические характеристики генератора использовались бы не полностью. Я применяю двухполупериодное выпрямление тока, а реактивную составляющую сопротивления обмоток компенсирую последовательно включенными конденсаторами C1 и C2 (две обмотки генератора работают впараллель). Такая схема хорошо работает только на вполне определенной частоте переменного тока, поэтому емкость этих конденсаторов оптимизирована под умеренную скорость вращения ручки. На больших скоростях возросшее индуктивное сопротивление препятствует росту току через нагрузку, что выглядит как ограничение мощности воспроизводимого звука и некоторое субъективное снижение усилия вращения ручки.
Рисунок 4
Также известно, что максимум мощности от генератора к потребителю передается при условии согласования их сопротивлений. Внутреннее сопротивление у генератора составляет (75+75):2 = 75 Ом, а у потребителя при максимальной загрузке всех излучателей – (8х2):6 = 2,7 Ом (эффективное). При таком сопротивлении прямое соединение оказывается неэффективным – до нагрузки дойдет только 3,5% всей генерируемой мощности. Ситуацию исправляет нестабилизированный преобразователь напряжения, выполненный на микросхеме DA1, трансформаторе Т1 и выпрямительных диодах VD5 и VD6, работающий на высокой (порядка 40 кГц) частоте. Требуемый коэффициент трансформации обеспечивается соотношением числом витков обмоток трансформатора, которое выбрано равным 7. При таком коэффициенте сопротивление генератора приводится к величине, равной 75:72 = 1,5 Ом, что взято с запасом по отношению к требуемым 2,7 Ом – с учетом дополнительных потерь на диодах VD5, VD6, выходных ключах микросхемы DA1, а также потерь, возникающих из-за импульсного характера отбираемого от генератора тока (зарядка накопительного конденсатора C4 через выпрямительные мосты VD1 и VD2).
Питание для микроконтроллера берется непосредственно с выпрямителя, понижаясь до 3В на интегральном стабилизаторе DA2. Следует отметить, что стартовое напряжение микроконтроллера составляет также 3В, что с учетом разброса параметров микросхем может привести к тому, что микроконтроллер не будет запускаться. Правильным было бы использовать стабилизатор на 3,3В, просто на момент постройки у меня такового не оказалось.
Программа для микроконтроллера была написана на языке ассемблера с использованием среды разработки PSoC Designer (версии 4.3), которая бесплатно распространяется компанией Cypress (http://www.cypress.com/?rid=36833). Инициализирующая часть и главный цикл находятся в файле main.asm, интерпретатор музыкальных данных и управление звуковоспроизведением – в файле Synth.asm, подпрограммы для работы с картой памяти – в файле Sdcard.asm. Из особенностей работы программы я бы отметил следующее.
1. Стандартная конфигурация с кварцем 32768 Гц стартует только через две секунды после подачи питания (считается, что это время необходимо для «раскачки» кварца). В моей программе старт производится немедленно – вначале тактирование осуществляется от внутреннего RC генератора, а кварц, хотя и включается сразу, но в кольцо стабилизации частоты вступает с задержкой. Это может привести к едва уловимому изменению высоты тона в начале песни;
2. Выходы счетчиков Counter8_1…Counter8_6 связываются с ножками микросхемы не в среде PSoC Designer, а из программы после ее старта. Это – рекомендация фирмы для устранения нежелательного однократного импульса на ножках микросхемы после подачи питания;
3. При включении ноты новое значение длительности импульсов не записывается сразу в регистр управления счетчика, а производится его «плавное нарастание» с целью получения «мягкой» атаки звука, характерной для духовых инструментов;
4. Введение буфера данных («очереди») исключает неоднородности выборки данных по времени при работе с файловой системой;
5. После старта программа пытается обратиться к карте памяти SD, а если это ей не удается, производится обращение к внутренней Flash памяти микроконтроллера и поиск трека, соответствующего положению переключателя на передней панели.
Музыкальный материал («репертуар») представлен на карте SD в виде файлов xxx*.bor, лежащих в папке \muzdata\, которая должна находиться в корневой директории карты (xxx – это трехзначное число от 0 до 999, а * – любая допустимая группа символов). Поддерживаются длинные имена и файловая система FAT16. Прочая информация на карте не мешает ее использованию в инструменте.
Используемый формат представления музыки более компактен и приспособлен к исполнению на инструменте, нежели стандартные файлы *.mid. Файлы *.bor могут быть получены из последних с помощью написанного мной программы-конвертера NotePrepair, которую вместе с другими материалами вы можете скачать по ссылке в конце статьи. Перед конвертированием исходный файл нужно откорректировать в каком-либо музыкальном редакторе на предмет удаления лишних нот и треков (помните, что полифония инструмента составляет всего лишь 6 голосов) и сохранить в формате «Midi 0». Небольшая готовая музыкальная коллекция есть в сопроводительных материалах.
Файлы track0.inc…track9.inc, входящие в проект для PSoC Designer, добавляются в код микроконтроллера на этапе компиляции программы и представляют собой тот же музыкальный формат, но записанный в текстовом (шестнадцатиричном) виде. Каждая область данных должна предваряться 2-х байтовым словом – размером области данных, выраженном в байтах – это необходимо для правильной работы алгоритма поиска.
|
|
|
Вся электроника размещена на двух односторонних печатных платах размерами 68 х 51 и 44,5 х 51 мм (Рисунки 5, 6 и 7). Отверстия по углам плат предназначены для крепежа и имеют диаметр 3,4 мм. Часть элементов имеет штырьковые выводы, часть – рассчитана на поверхностный монтаж. Микросхема D1 в моем варианте устанавливается на панельку. Трансформатор выполнен на броневом магнитопроводе Б22 из феррита марки 2000НМ и имеет 35 витков провода Ф 0,2 мм в первичной обмотке и 5 + 5 витков провода Ф 0,5 мм – во вторичной. Вполне допустимо использование магнитопровода Ш5 (без зазора). Переключатели PS1, PS2 и PS3 – марки ПП10-2 или аналогичные с выходным кодом 1-2-4-8 без инверсии. Диоды VD1…VD16 (любые маломощные) распаяны прямо на выводах этих переключателей. Переключатели, кнопки B1…B4 и светодиод VD17 (любого нравящегося вам цвета свечения) расположены на задней панели инструмента. Транзисторы подойдут любые низкочастотные с допустимым током коллектора не менее 0,2А и коэффициентом передачи не ниже 100, желательно – с низкими падениями напряжений на переходах. Монтаж выполнен гибким ленточным проводом, заканчивающимся ответными частями под штыревые разъемы.
Самая сложная и кропотливая часть – это изготовление корпуса и узла привода генератора. Точных чертежей я не привожу, поскольку конструкция будет определяться вашими возможностями и доступностью материалов.
Для редуктора (Рисунок 12) вначале подбиралась подходящая пара шестерней – она определяет расстояние между осями генератора и ручки. При отсутствии высокоточного оборудования это расстояние лучше сделать регулируемым (за счет люфтов) для установки оптимального положения зацепления зубьев. Очень желательно, чтобы большая шестерня была изготовлена из текстолита или другого пластика – для снижения шума. Соотношение зубьев (передаточное число) здесь особого значения не имеет (у меня 126:20), но большие значения предпочтительны для более медленного вращения ручки инструмента.
Корпус (Рисунок 8, 9, 10) склеен из фанеры толщиной 4 мм, в качестве клея была использована эпоксидная смола. Предварительная фиксация деталей производилась термопистолетом. В передней панели сделаны прорези под рупорные каналы и отверстия для трубок резонаторов. Трубки имеют наклон примерно в 45о – для исключения попадания внутрь косого дождя и мякоти гнилых овощей, которыми вас может забросать публика. С этой же целью излучающие головки стоят боком, как это показано на Рисунке 1. У головок (использованы 0,25ГД-10 с сопротивлением звуковой катушки 8 Ом) диффузор покрыт раствором сырой резины в бензине для повышения влагостойкости. Против залета насекомых во внутренние полости спасает антимоскитная сетка, наклеенная на концы труб.
|
|
|
Поскольку резонаторы, электроника и узел привода генератора занимают небольшой объем, то оставшаяся часть пространства может быть использована под хранение различных аксессуаров. Для этого задняя стенка корпуса сделана открывающейся, в виде дверцы. На Рисунке 11 показаны резонансные камеры со снятой задней крышкой (крепится шурупами). Для уплотнения используются полоски из губчатой резины, наклеенные на торцы стенок. Печатные платы держатся на резьбовых стойках, вклеенных в углубления, а узел с редуктором и генератором закреплен двумя винтами на боковой стенке. Корпус тонирован морилкой и покрыт прозрачным лаком, хотя здесь есть большой простор для фантазии в области внешнего оформления – использование резьбы, росписи, накладных декоративных элементов и прочих украшательств.
|
|
Налаживания схема не требует. Контроллер программируется прямо в электрической схеме с помощью программатора, описанного в [2]. Карту памяти предварительно надо извлечь, а разъемы питания J5 и J6 – отсоединить. Готовый файл прошивки прилагается. Подав питание на микроконтроллер от внешнего источника, можно сразу же проверить работоспособность узла – при выборе номера песни от 1 до 9 и нажатой кнопке B4 из динамиков послышится негромкое исполнение выбранного трека.
Далее проверяется работа платы питания. Для этого присоедините к ней электрогенератор G1 (см. Рисунок 4) и попробуйте покрутить его ручку. Напряжение на конденсаторе C1 должно возрастать до 10…11 В, а на выходных разъемах J5 и J6 должны появиться напряжения 3 В и 1,5 В. Такие же напряжения должны быть и при подключении платы с микроконтроллером (программатор не забудьте отсоединить!). Напряжение 1,5 В будет получаться только при достаточно интенсивном вращении ручки, при замедлении оно будет снижаться вплоть до 0. При резком прекращении вращения конденсатор C5 должен хранить заряд несколько секунд, о чем будет свидетельствовать светящийся светодиод VD17 (Рисунок 3). Если успеть возобновить движение, то исполнение песни продолжится с прерванного места.
Для подготовки карты SD потребуется карт-ридер, подключенный к компьютеру, либо другое устройство (плейер, фотоаппарат), позволяющее работать с файловой системой этих карт, как с диском. Создайте в корневом каталоге папку \muzdata\ (ПРИМЕЧАНИЕ: именно "muzdata", а не "musdata"!) и запишите туда файлы песен, сгенерированные программой NotePrepair. Небольшая коллекция файлов находится в архиве Collection1.zip в сопроводительных материалах к статье. Написание песен или адаптирование существующих – это долгий и увлекательный процесс, о котором подробно мешают рассказать узкие рамки журнала.
[1] Barrel Organ, XXI Century. – http://www.designspark.com/content/barrel-organ-xxi-century
[2] Мамонтов И. Трехканальный термометр на терморезисторах и микросхеме PSoC. – Радио, 2009, №7, с. 31, 32, №8, с. 25–27.
[3] CY8C27143, CY8C27243, CY8C27443, CY8C27543, CY8C27643, PSoC Programmable System-on-Chip – http://www.cypress.com/?docID=34812
[4] PSoC Mixed Signal Array. Technical Reference Manual. – http://www.cypress.com/?rID=34621
[5] Порвенков В.Г. Акустика и настройка музыкальных инструментов. – М.: Музыка, 1990.
Sharmanka25.zip (10 кБ) – файл прошивки.
Proj_Sharmanka25.zip (145 кБ) – проект для среды разработки PSoC Designer v4.3. Текст программы – ассемблер.
Collection1.zip (187 кБ) – коллекция песен.
NotePrepair.zip (176 кБ) – программа NotePrepair.
PCB.zip (41 кБ) – топология печатных плат в формате Sprint Layout 4.0.
Продолжение... (исправления, дополнения и дальнейшее развитие инструмента).
antiradio.narod.ru/psoc
Дата создания документа: 10.04.2012. Последнее обновление: 24.08.2017.