Метроном на PSoC.
Перед повторением обязательно прочитать здесь.


Сергей Безруков.

Описываемый метроном разрабатывался совместно с моим студентом Райан-ом, который на любительском уровне играет на фортепиано и гитаре. Созданию ТЗ метронома предшествовали несколько консультаций здесь на форуме, согласно которым более опытные музыканты посоветовали нам какие функции следует включать в метроном, и какие не стоит. Я эту информацию передал студенту, кторый добавил ещё что-то от себя и что-то убрал. Поскольку девайс изначально проектировался для него, были приняты все его коррекции, в результате чего получилось следующее.

Метроном предназначен для генерации темпа со скоростью от 40 до 170 долей в минуту (BPM) с дискретом в 5 BPM. Каждая доля воспроизводится малогабаритным динамиком, при этом слабым и сильным долям соответствуют звуки разной частоты и частота сильных долей выше. Имеется возможность установки размера 3/4 или 4/4. Регулировка темпа производится механическим инкрементальным энкодером. Скорость и итальянское наименование темпа индицируется на ЖКИ, совместно с громкостью звука и размера. Помимо звуковой индикации долей имеется световое их выделение двухцветным светодиодом красного и зелёного цвета, а также визуальная индикация, предвосхищающая долю. Последняя реализована как бегающая вправо и влево жёлтая точка на 20-сегментным индикаторе, расположенным над ЖКИ. Крайние положения точки соответствуют наступлению моментов доли и её звуковой индикации. Этим как-бы иммитируется движение маятника механического метронома (видео).

Front view

Управление устройством помимо энкодера осуществляется ещё и кнопкой. Последняя используется для контроля световой индикации и позволяет независимо друг от друга включить или выключить двухцветный светодиод и бегающую точку. Выбор одного из четырёх световых режимов (обе световые опции выключены, обе включены, или включена только одна из них) производится повторным нажатием на кнопку в циклическом порядке. Поворотом ручки энкодера регулируется темп, громкость звукового сопровождения (при громкости =0 звук выключается) и размер такта (3/4 или 4/4). Выбор параметра регулировки производится интегрированной в энкодер кнопкой путём нажатия на его ручку и индицируется на дисплее положением курсора.

Schematic

Сердцем метронома является PSoC фирмы Cypress, содержащая микроконтроллер архитектуры ARM Cortex-M0. Связь МК с ЖКИ производится через интерфейс I2C. Усилитель IC2 согласовывает выход ШИМ-контроллера PSoC с низкоомным динамиком. Громкость звука регулируется изменением скважности импульсов ШИМ, а его частота – соответственно частотой ШИМ. При установке уровня громкости =0 усилитель переводится в режим сна через вывод 20 PSoC с целью уменьшения токопотребления схемы. Разъём SV1 предназначен для программирования PSoC через интерфейс SWD. Устройство может работать как от пары пальчиковых батарей типоразмера 2хААА, так и от телефонного адаптера на 5В, подключаемого через USB коннектор. Транзистор Q3 обеспечивает автоматический переход на автономное питание при отключении сетевого адаптера. Повышающий преобразователь на микросхеме IC3 стабилизирует напряжение питания схемы при разрядке батарей. Подсветка дисплея включается автоматически только при питании от сетевого адаптера, что сделано также с целью экономии энергии батарей. Напряжение адапера понижается стабилизатором IC4 до уровня батарей, что необходимо для нормальной работы преобразователя.

Метроном собран на односторонней печатной плате, несколько неразведённых соединений реализованы проволочными перемычками. На плате имеется гнездо для подключения головного телефона. При подключении последнего динамик на плате отключается контактами гнезда. Батарейный отсек размещён на тыльной стороне платы на металлической пластине, установленной на трёх стойках. Благодаря этому центр тяжести устройства смещён несколько назад и прибор устойчиво стоит на L-образных ножках. На этой-же пластине смонтирован выключатель питания (на схеме не показан), отключающий батареи от схемы. Файл платы в формате для Eagle прилагается.

Assembly Back view

Программа МК написана на языке С и отлажена в PSoC Creator IDE версия 4.0, свободно доступной с вебсайта фирмы. Программирование PSoC производилось штатным программатором MiniProg3 фирмы. Для программирования и внутрисхемной отладки кода можно также воспользоваться программатором KitProg, имеющимся на любой демо-плате фирмы стоимостью начиная от 10USD. IDE включает графический конфигуратор ресурсов PSoC и их соединения между собой. Эффективное использование аппаратных модулей PSoC, а также API функций для работы с ними, предоставляемых фирмой, позволило существенно сократить код МК. В устройстве задействованы следующие модули (синим цветом на диаграмме ниже показаны элементы схемы внешние по отношению к PSoC). Квадратики с метками LED – это выводы портов, куда подключены соответствующие элементы схемы. Конфигурация каждого вывода порта производится также кликом мышки по соответствующему квадратику и установкой галок в открывающемся при этом окошке конфигуратора.

Block diagram

Модуль I2C предназначен для работы с ЖКИ и конфигурируется буквально в 3 клика мышкой. Всё, что при этом нужно сделать, это установить ражим мастера и выбрать частоту тактирования интерфейса. Модуль PWM служит для генерации тона звукового выделения долей. Частота и громкость тона устанавливается программно модификацией соответствующих параметров этого модуля. Генерация темпа производится модулем Timer путём установки энкодером коэффициента деления его тактирующей частоты. Частота на выходе этого модуля в 20 раз (по числу сегментов индикатора бегающей точки) превышает частоту для получения требуемого темпа. При переполнении таймера вызывается обработчик его прерывания Timer_ISR, который пробуждает МК, переключает сегменты индикатора бегущей точки и управляет звуковым и световым сопровождением. Модуль QuadDec обеспечивает интерфейс с энкодером и частично устраняет дребезг его контактов. Он содержит внутренний счётчик, содержимое которого аппаратно увеличивается или уменьшается при повороте ручки энкодера. Значения счётчика периодически опрашивается программно для распознавания момента поворота ручки и его направления. Наконец, блок Debouncer служит для аппаратного устранения дребезга контактов кнопки энкодера и другой кнопки в схеме. Как следует из диаграммы, эти кнопки SW_3 и SW_4 подключены к модулю через логический элемент И, который наряду с многочисленными другими логическими элементами имеется на борту PSoC. К выводам всех кнопок на схеме подключены внутренние подтягивающие резисторы портов PSoC. Поэтому при нажатии или отпускании кнопок SW_3 и SW_4 происходит изменение логического уровня на выходе Debouncer-а, что вызывает аппаратное прерывание. В обработчике Deb_ISR этого прерывания проверяется какая из кнопок нажата или отпущена путём чтения состояния выводов PSoC и производится соответствующее управление. Логика работы метронома предполагает, что пользователь нажимает не более одной из этих кнопок в каждый момент времени. В противном случае, изменение состояния одной из кнопок не будет опознано. Остальную логику работы схемы можно легко понять по обширным комментариям в коде, исходный текст которого содержится в прилагаемом архиве проекта.


Видео работы

Сергей Безруков, june 2017





Обсудить на форуме



НаписАть отзыв E-mail            Other electronics  Другая электроника

Home
На главную



счётчик посещений

цифровой метроном со звуковой индикацией psoc cypress


Copyright © 2017 by Dmitry Dubrovenko.