Рейтинг@Mail.ru

Как подключить регулятор громкости M62429 к Arduino

автор:
12 comments Arduino
Print Friendly, PDF & Email

Микросхема M62429 предназначена для снижения громкости звука в электрических схемах. Микросхема позволяет управлять одновременно и независимо двумя звуковыми каналами. Диапазон регулировки звука – от 0 до −83 дБ, т.е. микросхема способна ослаблять уровень громкости примерно в 100000 раз.

Нам понадобятся:

1Описание регулятора громкостиM62429

Микросхема M62429 выполняется в двух типах корпусов – DIP-8 (8P4) и SOP-8 (8P2S-A). Назначение выводов для обоих типов корпусов приведена на рисунке. Как видно, тут имеется два входа (VIN1, VIN2) и два выхода (VOUT1, VOUT2) для звуковых каналов, питание и земля (VCC и GND), а также две управляющие ножки (DATA и CLOCK).

Питание микросхемы осуществляется напряжением от 4,5 до 5,5 В (абсолютный максимум – 6 вольт).

Расположение выводов на микросхеме M62429
Расположение выводов на микросхеме M62429

Вот так выглядит микросхема в выводном корпусе:

Микросхеме M62429 в DIP-корпусе
Микросхеме M62429 в DIP-корпусе

У меня микросхема в корпусе для поверхностного монтажа. К такой микросхеме сложно подключиться без пайки, поэтому для тестирования я буду использовать вот такой переходник с корпуса SOP-8 на соединители типа PLS:

Микросхема M62429 на плате-переходнике
Микросхема M62429 на плате-переходнике

2Схема подключения микросхемы M62429 к Arduino

Подключим микросхему к Arduino и к микрофону вот по такой схеме:

Схема подключения M62429 к Arduino
Схема подключения M62429 к Arduino

Производитель рекомендует стабилизировать вход питания VCC с помощью развязывающего конденсатора (соединить вход питания с землёй через ёмкость 0,1…0,33 мкФ).

Также производитель рекомендует поставить на вход электролитический конденсатор ёмкостью 2,2 мкФ (схему см. на последней странице технического описания).

Микрофон и динамик на схеме изображены условно просто чтобы показать, что на вход VIN1 микросхемы M62429 подаётся выход с микрофона или иного источника аудиосигнала, а выход – далее в электрическую цепь и на устройство воспроизведения звука.

3Описание последовательного сигнала управления регулятором громкости M62429

Для управления микросхемой M62429 используется последовательный интерфейс с пакетной передачей данных. Длина одного пакета данных – 11 бит. Структура пакета приведена на рисунке.

Структура пакета управления микросхемой M62429
Структура пакета управления микросхемой M62429

Первым битом передаётся номер канала, вторым – использовать ли независимое управление каналами или одновременное, далее 7 бит отведены под код громкости, и завершают пакет два бита, равные "1".

Важно знать параметры импульсов частоты и данных. Микросхема управляется меандром (скважность равна 2), минимальная длительность импульса tWHC (как и tWLC) – 1,6 мкс, а период tcr – 4 мкс. Остальные характеристики импульсов приводятся в техническом описании (datasheet), которое можно скачать по ссылкам ниже.

Временная диаграмма сигнала информационного обмена с микросхемой M62429
Временная диаграмма сигнала информационного обмена с микросхемой M62429

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 для демонстрации.

Информационный обмен Arduino с микросхемой M62429
Информационный обмен Arduino с микросхемой M62429

Фиолетовый сигнал – CLOCK, зелёный – DATA.

Осциллограмма информационного обмена Arduino с микросхемой M62429
Осциллограмма информационного обмена Arduino с микросхемой M62429

А вот как выглядит осциллограмма напряжения на выходе VOUT1 микросхемы M62429, отображённая на экране осциллографа DSO138.

Изменение напряжения на выходе микросхемы M62429
Изменение напряжения на выходе микросхемы M62429

Скачать техническое описание на микросхему M62429 можно в конце статьи (перезалито).

Управление регулятором громкости M62429
Last modified onПятница, 10 Январь 2020 17:40 Read 16206 times

Поблагодарить автора:

Поделиться

Print Friendly, PDF & Email

12 comments

  • Карачун
    Карачун Четверг, 10 Январь 2019 09:01 Ссылка на комментарий

    Вопрос может нубский, прошу подсказать... У меня собрана аудиосистема аудиоблютуз модуль + усилок. Все работает, но усилок без регулятора громкости (громкость можно регулировать только на аудиомодуле или со смарта, что не всегда удобно). Хочу добавить в систему цифровой регулятор громкости на базе данного чипа. В какую цепь его втукать? Между аудиомодулем и усилком или между усилком и колонками?

  • aave_1
    aave_1 Четверг, 10 Январь 2019 20:26 Ссылка на комментарий

    Между усилком и колонками лучше.

  • Ярослав
    Ярослав Пятница, 11 Январь 2019 05:58 Ссылка на комментарий

    Попробовал собрать по вашей схеме и скетчу....
    Подаю звук от смартфона (плеера, компьютера) на вход, на выходе обычные наушники. Это правильно или нужно через усилитель?
    Правда конденсаторы электролитические на 100 мкФ поставил из имеющихся (сегодня на 2,2 куплю, попробую)... Их кстати, надо и на вход и на выход ставить? Или только на вход?
    Не получил результата... Микросхемы заказывал на Али - может в них проблема?. Что должно быть, если просто подать питание (у вас звук есть или нет)?

  • Карачун
    Карачун Понедельник, 14 Январь 2019 04:03 Ссылка на комментарий

    Подскажите, а с чем связан именно такой выбор? Не любопытства ради, хочется понять.

  • aave2
    aave2 Вторник, 15 Январь 2019 19:58 Ссылка на комментарий

    Я делал проект "глушилки" микрофона, пробовал разные решения. Одно из них - с помощью цифрового потенциометра. Ну и результатами тут поделился.

  • RA4NCQ
    RA4NCQ Четверг, 31 Декабрь 2020 05:11 Ссылка на комментарий

    Подскажите, а можно постоянно сделать одну мощность, включив ее на микросхеме M62429? Нужно для переделки акустической системы.

  • aave1
    aave1 Четверг, 31 Декабрь 2020 13:11 Ссылка на комментарий

    RA4NCQ,
    к сожалению, нет. При выключении питания микросхема M62429 сбрасывает свои настройки.

  • Иван
    Иван Воскреснье, 03 Январь 2021 15:25 Ссылка на комментарий

    Спасибо за ответ! Наверное не правильно выразился. А как можно обойти данный регулятор M62429, который управляет сабвуфером? Будут стоять активные фильтры низких, средних и высоких частот по входу с регуляторами громкости. С уважением Иван.

  • aave1
    aave1 Воскреснье, 03 Январь 2021 16:45 Ссылка на комментарий

    Иван, в вашей системе микросхема M62429 уже стоит как регулятор громкости сабвуфера? А не пробовали найти аналог, который управляется аналогично, но который запоминает настройки? Мне о таком не известно, но возможно такой есть; об этом лучше на специализированных формах аудиофилов поинтересоваться. Тогда можно было бы просто заменить микросхему. Или ещё проще - вообще удалить данную микросхему и заменить резистором нужного номинала. Ведь по сути, микросхема M62429 это управляемый цифровым сигналом переменный резистор.

  • Иван
    Иван Понедельник, 04 Январь 2021 13:46 Ссылка на комментарий

    Спасибо за ответ! К сожалению обойти микросхему не получилось .... Видимо M62429 еще работает как усилитель. С уважением Иван. Всего доброго! 73!

  • Евгений
    Евгений Пятница, 28 Январь 2022 20:57 Ссылка на комментарий

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

  • aave1
    aave1 Пятница, 28 Январь 2022 22:51 Ссылка на комментарий

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

  1. Arduino это...
  2. Arduino это...
  3. Arduino это...
Отличный способ начать знакомство с электроникой, микроконтроллерами и программированием!
Замечательное средство для создания собственных электронных устройств, которые пригодятся в быту или для развлечения!
Уникальный конструктор, для которого разработаны десятки совместимых датчиков и модулей!
next
prev