Модуль BM2114dsp обладает весьма впечатляющими возможностями, не ограничивающимися фильтрацией и регулировкой уровня сигналов. В прошлом материале мы рассмотрели простейший пример построения тракта прохождения звукового сигнала, а эту статью начнем с несколько необычного способа применения модуля.
1. Функциональный генератор звуковой частоты
При наладке звуковой аппаратуры часто требуется подать на вход или промежуточную точку звукового тракта сигнал заданной формы и частоты. Модуль BM2114dsp может формировать несколько видов сигналов, вполне достаточных для решения такой задачи:
- синусоидальный;
- меандр;
- пилообразный;
- треугольный;
- импульсный с переменной скважностью;
- свипируемый по частоте (линейно и логарифмически);
- постоянное напряжение;
- модулированный по частоте и уровню;
- белый шум.
Параметры некоторых сигналов могут управляться подачей внешнего напряжения, а также имеют настраиваемую относительно нулевого значения фазу.
Над сигналами можно производить арифметические операции – складывать их, вычитать, умножать, делить. Элементы, позволяющие осуществлять такие операции находятся в подменю Basic DSP->Arithmetic Operations. Разумеется, генерируемые сигналы можно произвольным образом сочетать с сигналами, поступающими с двух входных АЦП.
Все элементы, связанные с генерацией сигналов находятся в подменю Sources. С помощью этих элементов можно создать управляемый генератор тестовых сигналов с числом каналов до четырех, по числу выходных ЦАП.
Создадим проект генератора тестовых сигналов, загрузим его в плату и пощупаем осциллографом, что получилось. Мы нарисовали двухканальный генератор с совершенно раздельными каналами. В тракте применены коммутаторы, позволяющие переключать сигналы между несколькими входами и одним выходом радиокнопкой. Коммутатор монофонического сигнала Mono Switch Nх1, где N – число переключаемых каналов, находится в подменю Muxes/Demuxes->Multiplexers->Switch->No Slew(Standard)->1Ch.
Также мы используем регулятор громкости Single Volume Gain (no slew), который находится в подменю Volume Control->Adjustable Gain->Single/Multiple Controls->No Slew(Standard). Используемые в схеме комментарии вводятся контролом User Comment из меню Schematic Design.
На следующей фотографии реально подключенного модуля BM2114dsp, на экране осциллографа видим два синусоидальных сигнала, смещенных по фазе на 180 град друг относительно друга, в соответствии с заданным смещением на элементе генератора синуса с регулировкой фазы в нижнем канале рис.1.
Переключая на компьютере радиокнопки коммутаторов можно получить в двух каналах модуля разнообразные сигналы, например треугольной и пилообразной формы, как на следующей фотографии. Соответственно, в каждом канале можно регулировать уровень сигнала.
2. Использование входов-выходов общего назначения (GPIO)
Управлять параметрами элементов звукового тракта, сформированного и загруженного в модуль с помощью SigmaStudio, можно с помощью 12-ти так называемых входов-выходов общего назначения (General Purpose Input/Output – GPIO). К ним можно подключить кнопки, энкодеры, источники напряжения, устройства индикации, управления и т.п. Вывод, обозначенный на плате как MP0, соответствует выводу GPIO_0 в программе SigmaStudio, MP1 - GPIO_1 и так далее.
Наверное, самой востребованной функцией GPIO применительно к звуковому модулю, является регулировка громкости. Такая регулировка достаточно просто реализуется в модуле с помощью двух кнопок, при нажатии и удержании которых изменяется амплитуда выходного сигнала.
Откроем в SigmaStudio новый проект и нарисуем схему , позволяющую регулировать громкость с помощью двух кнопок. Помимо уже известных нам входов и выходов, понадобится управляемый кнопками регулятор, который можно найти в подменю GPIO Conditioning->Volume Control->Push Button->Push Button Volume. По умолчанию контрол одноканальный, его следует сделать двухканальным с помощью описанной в предыдущей статье функции контрола Grow Algorithm. Тогда получится стереофонический регулятор с синхронным изменением громкости в обоих каналах. Конечно, если такая потребность, регулировку стереоканалов можно сделать раздельной.
Также понадобятся два элемента GPIO, работающих на вход, к которым подключаются кнопки. Они находятся в подменю IO->GPIO->Input->General Purpose Input. Их выходы в виде оранжевых точек соединяются с соответствующими входами регулятора – это линии управления. При нажатии на кнопку, подсоединенную к GPIO_0, громкость увеличивается, к GPIO_1 – уменьшается. Следует отметить чекбокс InvertGPIO для того, чтобы срабатывание происходило при подаче низкого логического уровня на входы GPIO.
Для корректной компиляции схемы в нее следует добавить еще два служебных элемента интерфейса, подсоединяемые к интерфейсным входу/выходу регулятора (см. схему). Если оставить точки не подсоединенными, то при компиляции возникнет ошибка. Интерфейсные элементы находятся в подменю IO->GPIO->Input->Interface Read и IO->GPIO->Output->Interface Write.
Регулятор имеет несколько настраиваемых параметров: первый параметр hold задает время в миллисекундах, через которое начинается пошаговое изменение громкости при удержании кнопки; второй repeat задает время между шагами, третий параметр работает совместно с таблицей, которая появляется при нажатии на кнопку контрола Table, и задает число шагов изменения громкости. Число шагов в таблице должно совпадать с третьим параметром и задавать значение громкости на каждом шаге. В данном примере таких шагов 11, а громкость изменяется от 0 до максимума (1 или 100%) через 0,1 (10%). Параметр SW Slew Rate задает скорость изменения громкости между шагами.
Модифицируем нашу схему так, чтобы громкостью можно было управлять с помощью поворотного энкодера. Для этого используется элемент Rotary Volume.
Параметры контрола сверху вниз:
- время подавления дребезга контактов энкодера (20 мс);
- число шагов изменения громкости (33), должно соответствовать числу шагов в таблице;
- таблица с 33 значениями громкости;
- скорость изменения громкости между шагами.
Теперь мы попробуем управлять с помощью кнопки параметрами фильтра низких частот второго порядка, который, например, может быть применен для выделения сигнала, подаваемого на сабвуфер.
Среди элементов SigmaStudio есть такой фильтр. Он находится в подменю Filters->Second Order->Lookup->Double Precision->General 2nd Order w var Param/Lookup/Slew. По умолчанию он одноканальный. Размножив алгоритм, сделаем его двухканальным для стереозвука, а в качестве управляющего элемента используем счетчик нажатий кнопки Toggle Counter, подключенной к GPIO_0. Счетчик будет срабатывать при каждом положительном фронте (Rising Edge) сигнала на его входе. К счетчику должны быть подключены два интерфейса.
Число переключаемых таким образом характеристик фильтра определяется параметром контрола curves, параметр step фактически управляет плавностью переключения от одной кривой фильтра к другой. Два параметра Frequency задают минимальное и максимальное значения частоты среза фильтра.
Нажав на иконку с кривой характеристики фильтра в верхней части контроля, мы увидим в отдельном окне все шесть кривых, определяющих переключаемые частотные характеристики фильтра. Также в этом окне можно выбрать тип фильтра и более тонко настроить параметры для каждого типа.
Таким образом, широчайшие возможности модуля BM2114dsp помогут самым привередливым пользователям настроить свой собственный тракт звуковоспроизведения в соответствии с различными требованиями по обработке звукового сигнала и управлению необходимыми изменяемыми параметрами.
Скачать файлы проектов для SigmaStudio, включают в себя:
1. generators.dspproj
2. 2_push_button_volume.dspproj
3. encoder_volume.dspproj
4. push_button_filter_switch.dspproj