Следи за обновлениями в facebook

неділя, 21 квітня 2013 р.

SounD-O-MeteR или дискретный измеритель уровня звука

Кому лень читать. Альбом фоток здесь!


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

Схема готового устройства:


А теперь - как это устройство создавалось.

Первым делом воспользуемся гуглом. Я не смог найти готовой конструкции отвечающей заданным требованиям. Есть много измерителей уровня звукового сигнала, но в них нет микрофонного усилителя. Либо есть схемы с микрофонным усилителем и компаратором который срабатывает при определенном уровне звука на входе. Регулировку порога можно производить переменным резистором. Но первоначально я решил использовать для обработки сигналов микроконтроллер, так как это дает больше возможностей по усовершенствованию конструкции.

Не малой проблемой был вопрос питания схемы. Если PIC контроллер способен работать при напряжениях 2-5 вольт, то большинство схем усилителей для микрофона нуждаются в отрицательном и положительном источнике питания либо в напряжении больше 5 вольт.

В конце концов попал на схему отличного на мой взгляд усилителя на сайте amplif.ru

В закромах нашел подходящий операционный усилитель LM324 который позволяет работать от однополярного источника питания напряжением от 3В. Что меня вполне устраивало. Питать думал от 3х элементов типа "таблетка" по 1,5В каждый. То есть сумарное напряжение 4,5В и с расчетом на то что напряжение питания будет проседать до 3,5В в процессе разряда батарей.

Собрал схему усилителя на макетной доске. При напряжении питания 2,5В получил выходной сигнал амплитудой до 1,6В примерно при уровне звука "громкий крик" :)  Экспериментальным путем проверил и подтвердил что при изменении напряжения питания от 3 до 5 вольт существенно изменяется и выходной сигнал. Зависимость изменения близка к линейной (определял на глаз по 2х канальному осциллографу). Встал вопрос стабилизации рабочего режима усилителя. Решил стабилизировать линейным стабилизатором на стабилитроне и резисторе. Стабилитрон на 3,3В и резистор 120 Ом. Это позволило в значительной мере стабилизировать коэффициент усиления микрофонного усилителя.

Так как для последующего измерения уровня звука а точнее его амплитуды нам достаточно иметь только одну полуволну напряжения, то есть в моем случае положительную, отрицательную я зашунтировал диодом. Шунтировал потому как если диод поставить последовательно пути прохождения сигнала, то все сигналы ниже 0,7В примерно отсекались диодом (напряжение прямого падения обычного кремниевого диода).
После усиления и выпрямления я получил выходной сигнал амплитуда которого от 0 до 1,6В в зависимости от громкости звука в окружающей среде.

Наступило время микроконтроллерной части. Первый раз использовал в своей конструкции аналого-цифровой преобразователь. Так как я умею программировать на ассемблере под PIC, то и было принято решение использовать PIC. Требования к контроллеру: работа от напряжения 3В и выше, наличие АЦП, наличие встроенной энергонезависимой памяти, SMD  корпус, минимальное количество выводов. Всему этому удовлетворяет PIC12F675.

Изучил даташит, раздел о АЦП. Обнаружил возможность подавать опорное напряжение для АЦП из вне через один из выводов микроконтроллера. Таким образом я подал опорное напряжение от питания схемы микрофонного усилителя (а она хоть и стабилизирована стабилитроном, но не так хорошо как хотелось бы). Это позволило максимально уменьшить погрешность измерения уровня звукового сигнала  от изменения питающего напряжения.

Зачем это все нужно? АЦП микроконтроллера в результате преобразования выдает число которое является относительным количеством уровня входного сигнала в опорном. В этом контроллере АЦП 10 бит. Это означает что опорное напряжение делиться на 2^10=1024. И АЦП считает количество этих частичек в уровне входного сигнала и выдает результат. Теперь представим что звук на входе микрофона не изменяется. Но во время работы устройства батарея садиться, уменьшается напряжение питания, и соответственно уменьшается и напряжение на выходе микрофонного усилителя. Так как питание микрофонного усилителя стабилизировано стабилитроном но все равно немного изменяется, то необходимо взять опорное напряжение именно отсюда.

ЗЫ: Пока писал объяснение работы, понял что можно убрать стабилитрон. Позволить изменяться напряжению питания на усилителе, но подключить еще фильтрующий конденсатор на питание операционника. Таким образом получиться  максимально развязать цифровую и аналоговую часть по питанию. И минимизировать и стабилизировать погрешность измерения уровня звука. Но это уже тема для второй версии прибора. Если заказчик пожелает.

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

Программа микроконтроллера. Устройство программы примерно следующее:
1. После включения питания из энергонезависимой памяти считывается порог звука (некоторое число) которое было запрограммировано при изготовлении или во время режима обучения.
2. Программа зацикливается в бесконечный цикл. В каждой итерации цикла производиться проверка состояния кнопки, если кнопка нажата, то переход на подпрограмму обучения другому порогу звука. Далее запуск АЦП. Полученный результат преобразования сравнивается с заданным порогом. Если результат больше порога то включаем лампочку.
В цикл так-же встроен счетчик, который при переполнении включает на короткое время и выключает индикаторный светодиод. Это необходимо для индикации включенного состояния прибора, чтобы не за быть выключить его питание после завершения работы.
3. Подпрограмма обучения. Подпрограмма обучения запускается при нажатии на кнопку прибора. Для уменьшения погрешности измерения порога в подпрограмму введена пауза порядка 3 секунд, чтобы можно было положить прибор на поверхность. Чтобы исключить помехи вызванные ударами по корпусу прибора. Пауза индицируется миганием светодиода. Далее подпрограмма переходит в режим записи и индицирует это постоянно светящимся светодиодом. Во время записи (обучения или измерения) происходит циклический замер и выявление максимально измеренной амплитуды. После того как максимальная амплитуда замерена, соответствующее число записывается в энергонезависимую память.

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



Конструкция. На радиорынке был приобретен чудесный корпус в виде брелка с отверстием под светодиод и кнопкой. Дополнен отверстием для микрофона.
Рисование схемы и проектирование платы делал в Novarm DipTrace.
Конфигурация платы выбиралась таким образом чтобы помещалась в корпус. В процессе проектирования печатной платы было принято решение использовать одну батарею CR2016 напряжением 3В. Эксперименты показали нормальную работу устройства от такой батареи.

Макет печатной платы и сборочные чертежи


Изготовленная плата и внешний вид собранной платы



В процессе сборки в плату был врезан переключатель питания. В будущем при необходимости доделаю устройство таким образом что выключить его можно будет длительным нажатием на кнопку обучения (как например в BlueTooth гарнитуре) - при этом контроллер будет переходить в режим sleep и отключать микрофонный усилитель. А включаться по прерыванию от этой же кнопки. Так же можно убрать стабилитрон D1 а вместо него поставить конденсатор. и убрать делитель R6,R7.

Внешний вид собранного устройства


Устройство собрано. Наладки не требует. Полностью удовлетворяет техническому заданию.

А так устройство работает в живую:


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

1 коментар:

  1. добрый вечер, Андрей. очень понравилась ваша статья про измеритель уровня звука. заинтересовало. можете поделиться программой на микропроцессор пожалуйста? и если можно, то и схемами микропроцессора и самого устройства. буду очень вам благодарен. готовлю работу в университет, хочу подобное устройство собрать =)

    ВідповістиВидалити