Pull to refresh

Comments 52

А это точно хорошая идея подавать аналоговый сигнал на цифровой вход? И в каком режиме этот вход находится при нормальной работе микрофона?

Этот пин настроен на вход с подключением аппаратной функции: timer 3 channel 2. Внутренней подтяжки на стороне MCU нет.

так, вообще говоря, это тригер (компаратор, ... или как его назвать) GPIO пина работает как микрофон, то есть как датчик который реагирует на изменения уровня сигнала, а таймер просто регистрирует-запоминает срабатывания этого тригера, то есть наличие этих изменений уровня.

Внутри АЦП тоже есть что-то наподобие таймера, там тоже надо время измерять, а это тоже просто регистрация импульсов по сути, но с другой целью, куда же без таймера деваться то (без регистрации импульсов).

А это точно хорошая идея подавать аналоговый сигнал на цифровой вход?

Разумеется это паллиативное решение. Санкции делают своё дело. Приходится вот так выкручиваться.

Ну, оно либо работает согласно ТЗ либо нет.

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

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

можно же вообще на GPIO пин повесить прерывание, например по уровню,

GPIO прерывания не смогут считать так быстро как аппаратный таймер.
В случае с EXT INT будет вызываться ISR код.
В случае с таймером никакой код не вызывается.

GPIO прерывания не смогут считать так быстро как аппаратный таймер.

Бесспорно. Но вы же мегагерцы с микрофона не планировали снимать? Или планировали? ;)

В случае с EXT INT будет вызываться ISR код.

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

оно уловит фронт, а что дальше? считать фронты? для этого есть счетчик

В свежеподвешенном, ну в смысле в Z - высокоимпендансном. Без нагрузки на линии это весьма чревато (как лишним потреблением так и куда более серъезными последствиями).

А есть такое, что его и нету. Или он сильно-сильно занят. Или просто процу отвлекаться впадлу. Ну, много чего бывает.

Уж больно ненадежно, про фильтр и триггер шмитта написали в комментах

Так я ж и писал....

Если уровень сигнала вольт так = питанию контроллера, то чего и нет (резистор последовательно только поставить), защитные ди0ды порежут лишнее. Так что вариант вполне для дна пойдет.

а почему не АЦП?

Хороший вопрос.

Да, в MCU AT32F435 Есть аж три 12-bit ADC частотой дискретизации Fs= от 124.9kHz до 5.3 MHz! В тандеме с DMA получился бы полноценный диктофон ультразвука.

Однако так вышло, что на электронной плате все пины ADC оказались заняты другим. Остался только этот пресловутый PB5 с таймером. Не знаю почему схемотехники так сделали.

Сразу несколько вопросов/проблем:

уровень сигнала - напрямую с микрофона? Там миливольты а порог цифрового входа куда выше;

наводки - поскольку вход высокомный а входная цепь может оказаться несколько длинной, то вполне вероятно что будет принимать все что угодно, включая мегагерцовый диапазон (рядом работающий передатчик). Выход - нагрузить линию и посадить фильтр (уже не просто);

лучше-бы включить триггер Шмитта, чтобы не было излишних переключений и большего чем надобно потребления.

Ну вот типа таких вот замечаний.

уровень сигнала - напрямую с микрофона? Там миливольты

Микрофон как правило с усилителем, амплитуда будет нормальная.

В статье ни слова про усилитель. И ни слова что будет цифровой микрофон. Так что уровень будет не очень. Или вы думаете, что встроенный усилитель в электретном микрофоне выдаст больше 2В RMS? Так не выдаст и ему еще и питаниенадобно.

В статье ни слова про усилитель.

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

больше 2В RMS

Не милливольты ;)

питаниенадобно

Ну, ожидается что питание в схеме подается и на микрофон и на контроллер.

Без нормальных технических требований и схемотехники это даже оценить нельзя. Измерение непонятно чего непонятно для чего. А вообще для того, чтобы сделать детектор звука, кодек не нужен, и вычислительной мощности много не нужно - достаточно оцифровывать звук встроенным почти в любой микроконтроллер АЦП, причём скорее всего с низкой частотой дискретизации, порядка полутора-двух килогерц, и сделать небольшую цифровую обработку.

Ну, просто фильтр + детектор, с него снимаем постоянку (которая как-то коррелирует с амплитудой). Все это можно подогнать по уровню к триггеру Шмитта = без вычислительных затрат, без занятого таймера (правда с аппаратным интегратором) и 1 вход. Ну и как-бы все.

Просто небольшую цифровю обработку иногда и не на чем делать (нету ресурса просто свободного).

Тут речь идёт о 32-разрядном микроконтроллере с вычислительной мощностью до 360 MISP, а задача требует не больше 0,2 MISP, или 0,055% потенциальной вычислительной мощности этого микроконтроллера, и при этом можно получить регулируемый порог срабатывания, автонастройку нулевого уровня, и какую-то селективность по виду сигнала, например реагировать только на слышимый сигнал. И ещё на обвязке микроконтроллера сэкономить.

А вдруг ТС-а усе занято? И нету свободных 0.2 MIPS (ну ладно, не верю в это) или ADC забит чем-то (ну это вполне) или просто лень писать фильтр (ну, - наиболее вероятно)? А что тама сэкономишь? 1 таймер, так он унутри.

Сэкономить можно по сравнению с аппаратной реализацией детектора, предложенной вами. А к реализации на таймере есть вопросы по контролируемости параметров и селективности, на которые не ответить без ТТ и схемы, которые автор раскрывать не хочет. И да, я тоже подозреваю, что просто лень писать фильтр. Может оно и будет работать, но смысл статьи непонятен.

Мы же привязаны к реализации автора, - там этого нет. А так - мой вариант побоку ибо плата уже готова.

плата уже готова

Сначала сделали плату а потом уточнили ТЗ? Упсь.

Ага..... Ну вот, никогда не было и вот опять... :)...

с неясным ТЗ результат хз :) программисту сказали сосчитать, он сосчитал

Ну.... Результат будет полностью соответствовать ТЗ - по ТЗ непонятно-что и в результате - непонятно-что, что полностью по духу соответствует ТЗ.

Были подобные "непонятно-что" в ТЗ, главное потом не ржать при клиенте, когда поэтапно показываешь, что выполнили буквально и дотошно все, что написали сотрудники клиента в ТЗ. Не ржать!! Думаю что такое у многих было... И скорее всего, наверное, у всех.

достаточно оцифровывать ....и сделать небольшую цифровую обработку.

да чего там... разложить по Фурье спектр ... Слово "измерение" тут вообще лишнее и вся эта обработка излишня для задачи. Хотя можно .. замарочиться

Измерение - это то, что делает таймер в статье - измеряет количество непонятно откуда взявшихся импульсов за какой-то период. Потому что наличие одного зарегистрированного таймером импульса вряд ли достаточно для такой задачи, значит нужно сравнение числа зарегистрированных импульсов с каким-то порогом. А цифровая обработка оцифрованного сигнала нужна как минимум, чтобы адекватно оценить громкость звука, и сравнить её с пороговой.

это да, причем в единицу времени, но суть что порог, диапазон - всего лишь 2 операции сравнения, а по большому счету выделяется некоторая полоса частот, размерностью в дискреты таймера (а не Герцы). Уровень громкости - порог 0/1, так или иначе задается схемотехникой. Получается очень дискретное преобразование, в очень абстрактных величинах, сравнение в эмпирическом диапазоне (258+-50), но без АЦП

Заголовок - "Аппаратный Таймер в Качестве Микрофона".

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

Я-то уж думал, что будет история про "микрофонный эффект" какого-то узла...

Я-то уж думал, что будет история про "микрофонный эффект" какого-то узла...

Как в фильме "Eagle Eye" (2008) СhatGPT по изображению концентрической ряби на воде в стакане через PTZ видеокамеру определил о чем говорят в комнате.

https://youtu.be/b_wMF0rBA6I?si=2_QhMNF2F3Q_vXgS

Я-то уж думал, что будет история про "микрофонный эффект" какого-то узла...

Мне тоже это в первую очередь пришло в голову: проверять исправность встроенного динамика устройства, используя микрофонный эффект керамического конденсатора. Но все оказалось проще...

Для этого нужно взять обычный советский... флажок

Выпаять из старой советской платы - и в production!

Стандартная фишка. В Советском Союзе её знал любой АОН-щик. АОН-ы как раз работали с однобитовым сигналом. Спектр сигнала не сильно меняется если его квантовать в однобитовый.
Если чувствительности цифрового входа маловато, то можно добавить на вход еще шум с другого выхода. Это будет дитеринг. Его тоже в АОН-ах применяли.
Чуток фантазии и не за дорого можно ADPCM соорудить.

А GPT подкинул еще один вариант:

RC-цепь и измерение времени заряда: Создайте простую RC-цепь и используйте функцию измерения времени микроконтроллера для определения напряжения на конденсаторе. Это позволит получить цифровое представление аналогового сигнала без АЦП.

Вот тут таймер более умно будет применен.

Ну этому решению сто лет в обед. Мало того, ЦАП на RC цепочке тоже можно сделать.

Но как без внешней обвязки работать с микрофоном? Подозреваю, что там стоит ОУ. Или пара транзисторов. Не смогут микровольты переключить логический вход.

Какая-то статья от школьника. "Словарь, ссылки" - все на это намекает, подражание серьезным работам. Домашнее задание по информатике?

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

А в тексте про усилитель ни слова.. Поэтому чукча немного фантаст. Просто иллюстрации подкачали.

Стандартная фишка. В Советском Союзе её знал любой АОН-щик.

Ну, в АОНах аналоговый сигнал стопроцентно сначала проходил через компаратор. Пусть даже импровизированный, на CMOS-логике в линейном режиме. А здесь он подается прямо на цифровой вход, о чем в любой книжке "Схемотехника для малышей" написано большими буквами: так делать не надо.

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

Настоящий компаратор там был. Да и сигнал там совсем не микровольты.

собственно данная задача является вариацией на тему измерения частоты, а так же ширины импульсов при помощи таймеров о чем на хабре было несколько статей. частоту считать придется хотя бы косвенно, потому что если скажем в единицу времени идет 1 импульс то это помеха, а 65000 то скорее ВЧ наводка, так что частота выделяется хоть и косвенно.

в "аппаратной" реализации такой задачи вызывает интерес завести выход встроенного компаратора микроконтроллера сразу на счетный вход счетчика за счет чисто внутренней конфигурации соединений.

в некоторых новых контроллерах есть и pga, ну а если использовать cypress psoc то там вообще можно накоммутировать всякого, но это как бы не "китайские" контроллеры.

Честно говоря, с таким процессором можно было бы полноценно подойти к решению задачи контроля подключения микрофона. Задействовать какой нибудь источник чтобы генерировать короткие импульсы chirp сигнала, либо даже создавать комфортный псевдослучайный шум и потом микрофоном контролировать его периодичность, да много чего еще

Меандр из другого канала того же таймера + пару резисторов и конденсатор , сумма пилы и микрофона и тот таймер на вход - получится ADC.

Что- то не совсем понятно. Есть ли возможность электрическую цепь изобразить?

С таким же успехом для такой задачи можно отлавливать смену логического уровня обычным уартом сохраняя "сэмпл" в буфер и считая количество ненулевых байт. Но нужно предварительно инвертировать сигнал. Даже получится некоторый фильтр так как каждый бит обычно дикретизируется 3 раза и отдельные иголки в сигнале будут отбрасываться

не знаю как на stm32, но на avr - 8 и 16 раз помниться сэмплируется uart

но как видим здесь на структурной схеме в случае таймера в stm32 тоже есть некоторый фильтр на входе. а в xmega для такого случая фильтр настраивается от 1 до 8 выборок

Sign up to leave a comment.

Articles