Как подключить регулятор громкости M62429 к Arduino
Микросхема M62429 предназначена для снижения громкости звука в электрических схемах. Микросхема позволяет управлять одновременно и независимо двумя звуковыми каналами. Диапазон регулировки звука – от 0 до −83 дБ, т.е. микросхема способна ослаблять уровень громкости примерно в 100000 раз.
Нам понадобятся:
- Arduino UNO или иная совместимая плата;
- цифровой потенциометр M62429 в корпусе DIP8 или в корпусе SOP8;
- соединительные провода (рекомендую вот такой набор);
- макетная плата (breadboard);
- персональный компьютер со средой разработки Arduino IDE.
1Описание регулятора громкостиM62429
Микросхема M62429 выполняется в двух типах корпусов – DIP-8 (8P4) и SOP-8 (8P2S-A). Назначение выводов для обоих типов корпусов приведена на рисунке. Как видно, тут имеется два входа (VIN1, VIN2) и два выхода (VOUT1, VOUT2) для звуковых каналов, питание и земля (VCC и GND), а также две управляющие ножки (DATA и CLOCK).
Питание микросхемы осуществляется напряжением от 4,5 до 5,5 В (абсолютный максимум – 6 вольт).
Вот так выглядит микросхема в выводном корпусе:
У меня микросхема в корпусе для поверхностного монтажа. К такой микросхеме сложно подключиться без пайки, поэтому для тестирования я буду использовать вот такой переходник с корпуса SOP-8 на соединители типа PLS:
2Схема подключения микросхемы M62429 к Arduino
Подключим микросхему к Arduino и к микрофону вот по такой схеме:
Производитель рекомендует стабилизировать вход питания VCC с помощью развязывающего конденсатора (соединить вход питания с землёй через ёмкость 0,1…0,33 мкФ).
Также производитель рекомендует поставить на вход электролитический конденсатор ёмкостью 2,2 мкФ (схему см. на последней странице технического описания).
Микрофон и динамик на схеме изображены условно просто чтобы показать, что на вход VIN1 микросхемы M62429 подаётся выход с микрофона или иного источника аудиосигнала, а выход – далее в электрическую цепь и на устройство воспроизведения звука.
3Описание последовательного сигнала управления регулятором громкости M62429
Для управления микросхемой M62429 используется последовательный интерфейс с пакетной передачей данных. Длина одного пакета данных – 11 бит. Структура пакета приведена на рисунке.
Первым битом передаётся номер канала, вторым – использовать ли независимое управление каналами или одновременное, далее 7 бит отведены под код громкости, и завершают пакет два бита, равные "1".
Важно знать параметры импульсов частоты и данных. Микросхема управляется меандром (скважность равна 2), минимальная длительность импульса tWHC (как и tWLC) – 1,6 мкс, а период tcr – 4 мкс. Остальные характеристики импульсов приводятся в техническом описании (datasheet), которое можно скачать по ссылкам ниже.
4Скетч для управления микросхемой M62429 с помощью Arduino
Зная всё это, напишем скетч, который будет изменять громкость регулятора от максимума до минимума со скоростью 1 децибел в секунду. Сердце программы – процедура setVolume() и два массива кодов громкости, которые составлены из двух таблиц кодов громкости в техническом описании (таблицы "Volume Code").
Скетч управления регулятором громкости M62429 (разворачивается)
const int CLK = 4; const int DATA = 2; const int twhc = 2; const int twlc = 2; // Коды громкости аттенюатора 1. // Значения кодов - из таблицы кодов громкости из технического описания. int att1[21][5] = { {1, 0, 1, 0, 1}, //-0db {0, 0, 1, 0, 1}, //-4db {1, 1, 0, 0, 1}, //-8db {0, 1, 0, 0, 1}, //-12db {1, 0, 0, 0, 1}, //-16db {0, 0, 0, 0, 1}, //-20db {1, 1, 1, 1, 0}, //-24db {0, 1, 1, 1, 0}, //-28db {1, 0, 1, 1, 0}, //-32db {0, 0, 1, 1, 0}, //-36db {1, 1, 0, 1, 0}, //-40db {0, 1, 0, 1, 0}, //-44db {1, 0, 0, 1, 0}, //-48db {0, 0, 0, 1, 0}, //-52db {1, 1, 1, 0, 0}, //-56db {0, 1, 1, 0, 0}, //-60db {1, 0, 1, 0, 0}, //-64db {0, 0, 1, 0, 0}, //-68db {1, 1, 0, 0, 0}, //-72db {0, 1, 0, 0, 0}, //-76db {1, 0, 0, 0, 0} //-80db }; // Коды громкости аттенюатора 2 int att2[4][2] = { {1, 1}, //-0db {0, 1}, //-1db {1, 0}, //-2db {0 ,0} //-3db }; void setup() { pinMode(DATA, OUTPUT); pinMode(CLK, OUTPUT); digitalWrite(DATA, HIGH); digitalWrite(CLK, LOW); delay(1000); } void loop() { // Ежесекундно уменьшаем громкость на 1 дБ, // по достижении -83 дБ начинаем с начала: for (int db=0; db>=-83; db-=1){ setVolume(0, true, db); delay(1000); } delay(2000); } // Задаёт уровень громкости в заданном канале. // channel – канал, 0 или 1; // independent – управление одним каналом (true) или обоими сразу (false); // decibels – ослабление громкости в децибелах, от 0 до -83. void setVolume(int channel, bool independent, int decibels) { // Определяем значения аттенюаторов: int att1index = floor(abs(decibels) / 4); int att2index = abs(decibels) % 4; // Задаём в пакете канал: digitalWrite(DATA, (bool)channel); digitalWrite(CLK, HIGH); digitalWrite(DATA, LOW); digitalWrite(CLK, LOW); // Задаём одновременное или независимое управление каналами: digitalWrite(DATA, independent); digitalWrite(CLK, HIGH); digitalWrite(DATA, LOW); digitalWrite(CLK, LOW); // Задаём значение 1-го аттенюатора D2..D6: for (int i=0; i<5; i++) { digitalWrite(DATA, (bool)att1[att1index][i]); digitalWrite(CLK, HIGH); digitalWrite(DATA, LOW); digitalWrite(CLK, LOW); } // Задаём значение 2-го аттенюатора D7..D8: for (int i=0; i<2; i++) { digitalWrite(DATA, (bool)att2[att2index][i]); digitalWrite(CLK, HIGH); digitalWrite(DATA, LOW); digitalWrite(CLK, LOW); } // Два последних бита пакета – две единицы: digitalWrite(DATA, HIGH); digitalWrite(CLK, HIGH); delayMicroseconds(twhc); digitalWrite(DATA, LOW); digitalWrite(CLK, LOW); delayMicroseconds(twlc); digitalWrite(DATA, HIGH); digitalWrite(CLK, HIGH); delayMicroseconds(twhc); digitalWrite(CLK, LOW); digitalWrite(DATA, LOW); delayMicroseconds(twlc); }
Замечу, что в децибелах задавать ослабление громкости не всегда удобно. Можно сделать процедуру, принимающую, допустим, уровень громкости. Типа такого: setVolumeInPercent(0, true, 35), где 0 – второй канал, true говорит о независимом управлении каналами, а 35 – уровень громкости в процентах от максимального (или же наоборот – уровень ослабления аттенюатора).
Загрузим скетч в память Arduino и посмотрим на результат. Я подключил осциллограф к каналам CLOCK и DATA для демонстрации.
Фиолетовый сигнал – CLOCK, зелёный – DATA.
А вот как выглядит осциллограмма напряжения на выходе VOUT1 микросхемы M62429, отображённая на экране осциллографа DSO138.
Скачать техническое описание на микросхему M62429 можно в конце статьи (перезалито).
Скачать вложения:
- Скачать техническое описание на микросхему M62429 (1086 Скачиваний)