неділю, 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.

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


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

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


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

7 коментарів:

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

    ВідповістиВидалити
  2. Добрый день! Крайне рад, что нашёл Ваш пост о данном устройстве. Не могли бы вы поделиться прошивкой микропроцессора, схемами, которые не выставлены в блоге? Буду крайне благодарен за отклик. С уважением, Иван.

    ВідповістиВидалити
  3. Доброго дня Івноч. Підкажіть будьласка що таке схеми, які не виставлені в блозі? Бо схема пристрою в самому початку статті.
    Прошивку скинути напевно можу, але в якому вона стані, доведеться розбиратися самотужки. Ну і як що розповісте мету, З якою вам необхідна схема та прошивка, то мені буде більш цікаво шукати інформацію 20ти річної давнини :)

    ВідповістиВидалити
    Відповіді
    1. Касательно цели: конструирую миниатюрную версию телевизора с механической развёрткой изображения. После постройки полногабаритной, захотелось заменить диск Нипкова на ленту, из-за чего всё устройство можно поместить в корпус, шириной всего с современный смартфон. В устройстве есть пред- и конечный усилитель сигнала для подсветки. Последний был рассчитан под определённый блок светодиодов. На вход ему должен поступать аудиосигнал 1V. Так как хочется унифицировать технологические возможности устройства, хочется просто передавать на вход предусилителя сигнал с телефона или MP3-плеера, а соответственно, нужно предотвратить случай, когда сигнал будет слишком громкий и индицировать об этом пользователю. Для этого из вашей схемы я хотел бы использовать именно блок пикового индикатора, поставив его между предусилителем и конечным, чтобы сигнализировать о превышении порога в 1V. Касательно "других схем", о которых я упомянул, я не могу конкретизировать, поскольку я прочитал в самом блоге, что вы сможете поделиться не только прошивкой, а ещё и схемами. Однако т.к. они представлены в самом блоге, возможно шла речь о каких-то других, невыставленных схемах.)

      Видалити
  4. Ого, круто. Я так розумію в пристрої є мікроконтроллер? І в такому разі, враховуючи сигнал амплітудою 1в, досить не малий, його можна аналізувати ацп контроллера без підсилювача. Єдине що поставити наприклад стабілітрон вольта на 2-3 і резистор для обмеження струму, щоб не шунтувати вхідний сигнал при нормальній роботі, для захисту входа АЦП, як що користувач подасть сигнал дуже великої амплітуди.

    А як що в контроллері немає ацп, то погуглити схему аналогового індикатора перевантаження. Вона-ж схема пікового індикатора, і або виводити індикацію на окремий світлодіод, чи на ніжку контроллера.

    ВідповістиВидалити
    Відповіді
    1. Да, микроконтроллер есть, только он исключительно занимается миниатюрным шаговым движком. Мне было лень делать общую схему для движка и усилителя, да и для экономии места, нужно разнести усилок и контроллер ШД по разным местам корпуса. В принципе, сам усилок и не требует программной оснастки, он весьма примитивен. Поэтому аналоговый пиковый LED индикатор минималистичной конструкции и ищу, вот и набрёл на ваше устройство. В принципе, какие-то схемы нашёл и в сети, но без детального описания их реальной работы. Может вы подскажите, либо можно ли внедрить ваш индикатор, а может быть у вас есть хорошая схемка, быстро-срабатывающего индикатора на такое напряжение аудиосигнала? Схемы с инета надо одну за другой пересобрать, пока найдёшь подходящую... вдруг что посоветуете?

      Видалити
  5. Нескладається у мене картинка в голові. В моєму пристрої саме мікроконтролер вирішує коли включати світлодіод, а коли виключати. Підсилювач там підсилює дуже низький сигнал з мікрофона в прийнятні вольти для ацп мікроконтролера.

    Конкретну схему не підкажу, я з цим не працюю, і тому так само треба гуглити і збирати.

    Але я швиденько пробігся, і можна використати звичайнісінький компаратор же. На одну ногу сформувати опорну напругу 1в, ну а на другу вхід звуку через діод наприклад.

    Та і погратися, щоб не перераховувати, з будь якою нескладною схемою, це справа15хв.

    Доречі на радіокоті є стаття про індикатори рівня, у мене доступу немає, впн лінь включати, але тим неменш, я думаю і звідти можна взяти.
    https://radiokot.ru/articles/20/ (посилання з видачі гугла по картинкам)

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