Аудиоусилитель, управляющий громкостью с помощью Arduino?

Я создаю проект, который выводит звук через Arduino на компьютерный динамик с питанием. Этот звуковой сигнал исходит из таблицы синусоидальной волны, которую я просматриваю на разных частотах, устанавливая вывод ШИМ в wave_table[0], затем wave_table[1] и т. д.

Я хотел бы модулировать громкость этого сигнала, но я не хочу просто делить значение волновой таблицы на целое число, потому что я беспокоюсь, что это исказит звук — вместо диапазона 0-255. для синусоиды это может быть, например, только 0-3, и тогда это уже не хорошая форма синусоиды.

Есть ли способ, которым я могу использовать второй контакт Arduino PWM для управления усилителем, чтобы изменить аналоговый сигнал, поступающий от Arduino, чтобы изменить громкость, прежде чем он попадет в динамик?

Спасибо!!

Почему бы не запустить ШИМ быстрее и не использовать один и тот же образец несколько раз?
Какие звуковые частоты вы пытаетесь воспроизвести?
Да, деление входной таблицы искажает сигнал. 8-битный PWM дает вам только 48 дБ SNR для начала, и каждое деление на 2 снижает его еще на 6 дБ. Вот почему вы не видели 8-битных ЦАП в компьютерных звуковых картах с начала 1990-х годов.
Кстати, вы в курсе, что высококачественные аудиочипы ЦАП легко доступны, которые будут принимать цифровую волновую таблицу по общей шине, верно? I²S распространен, но вы, вероятно, также можете найти версии I²C или SPI. Вы даже можете найти один со встроенным регулятором громкости.

Ответы (2)

Вероятно, вы можете использовать второй ШИМ для генерации напряжения, а затем отправить его в VCA, или получить внешний цифровой потенциометр (DPOT) и использовать его для изменения коэффициента усиления операционного усилителя, если вы хотите добавить дополнительные микросхемы. Однако, если вам не нужно столько уровней громкости и у вас уже есть несколько аппаратных ШИМ на Arduino, вы можете просто соединить их вместе через несколько последовательных резисторов, чтобы создать летнюю схему. Предполагая, что ваш компьютерный динамик имеет встроенный усилитель с высоким входным сопротивлением, вы сможете добавить несколько (например, 4) ШИМ-выходов вместе через резисторы 1K.

Пока ШИМ были синхронизированы, какими они должны быть, вы должны получить 1/4, 2/4, 3/4 и полную амплитуду, используя 4 канала (например). Просто заставьте их все генерировать одно и то же и отключите некоторые ШИМ (установив для них цифровой 0), если хотите уменьшить громкость.

[РЕДАКТИРОВАТЬ] На самом деле, если подумать над проблемой еще немного, вы можете сделать это с еще меньшим аппаратным обеспечением, если будете использовать цифровые выходы в качестве затухания. Рассмотрим следующую схему:

схематический

смоделируйте эту схему - схема, созданная с помощью CircuitLab

Каждый цифровой ввод-вывод в основном дает вам один бит управления громкостью, и вы можете получить столько битов, сколько у вас есть дополнительных вводов-выводов. Ваша самая высокая громкость будет со всеми цифровыми входами/выходами, установленными на «high-Z» или вход, так как ваш усилитель будет просто видеть ШИМ. Установка любого из цифровых входов/выходов на выход со значением '0' приведет к ослаблению сигнала (например, если цифровой 0 выводит '0', ваш аудиосигнал будет ослаблен на 50% из-за деления напряжения). в приведенном выше случае у вас будет 8 уровней громкости, но вы можете легко расширить схему, если вам нужно больше битов. Вы также можете сделать его логарифмическим, тщательно подобрав номиналы резисторов.

интересно - могу ли я использовать цифровой потенциометр и использовать его в делителе напряжения? В любом случае мне нужен делитель напряжения, чтобы понизить напряжение с 5 до 0,5 В.
Да, вы можете использовать цифровой потенциометр в качестве делителя напряжения или просто использовать его в качестве резистора с цифровым управлением для установки коэффициента усиления в схеме операционного усилителя.
@Zuofu: изменение уровня громкости в программном обеспечении, вероятно, не сработает. Человеческие уши реагируют в логарифмическом масштабе, поэтому вам нужно много «битов», чтобы играть с ними. Предположительно полномасштабный сигнал выходит из системы где-то около 90 дБ SPL. Если OP необходимо снизить до библиотечных уровней (30 дБ), вам нужно разделить сгенерированный сигнал на 1000, оставив при этом достаточный динамический диапазон, чтобы сигнал не попал в шумовой порог. Нет, digpot или VCA — гораздо лучший план. Суммированные ШИМ все еще могут быть полезны для получения SNR> 48 дБ, хотя вы получаете только один 8-битный ШИМ.
Вы можете поиграть со значением резисторов, если хотите, чтобы выход был каким-то образом взвешен. Это будет не очень качественно, но есть некоторая ценность в разработке схем с использованием оборудования, которое уже было куплено и оплачено без добавления в спецификацию. Старые синтезаторные чипы, подобные тем, что использовались на ранних игровых консолях, в основном используют те же приемы.

Вы можете использовать потенциометр с цифровым управлением между выходом фильтра и аудиовходом. Вот пример использования DS1669. ( http://pdfserv.maximintegrated.com/en/ds/DS1669.pdf)http://pdfserv.maximintegrated.com/en/ds/DS1669.pdf

введите описание изображения здесь