Для нового проекта с Arduino мне нужно сгенерировать звуковой сигнал, амплитуда которого со временем должна увеличиваться, если пользователь не предпринимает никаких действий. Выход будет через небольшой динамик.
Поэтому, когда срабатывает условие тревоги, я генерирую низкий звуковой сигнал в слышимом диапазоне, даю пользователю некоторое время, чтобы отреагировать, затем увеличиваю громкость, жду, снова увеличиваю, пока пользователь не отреагирует. Таким образом, я не генерирую громкий звуковой сигнал с самого начала, который может мешать в тихой обстановке.
Генерация импульсов и использование транзистора или усилителя на ИС для управления спакером не составит труда.
--> Вопрос: как модулировать амплитуду звука динамика?
Мое ограничение заключается в том, что при подаче сигнала тревоги Arduino по-прежнему должен заниматься другими делами, поэтому я не могу остановить его в сложной процедуре для генерации тонов, например, с помощью какой-то причудливой ШИМ, которая затем фильтруется для доставки сигнала с разными амплитудами. .
Я мог бы использовать один контакт для генерации сигнала базовой частоты и иметь 3 контакта для управления некоторой внешней схемой для изменения амплитуды, например:
Ребята, у вас есть идеи, которыми вы можете поделиться?
Спасибо!
ДОПОЛНЕНИЕ: Это решение, которое я уже опробовал, но уровни громкости не повторяются от одного устройства к другому, поэтому я хотел бы избежать добавления триммера. D13 генерирует прямоугольную волну со звуковым тоном. Другие выходы направляют этот тон через резисторную лестницу через логические элементы И.
В вашем вопросе показан блок ШИМ, за которым следует регулируемый каскад усиления. Это не очень очевидная форма для использования, но она может сработать.
Традиционно вы можете использовать несколько блоков ШИМ с разной мощностью выходного сигнала (используя резисторы), фактически создавая ЦАП.
То, что вы построили, должно работать, если вы объедините ШИМ (для переключения) с программируемым источником тока (для амплитуды). Для источника тока вы можете использовать 3 параллельные схемы зеркала тока, переключаемые 3 регуляторами амплитуды. Обычно вы можете выбрать логарифмическую шкалу для каждого шага переключения.
Вы можете использовать выход PWM, чтобы потреблять ток, 3 ступени текущего зеркала, источник тока (и контролировать амплитуду).
Arduino на самом деле не говорит, какой конкретно микроконтроллер, но я думаю, что все Arduino, о которых я знаю, имеют программируемый блок ШИМ, так что вам вообще не нужно тратить ЦП на генерацию сигнала.
Подробнее о различных способах использования блока ШИМ см. в этом ответе , но суть такова:
Вы можете запрограммировать период вашего ШИМ, то есть частоту выходного сигнала.
Чтобы отрегулировать напряжение, которое вы подаете на динамик, вы можете пойти разными путями:
Другой, и, вероятно, самый простой способ — вообще не связывать микроконтроллер с генерацией аналогового сигнала, а использовать для этого аудио ЦАП. Эти устройства принимают последовательные данные, обычно через SPI/I2S, и часто даже имеют встроенные усилители.
Например, платы ST Discovery используют для этой работы микросхему CS43L22 . Вы просто отправляете цифровые аудиоданные, и они генерируют звук. На самом деле, у него даже есть блок генерации звукового сигнала, если вам лень писать сигнал звукового сигнала через интерфейс I2S!
Существует множество других вариантов, таких как микросхемы преобразователя напряжения в частоту, периодическое управление схемой резервуара/генератора и т. д., но я думаю, что это могут быть наиболее дружественные к Arduino подходы.
ккстроник