Думаю, каждый, кто занимался сборкой усилителя, сталкивался с выбором регулятора громкости для своего творения. В этой статье я хочу предложить свой вариант решения – цифровой регулятор громкости с опторазвязкой цифровой и аналоговой части.
Содержание статьи / Table Of Contents
Первое, что встречает на своём пути звуковой сигнал в усилителе, это входной буфер и регулятор громкости. С них я и решил начать. Поскольку усилитель планируется довольно большой (моноблок на 4 канала по ~100 Ватт), то размещать переменный резистор на передней панели и тянуть к нему проводку через весь корпус не хотелось, да и 4-канальный переменник ещё найти надо.
Вторая идея – использовать цифровые резисторы. Однако чипы найти оказалось непросто, да и цена у них тоже не маленькая.
Идея третья – взять готовый цифровой аудиопроцессор типа TDA7313. Идея неплохая. Вытравил печатку, запаял, подключил и не понравилось. Что-то со звуком было не то: появился какой-то неприятный окрас. Да и функционал TDA7313 для меня излишен. Регулятор тембра мне не нужен и мультиплексор тоже.
Идея четвертая – регулятор на релюшках, известный как «регулятор Никитина». Не пошёл по причине отсутствия достаточного количества особых реле и точных резисторов.
И решил я придумать чего-нибудь сам.
↑ Суть идеи
Придумал следующее (в интернете аналогов не нашёл, а если и есть то это совпадение): аналоговый сигнал поступает на разделительный конденсатор C1 и операционный усилитель U1 (Рисунок 2), включённый по инвертирующей схеме с коэффициентом усиления 0.3, задаётся резисторами как R3/R2. Необходимость ослаблять сигнал выяснялась после сборки первого экспериментальной образца. Причина будет описана ниже. Далее сигнал подаётся на ключи управляемого микроконтроллером аттенюатора типа «R2R». Затем (Рисунок 3) на не инвертирующий усилитель (вторая половина U1) с коэффициентом усиления примерно 4 (1+ R29/R28) и далее по назначению, например, оконечный усилитель или, как в моем случае, кроссовер для биампинга.Рисунок 2. Входной буфер
Рисунок 3. Выходной буфер
↑ Подробнее об аттенюаторе
Делал я своё время генератор сигналов на ATmega8, где в качестве ЦАПа использовалась «R2R» матрица. Решил регуляторе применить нечто похожее.Опишу подробно старший разряд регулятора, остальные отличаются только порядковыми номерами элементов.
Входной сигнал через резистор R4 подаётся на элемент R2R матрицы (так как регулятор 6-битный – резисторы 6R2 и 6R1 соответственно). Управляется данный бит транзистором Q1, который при открытии шунтирует сигнал на землю. Резистор R5 запирает базу в отсутствии управляющего сигнала. Чтобы избежать проникновения помех из цифровой части, решил открывать транзистор через оптопару U3. Питание на транзистор оптопары подаётся через токоограничивающий резистор R6, ток диода ограничен резистором R7. Номиналы особо не подбирал, просто смотрел, чтобы по току укладываться в данные с даташитов. Оптопара отпирает транзистор при появлении логической единицы на соответствующем выходе сдвигового регистра U7. Небольшое замечание: для младшего бита резисторы 1R1 и 1R2 должны иметь одинаковый номинал равный 2R.
↑ Об управлении
Для управления работой регулятора применён микроконтроллер ATMega8, но можно использовать и любой другой МК, отвечающий следующим требованиям: три свободных линии порта ввода/вывода (clock для тактирования регистра, data для передачи данных и storage для фиксации данных). Ниже приведена функция, посылающая данные на сдвиговый регистр. На авторство не претендую, т.к. данный код можно встретить на сайте AVR devices. Ничего сложного в ней нет – цикл по числу передаваемых бит, в котором накладывается маска, для выделения одного бита и соответствующий вывод в порт, а в конце дёргаем строб для фиксации данных в регистре.Функция отправки данных в регистр под спойлером.
Стоит сказать, что данный аттенюатор работает в инверсном режиме относительно битов данных: при выводе в регистр значения «0» громкость будет максимальна, «63» – минимальна. Аттенюатор, при необходимости, легко масштабируется на некоторое число бит с увеличением количества ступеней регулирования.
На печатной плате младший разряд подведён к выводу Q1 регистра (а не Q0, как было бы логичнее), связано это с небольшими трудностями в разводке дорожек, так как Q0 находится на другой стороне микросхемы нежели выводы Q1-Q7. Имея это ввиду, следует сдвинуть выходной код в лево на один разряд («<< 1» в С или «shl 1» в Asm). В моей программе можно заметить сдвиг не в лево, а вправо связано это вот с чем: для управления у меня стоит механический энкодер и алгоритм его обсчёта изменяет переменную-счётчик на 4 за один щелчок, то есть изначально переменная громкости считается со сдвигом влево на 2 разряда.
↑ Впечатления
Сваять самому цифровой регулятор громкости мне было для начала просто интересно. Я не очень-то надеялся на успех и был приятно удивлён результатом. Спаял первую версию, подключил генератор и осциллограф и увидел, как с поворотом энкодера стала плавно падать амплитуда сигнала. Ура! Решил подключить к усилителю. И тут выяснилось, что при амплитуде, большей чем 1300 мВ нижняя полуволна начинает обрезаться. Связано это с пробоем транзистора обратным напряжением, о чем я сначала не подумал.Во второй версии появился входной буфер с коэффициентом усиления 0,3. Я посчитал, что для сигнала линейного уровня этого хватит, ведь напряжение пробоя для применённых транзисторов bc547 составляет 650 мВ и -650/0.3 = ок.2 Вольт, что вполне достаточно для работы с линейным выходом (итоговая допустимая входная амплитуда ограничена напряжением питания операционного усилителя +15 Вольт и -2 Вольта пробоем транзистора).
На слух разницы я не заметил по сравнению с обычным переменным резистором. Хорошо бы измерить коэффициент нелинейных искажений, но, к сожалению нечем. Думаю, данную конструкцию можно применять не только как регулятор уровня звукового сигнала, но и любого сигнала с соответствующей заменой ключевых транзисторов. Питание цифровой части +5 Вольт. Питание аналоговой части двуполярное ±15 Вольт желательно организовать от стабилизированного, отфильтрованного источника питания.
↑ Осциллограммы работы регулятора
Извиняюсь за качество фото, да и осциллографа получше тоже нет.↑ Об изготовлении и деталях
Плата получилась односторонняя 70х45 мм (рисунок 9). Стоит отметить, что на плате реализован один канал регулятора, соответственно, если нужно стерео необходимо изготовить две платы. Все микросхемы в DIP корпусах. Резисторы коллекторов оптопар 0.25 Ватт (можно и меньше), остальные 0805 SMD. Операционный усилитель хорошо бы использовать получше, в моем варианте AD822 (пробовал TL072 и разницы заметной не услышал).↑ Файлы
Полная схема и печатка: 🎁 Shema-pechatka.7z 160.5 Kb ⇣ 114Архив версии 1. Прошивка, исходники, модель для Proteus. Стартовая версия, вместо энкодера - кнопки. Реализовано только управление регулятором.
🎁 digitvolume_1v.7z 91.15 Kb ⇣ 65
Архив версии 2. Прошивка, исходники, модель для Proteus. Реализовано управление как с энкодера (PORTD 0 и PORTD 1) так и с обычных кнопок (PORTD 2 и PORTD 3), так же добавлена индикация на алфавитно цифровой цифровой дисплей подключаемый на PORTB, а также модель от протеуса с добавленным дисплеем.
🎁 digitvolume_2v.7z 74.85 Kb ⇣ 99
Памяти в контроллере осталось много, если кто-то будет собирать данную конструкцию, то сможете задействовать контроллер по полной, например добавить функцию часов или еще чего.
Программа для МК написана в Code Vision AVR.
Спасибо за внимание!
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.