Как читать звук с разъема 3,5 мм?

Казалось бы, простой вопрос, на который есть множество ответов в сети.

Цель: я пытаюсь разработать устройство, способное считывать аналоговый звук и извлекать частотное распределение. Меня не волнует абсолютная амплитуда, только относительная амплитуда, т.е. я только пытаюсь сравнить интенсивность определенных частот в данном звуковом сигнале.

Почему другие ответы не сокращают его: все ответы, которые я нашел, похоже, не касаются проблемы разного пикового напряжения от устройства к устройству и настройки громкости от настройки громкости. Мое устройство будет располагаться между источником и динамиком, поэтому оно должно иметь возможность перекалиброваться при изменении громкости. Он также будет использоваться как минимум с тремя разными устройствами: моим настольным компьютером, ноутбуком и телефоном. Напряжение P2P при максимальной громкости на выходах для наушников этих 3-х устройств варьируется от сотен мВ до 4В. Насколько я понимаю, существуют другие устройства с напряжением P2P до 12 В. Я также хотел бы проектировать с учетом этих устройств.

Я намерен использовать АЦП на своем MCU с диапазоном 0-3V3.

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

Мои мысли до сих пор: мое текущее решение состоит в том, чтобы использовать два операционных усилителя в качестве пикового детектора и использовать его для добавления смещения постоянного тока к сигналу, используя другой операционный усилитель в качестве инвертирующего усилителя. Коэффициент усиления этого усилителя будет регулироваться с помощью цифрового потенциометра, которым управляет микроконтроллер. Усилитель запускается с максимальным усилением и продолжает снижать его до тех пор, пока пик сигнала не станет меньше 3V3. Решение имеет то преимущество, что нажатием кнопки я могу сбросить пиковый детектор и дать указание MCU начать повторную калибровку. Я вовсе не женат на этом решении (я спрашиваю, как лучше решить мою цель, а не как исправить решение).

Мое решение

Однако я не уверен, как защитить мой микроконтроллер от повреждения входным напряжением выше 3 В3 (поскольку метод калибровки основан на запуске выше 3 В3 и снижении).

Какие напряжения питания у вас есть в вашей конструкции?
@ThreePhaseEel, на самом деле не имеет значения, какое напряжение питания используется. Если входной сигнал защищен от напряжения питания, то устройства защищены независимо от конкретного напряжения.
@RichardCrowley - я прошу получить представление о том, какие детали можно использовать в этой конструкции :) (наличие однополярного питания 5 В или 3,3 В для аналоговой стороны - это другое ограничение, чем возможность запуска вашего AFE от +/-15В, даже если АЦП в обоих случаях представляет собой блок 0-3,3В)
У меня есть +12В, +3В3 и 0В в моем текущем дизайне. Я планировал, что операционные усилители будут работать от напряжения +12 В/0 В, а микроконтроллер (и АЦП, поскольку он встроен) будет работать от напряжения 3 В3/0 В.
Не эксперт, просто подкинул идею, что то, что вы описываете, должно быть, как работает АРУ, не так ли?
Не наткнулся на них в своих поисках, вы дали мне еще кое-что для исследования. Однако, основываясь на моем кратком изучении АРУ, кажется, что они сохраняют частоту, но искажают амплитуду? Я хочу иметь возможность определить разницу в интенсивности различных частот не только в заданном интервале времени, но и в нескольких срезах. После калибровки устройство не должно изменять коэффициент усиления до повторной калибровки.
Можете ли вы получить питание -12 В в вашей конструкции? (Не должен быть громоздким, просто должен быть там — 25 мА вполне справятся с этой задачей)
Не совсем уверен, как. Эта штука будет питаться от адаптера постоянного тока 12 В (блоки питания, которые почти вездесущи). У меня есть импульсный стабилизатор DCDC, понижающий его до 3v3. Я не понимаю, как я могу легко добавить -12V . Хотя я думаю, что это может быть сделано с некоторыми дополнительными дизайнерскими работами. Почему это необходимо? Разве операционные усилители не будут работать нормально на 12 В / 0 В, поскольку меня не волнует отрицательная часть сигнала?
@ApoorvaKharche - наличие двойного источника питания открывает ваши возможности в отношении выбора IC. Инвертирующий зарядный насос или DC-DC может легко генерировать -12 В из вашего + 12 В, кстати.

Ответы (1)

Ты на правильном пути. Очень маловероятно, что звуковые сигналы перенапряжения вызовут какой-либо «повреждение» процессора или АЦП. Худшее, что может случиться, это то, что сигнал будет «обрезанным» или «плоским», что приведет к искажению. Таким образом, вы можете написать прошивку для своего приложения, которое будет искать расширенную последовательность минимума (ноля) или максимума (ваше вы показали свое цифровое разрешение?) и уменьшать усиление входного каскада. Или, наоборот, определить средний уровень звука, который слишком низок, и увеличить усиление и т. д. Возможно, вы предвидите «проблемы», которые на самом деле «проблемами» не являются.

Спасибо за ваш ответ. Я еще не определился с хорошим балансом частоты дискретизации и разрешения, поэтому не стал обсуждать эту часть. Я не думаю, что это слишком большое дело, в основном это просто второстепенная проблема, которую мне нужно будет выяснить на основе дополнительной выборки данных и базовой математики. Да, я чувствовал, что, возможно, слишком много думаю об этом. Очень немногие устройства будут иметь чрезвычайно высокое напряжение, и большинство из них, вероятно, будет близко к среднеквадратичному значению 500 мВ-1 В. Но у меня слишком много неудачных проектов, потому что я забываю, что существуют пограничные случаи, и поэтому мне нравится рассматривать их и разрабатывать для них, если это возможно.
Да, очень приятно рассматривать крайние случаи, и вы совершенно правы. Однако вы работаете с неверным предположением о том, что входные сигналы с большой амплитудой будут «вредными» в любом существенном смысле.
Я не уверен, что понимаю, почему их не будет. Это потому, что в АЦП фактически не поступает реальный ток (при условии, что есть подтягивание)?
Аналого-цифровым преобразователям для правильной работы требуется очень небольшой сигнальный ток. Таким образом, вы можете использовать последовательный входной резистор с относительно высоким сопротивлением, чтобы уменьшить входной ток короткого замыкания из-за перенапряжения. И используйте диоды, чтобы ЗАЖИМАТЬ входной сигнал до безопасного уровня. Если вы обнаружите, что входной сигнал ограничивается схемой защиты, вы просто уменьшаете уровень с помощью цифрового потенциометра.
Я даже не подумал поставить диодный зажим на выходной конец. Оглядываясь назад, это было довольно очевидное решение. Тем более, что это не должно быть очень точным, просто в пределах допуска контактов GPIO MCU. И это также значительно упрощает обнаружение отсечения, если вы используете транзистор для одного из зажимов и устанавливаете прерывание на цифровом выводе GPIO. Спасибо.
Я не могу отредактировать свой предыдущий комментарий, но, если это не очевидно, я думал об использовании диода и биполярного транзистора в качестве зажима вместо одного стабилитрона. Это немного избавляет меня от сложности прошивки. С BJT я просто уменьшаю усиление прерывания вместо того, чтобы активно проверять какое-либо конкретное условие. Я думаю о чем-то вроде: i.imgur.com/V1FQkjS.png Это кажется немного подозрительным, и я бы попробовал это в симуляторе SPICE, но я немного разочарован LTspice, и у меня нет доступ к PSPICE снова до августа.
Использование транзистора далеко «вниз по течению» кажется более сложным и более опасным. Использование простых диодных зажимов на ВХОДЕ (перед любой активной цепью) защищает вас от перенапряжения. Использование этого транзистора в нисходящем направлении ничего не дает для защиты.
Я понял это, в конце концов. Как указано выше, у меня нет формального образования, и в основном я просто барахтаюсь в большинстве этих аналоговых схем. Сейчас мой план выглядит совсем иначе, чем тот, что был раньше. Самое большое изменение, которое я сделал, заключается в предположении, что входной сигнал будет не более 6 В pp, и просто мигает гневным светодиодом для пользователя, если он больше этого. Я избавился от пикового детектора, потому что он излишен, если я зажимаю сигнал прямо перед АЦП. Я перевел свои операционные усилители на +3v3/-3v3 вместо 12V/0V и добавил два стабилитрона перед первым операционным усилителем.
Что у меня есть на данный момент: tinyurl.com/h4xd979 Несомненно, все еще есть возможности для улучшения. И я не совсем уверен, как я буду мигать разгневанными светодиодами, когда срабатывает защита Зенера в начале цепи, через нее протекает слишком малый ток, чтобы можно было просто воткнуть туда светодиод. Ну не должно быть? Я не совсем уверен. Мне также пришлось переместить цифровой потенциометр, поскольку все потенциометры pdip, похоже, имеют одинаковое максимальное напряжение по спецификации на своих контактах. Это было основной причиной для исключения любого сигнала выше 6v pp.