Предлагаемым электромузыкальным инструментом исполнитель управляет движениями рук подобно известной конструкции Л. Термена. Однако по принципу действия он не имеет с настоящим терменвоксом ничего общего — вместо взаимодействия рук исполнителя с электромагнитным полем антенн инструмента и биений сигналов двух генераторов использованы измерение расстояний до рук с помощью ИК-дальномеров и цифровое формирование сигналов нужной частоты и громкости. Однако инструмент получился простым и пригодным для повторения. При дальнейшем совершенствовании он может найти применение в музыкальной практике.
Журнал «Радио» не раз публиковал описания конструкций терменвок-сов, построенных по традиционному принципу [1, 2]. Поскольку этот музыкальный инструмент своим необычным звучанием всегда привлекает внимание, он был изготовлен и автором предлагаемой статьи для демонстрации в музее науки «Ньютон-парк» в Красноярском музейном центре.
Однако его демонстрация при свободном доступе посетителей музея к экспонатам (а посетители эти — в основном школьники младших классов) выявила специфический недостаток. Когда вокруг инструмента, имеющего довольно объёмную зону чувствительности, собираются несколько посетителей и пытаются управлять им одновременно, результат бывает непредсказуемым.
В предлагаемой конструкции этот недостаток устранён. Вместо антенн и генераторов с колебательными контурами использованы триангуляционные инфракрасные датчики расстояния (дальномеры) GP2Y0A41SK и GP2Y0A21.
Первый измеряет расстояние от 4 до 30 см, а второй — от 10 до 80 см. Их зоны чувствительности имеют вид конусов с углами при вершине около 17°. Ладонь исполнителя в рабочем интервале расстояний полностью перекрывает такую зону. Выходное напряжение датчиков изменяется в указанных интервалах приблизительно на 2 В. Размеры датчиков — 29x12x18 мм, напряжение питания — 5 В, потребляемый ток — 30 мА. Описание таких датчиков и принципа их работы можно найти в [3, 4].
Инструмент воспроизводит ноты нескольких октав. Как и в классическом терменвоксе, один датчик (с большим максимальным измеряемым расстоянием) задаёт высоту тона формируемого звука, второй — его громкость. Сигналы датчиков обрабатывает и преобразует в звуковой сигнал микроконтроллер.
Схема терменвокса изображена на рис. 1. Он выполнен на микроконтроллере ATmega16-16PU, тактовая частота которого (16 МГц) стабилизирована кварцевым резонатором ZQ1. Поэтому частоты нот имеют высокую стабильность. Блок питания и выходной усилитель на схеме не показаны.
Датчики В1 и В2 подключают к разъёмам Х1 и Х2 двумя трёхпроводными гибкими кабелями длиной около 0,5 м из провода МГТФ. Их сигналы поступают соответственно на входы ADC6 и ADC7 микроконтроллера (это входы каналов его АЦП). Форма выходного сигнала задана в программе массивом, содержащим 64 константы — отсчёты мгновенных значений сигнала в одном его периоде. Частоту выборки отсчётов из массива (в 64 раза большую заданной частоты выходного сигнала) задаёт шестнадцатиразрядный таймер Т1. Он работает в режиме СТС и генерирует запросы прерывания с периодом, заданным числом, загруженным в его регистр OCR1A.
В зависимости от измеренного датчиком В2 расстояния до руки исполнителя программа вычисляет индекс элемента массива aChastota, содержащего нужное для загрузки в регистр OCR1A число. По прерываниям от таймера программа выводит в порт С очередные мгновенные значения формируемого сигнала.
Зависимость выходного напряжения датчика Uд от расстояния D (на рабочем участке) описывает функция вида
Методика определения её коэффициентов А и В приведена в статье на сайте [3]. Но более удобно, на мой взгляд, использовать для этого электронную таблицу Excel.
Сначала измерьте напряжение на выходе датчика при различном расстоянии от его панели, на которой расположены окна ИК-излучателя и фотоприёмника, до преграды. Ею может служить любой плоский предмет — книга, коробка и даже собственная ладонь. Напряжение измеряют любым точным вольтметром постоянного тока. Замеры достаточно делать через каждые 10 см расстояния. Результаты заносите в таблицу. На рис. 2 показана эта таблица, готовая к расчёту. В электронном виде она находится в файле tables.xls на Листе 1.
В ячейках В7—В13 указаны расстояния D в сантиметрах. В ячейках С7— С13 — соответствующие им измеренные значения напряжения на выходе датчика Uизм в милливольтах. В ячейках D7—D13 выведены рассчитанные программой Excel по приведённой выше формуле значения этого напряжения Uд. Коэффициенты А и В помещены соответственно в ячейки D2 и D3. Их начальные значения А=20000 и В=150 заданы произвольно. Графики измеренной (красный) и расчётной (синий) зависимостей напряжения от расстояния расположены в колонках J—N.
В столбец Е выведены значения разностей измеренного и расчётного напряжения, а в столбец F — квадраты этих разностей. Подсчитанная программой Excel сумма квадратов разностей, характеризующая точность совпадения экспериментальной и расчётной зависимостей, выведена в ячейку F15.
Процедура подборки коэффициентов занимает не более 10 мин. Изменяя их, наблюдайте, как графики сближаются, а сумма в ячейке F15 уменьшается. В рассматриваемом случае минимальное значение в этой ячейке, равное 848, достигается при А=23910 и В=173. При этом графики практически сливаются. Следовательно, для использованного автором экземпляра датчика зависимость выходного напряжения в милливольтах от расстояния в сантиметрах аппроксимирует формула
Выходной код К канала ADC7 АЦП микроконтроллера, оцифровывающего это напряжение, равен
где Uобр — образцовое напряжение АЦП; N — число двоичных разрядов АЦП. В рассматриваемом случае Uобр = 5090 мВ (точное значение напряжения питания микроконтроллера), N=8 (два младших разряда десятиразрядного АЦП не используются).
После подстановки значений Uд, Uобр, N и несложных преобразований получим
По этой формуле микроконтроллер и должен рассчитывать расстояние в сантиметрах, но потребуется использовать 32-разрядную арифметику. Можно упростить расчёты, если пропорционально уменьшить и округлить коэффициенты. В результате, приняв образцовое напряжение АЦП равным 5120 мВ, получим
Эта приближённая формула и использована в программе микроконтроллера. Погрешность вычисления по ней на расстоянии 74 см не превышает 1,5 см, а на расстоянии меньше 60 см она уже меньше сантиметра. Такой погрешностью можно пренебречь, тем более что гриф создаваемого инструмента — виртуальный.
При расстоянии до преграды от 10 до 60 см напряжение Uд изменяется в пределах 2550…770 мВ. Значения кодов АЦП при этом изменяются от 127 до 28. Если в зоне чувствительности датчика ничего нет, напряжение Uд будет около 200 мВ, при этом АЦП выдаёт код 10. На расстояниях менее 10 см характер зависимости напряжения от расстояния резко меняется — оно быстро падает [3], что связано с конструктивными особенностями датчика. Чтобы не учитывать этот эффект, на удалении около 10 см от датчика установлено искусственное препятствие, мешающее приблизить руку к датчику на меньшее расстояние.
Индекс элемента массива aChastota, содержащего константы для загрузки в регистр OCR1A таймера 1, получается уменьшением значения D на 10. Чтобы заполнить этот массив, была создана электронная таблица Excel, находящаяся в файле tables.xls на Листе 2. Её столбец В заполнен получаемыми от АЦП значениями К от 127 до 23 с шагом 1. В столбце С — вычисленные по приведённой выше упрощённой формуле целые части значений D. Дело в том, что программа микроконтроллера при вычислениях с фиксированной запятой отбрасывает дробные части чисел.
В столбец D помещены значения индексов массива aChastota. Цветом выделены строки нижней части таблицы, где индекс становится больше 63 и выходит за границу массива. Это происходит на больших расстояниях руки от датчика, когда выходной код АЦП становится меньше 25. В этом случае программа выключает звуковой сигнал, устанавливая его амплитуду равной нулю.
Зависимость получилась крайне неравномерной. В её начальной части при изменении расстояния на сантиметр код АЦП проходит несколько последовательных значений. Например, в интервал от 10 до 11 см укладываются коды от 122 до 113. В интервале приблизительно от 25 до 35 см каждому сантиметру расстояния соответствует изменение кода на единицу. А в конце грифа код изменяется на единицу лишь при изменении расстояния на несколько сантиметров. Например, К=31 соответствует расстоянию 53 см, а К=32 — уже 56 см. Следовательно, при перемещении руки от 53 до 55 см включительно программа будет обращаться к одному и тому же элементу массива aChastota[43] и генерировать звук одной и той же тональности. К элементам aChastota[44] и aChastota[45] обращений не будет никогда, поэтому их значения можно сделать любыми, например, равными aChastota[43].
Массив aChastota заполнен с помощью ещё одной электронной таблицы (Лист 3 в файле tables.xls). В её столбце В, начиная с ячейки В10, находятся значения индекса от 0 до 63. Цветной заливкой выделены строки с индексами, не встречающимися в предыдущей таблице. Всего их 18. Это значит, что инструмент сможет воспроизвести 46 нот (почти четыре октавы). Пусть это будут малая, первая, вторая октавы и часть третьей до ноты ля включительно.
Столбец С заполним значениями частот нот. Для этого в ячейку СЮ поместим частоту ноты ля третьей октавы 1760 Гц. Значение в следующей ячейке получим делением предыдущего значения на 1,0595 [5]. Тем же способом заполняем все последующие ячейки столбца С, пропуская выделенные заливкой. В пропущенные ячейки поместим значения, взятые из предыдущих.
В столбец D программа Excel поместит значения, загружаемые в регистр OCR 1А таймера Т1, вычислив их по взятой из [6] формуле
где Fclk= 16000000 Гц — тактовая частота микроконтроллера; F — частота выходного сигнала; PS=8 — коэффициент деления частоты предварительным делителем таймера; S=64 — число отсчётов сигнала за период.
Можно было бы поручить вычислять эти значения программе микроконтроллера, однако экономнее с точки зрения расхода машинного времени вычислить их заранее, занести в массив и выбирать оттуда по необходимости. Памяти для хранения таблиц у микроконтроллера достаточно.
Предварительно заполнив столбец F символами запятой, можно скопировать столбцы Е и F в буфер обмена Windows, а затем выгрузить из буфера прямо в текст программы.
С полученным массивом гриф разрабатываемого терменвокса похож на классический — частота выходного сигнала тем выше, чем ближе рука к датчику.
Выходной аналоговый сигнал формируют умножающий десятиразрядный ЦАП 572ПА1А (DA3) и операционный усилитель КР140УД8А (DA4), включённые по типовой схеме. Из порта С на ЦАП поступают восьмиразрядные коды, два младших разряда ЦАП не используются.
Образцовое напряжение Uref для ЦАП, которому пропорциональна амплитуда выходного сигнала, программа формирует с помощью работающего в режиме FastPWM таймера ТО микроконтроллера. Оцифрованный каналом 6 АЦП сигнал датчика В1 задаёт коэффициент заполнения импульсов, генерируемых таймером 0 на выходе ОСО. Выделенная фильтром R5C6 постоянная составляющая этих импульсов через повторитель напряжения на ОУ DA2 поступает на вход Uref, ЦАП.
Сформированный звуковой сигнал с выхода ОУ DA4 поступает на разъём ХЗ. Это гнездо для стандартного аудиоштекера диаметром 3,5 мм. Резистор R6 нужен, если предполагается прослушивать звук через головные телефоны.
Питают инструмент от любого источника постоянного напряжения 5 В. Напряжения +9 В и -9 В для питания ОУ DA2 и DA4 получают от преобразователя напряжения, входящего в состав микросхемы адаптера последовательного интерфейса МАХ232СРЕ (DA1).
Как уже было сказано, форма выходного сигнала задана массивами его мгновенных значений. Всего их четыре по числу реализуемых форм сигналов, показанных на рис. 3. Каждый массив содержит 64 отсчёта одного периода сигнала. При работе инструмента массивы, из которых выбираются отсчёты, перебираются программно, сменяясь каждые несколько минут. Смена сопровождается изменением тембра звучания.
Управляют инструментом двумя руками. Правой рукой задают тон звука, левой — его громкость. Ось зоны чувствительности датчика В1 должна быть направлена влево-вверх от исполнителя, а ось зоны чувствительности датчика В2 — вправо-вверх. Наклоны осей особого значения не имеют, нужно лишь проследить, чтобы при движении руки не попадали в зоны чувствительности «чужих» датчиков. Для удобства обе оси должны быть наклонены одинаково относительно горизонтальной плоскости.
Электронный блок инструмента собран на макетной плате проводным монтажом и встроен в один из экспонатов музея (макет робота). В нём применены резисторы ОМЛТ-0,125, конденсаторы КМ5. Вместо микроконтроллера, указанного на схеме, можно использовать ATmega8535 или ATmega32 без изменения схемы, но для этого нужно перетранслировать программу под применённый микроконтроллер. ОУ КР140УД8А можно заменить другим, например, К544УД2 или импортным с предельной скоростью нарастания выходного напряжения не менее 2 В/мкс. Усилители с меньшим быстродействием искажают высокочастотные сигналы.
Вместо К140УД14А можно применить другой ОУ с низким потреблением. Амплитуда выходного сигнала меняется медленно, в такт движениям руки, и быстродействие усилителя здесь некритично. Если применить ОУ с большим потреблением, напряжение их питания может «просесть». Например, при использовании двух ОУ КР140УД8А с общим потреблением 10 мА от микросхемы MAX232CPE будут получены напряжения +7,5 В и -6 В [7].
Программа для микроконтроллера написана на языке С в среде WinAVR (AVR Toolchain), входящей в состав IDE AVR Studio v4.19.
Прибор имеет ряд недостатков — искажение формы сигнала из-за малого числа отсчётов на период, недостаточный диапазон воспроизводимых нот, пропуски в таблице частот. Чтобы устранить их, нужно применить более производительный микроконтроллер и АЦП большей разрядности. Всё это имеет смысл при разработке инструмента для серьёзного применения.
ЛИТЕРАТУРА
- Королёв Л. Терменвокс. — Радио, 2005, № 8, с.49-51; № 9, с. 48-51.
- Суров С. Терменнот или терменвокс на микроконтроллере. — Радио, 2013, № 12, с. 21-24
- ИК-дальномеры SHARP. — URL: http://roboforum.ru/wiki/MK-AaabHOMepbiSHARP
- ИК-Дальномеры Sharp GP2D12 и GP2Y0A — URL: http://roboforum.ru/wiki/GP2D12 (30.08.15).
- Ноты и частота. — URL: http://gtwiki.su/index.php?title=HoTbi и частота
- Прокопенко В. С. Программирование микроконтроллеров ATMEL на языке С. — Киев: «МК-Пресс», СПб.: «КОРОНА-ВЕК», 2012.
- МАХ232СРЕ: 5V-Powered, Multichannel RS-232 Drivers/Receivers. — URL: http://pdf1.alldatasheet.com/datasheet-pdf/view/73108/MAXIM/MAX232CPE.html
Архив к проекту (электронные таблицы и программа микроконтроллера)
Автор: С. СВЕЧИХИН, г. Красноярск
Источник: журнал Радио №12, 2015