Аппаратный Таймер в Качестве Микрофона

Чего только не бывает на поприще разработки электроники. Кто бы мог подумать, что таймер может быть микрофоном. Однако это в какой-то степени так.

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

Постановка задачи

Требуется определить факт наличия звука в проводе микрофона. Не нужно определять частоту, не нужно определять спектр. Не нужно распознавать сигнал. Надо просто сказать есть звук или нет звука.

Каков план?

Подать звук на аппаратный таймер микроконтроллера и считать положительные перепады. Если счетчик увеличился, значит звук есть. Если не увеличился, значит звука нет.

Реализация

У меня на микроконтроллере at32f435zm к GPIO PB5 проложен провод от дифференциальной пары, которая поступает от аналогово микрофона. В микроконтроллере на пине PB5 я активировал канал входа, который тактирует аппаратный таймер №3 на втором канале.

36a12475c9feab3309bcf3b9615a2777.png

Этот режим называется Input Capture. GPIO пин PB5 надо сконфигурировать на вход в режим альтернативной функции Timer 3 канал 2 (TMR3_CH2). Эта функция соответствует значению PIN_MUX равному 2.

b0fa52ef23ddeed141cdaf0af3b7e2a5.png

Как поступает положительный перепад, так сразу надо счетчик увеличить на 1. Таким образом аппаратный таймер станет считать импульсы от микрофона. Небольшой комментарий по настройке карты регистров таймера 3. Таймер надо переключить в режим External clock mode A.

22c45222233033139860043467970d11.png

Вот ключевые настройки в карте регистров:

Регистр

битовое поле

значение

пояснение

TMRx_CTRL1

TMREN

1

Включить на таймер

TMRx_STCTRL

SMSEL

7

External clock mode A — Rising edge of the TRGIN input clocks the counter

TMRx_STCTRL

STIS

6

Filtered input 2 (C1IF2)

TMRx_STCTRL

ESP

0

rising edge

TMRx_CM1

c2c

1

Input, C2IN is mapped on C2IFP2

TMRx_PR

PR

65535

максимальный предел счета

TMRx_CCTRL

c2en

1

Channel 2 enable

Остальные поля можно оставить без изменения, так как при сбросе они выставятся в нужные значения сами по себе.

Вот по такому пути должен просочиться сигнал тактирования от микрофона до таймера.

путь импульса

путь импульса

Отладка

У меня в прошивке есть UART CLI. Поэтому я могу отлаживать функционал в отдельности, по частям. Вот в логе загрузке появился текст про то, что канал настроился.

cde0752d195834c7b347c9d227c1d558.png

Можно заметить, что GPIO в самом деле переключился на таймер №3 канал 2.

da5ed861228b21fa53df113e288eebf1.png

Конфигурацию таймера 3 целиком и полностью определяют его регистры. Вот валидный конфиг.

timra 3

timra 3

Звука ещё не было, поэтому счетчик ожидаемо в нуле.

input_capture_diag

input_capture_diag

А теперь включим мелодию. Вот так выглядит фрагмент сигнала на осциллографе.

аналоговый сигнал на микрофоне

аналоговый сигнал на микрофоне

После того как прозвучала мелодия, можно заметить, что значение аппаратного счетчика увеличилось на 286.

input_capture_diag

input_capture_diag

Получается, что датчик звука работает.

Достоинства

++ Это своего рода эрзац-технология для тех, кто по разным причинам не может пользоваться микросхемами аудио кодеков.

++ Простота и топорность. Нечему ломаться. Такой импровизированный датчик можно сделать даже на дискретной логике.

++ Никаких вычислений. Никакой нагрузки на микропроцессор. Всё происходит полностью аппаратно. Звук тактирует аппаратный таймер.

++ Это санкционно-стойкий способ проверки звука.

Недостатки

--Невозможно понять спектральную составляющую звука.

--Невозможно понять смысл прозвучавшей мелодии.

Итоги

Удалось сделать автоматическое определение звука при помощи обыкновенного аппаратного таймера.

Словарь

Акроним

Расшифровка

КМОП 

Комплиментарный Металл-Оксид-Полупроводник

CMOS

Complementary metal–oxide–semiconductor

Ссылки

© Habrahabr.ru