LM1972 — цифровой регулятор громкости (Arduino)

ИМС LM1972 — двухканальный цифровой регулятор громкости. Диапазон регулировки громкости от 0 до -78 дБ, с шагом 0,5 дБ от 0 до -48 дБ и 1 дБ от -48 до -78 дБ. Имеется функция отключения звука MUTE до уровня -104 дБ. Управление осуществляется 3-х проводным интерфейсом (SPI).

Основные параметры регулятора громкости на LM1972:

  • Коэффициент нелинейных искажений … 0.003% (мин.) / 0.0008% (типовое значение)
  • Частотная характеристика … 100 кГц (3 дБ) (мин)
  • Регулировка громкости … 78 дБ (типовое значение)
  • Отношение сигнал/шум … 110 дБ (мин) / 120 дБ (типовое значение)
  • Разделение каналов … 100 дБ (мин) / 110 дБ (типовое значение)
  • Уровень MUTE … 104 дБ (типовое значение)
  • Ошибка шага регулирования не более 0,05 дБ от 0 до -48 дБ и 0,25 дБ от -48 до -78 дБ
  • Напряжение питания двух полярное VDD–VSS = 15 В (макс), рекомендуемое VDD–VSS  = 12 В (VDD = +6 В / VSS = -6 В )
  • Входное сопротивление … 40 кОм
  • Выходное сопротивление … 25 кОм — 35 кОм

Имеется возможность использования более чем одной LM1972, как одновременной регулировкой громкости всех микросхем (параллельное подключение к 3-х проводной цифровой шине), так и независимое для каждой микросхемы (используется вывод DATA_OUT) — подробней в даташите lm1972.pdf.

Для управления LM1972 при помощи платы Arduino Nano можно использовать тестовый скетч:

#define CS    2  // LOAD PIN 10  LM1972
#define CLK   3  // SCLK PIN 9   LM1972
#define DATA  4  // DATA PIN 11  LM1972

void setup() {
  Serial.begin(9600);
  pinMode(CS,OUTPUT);
  pinMode(CLK,OUTPUT);
  pinMode(DATA,OUTPUT);
  delay(100);
}

void loop() {
delay(1000);
  LM1972Write(0, 0); // CH0 , 0dB
  LM1972Write(1, 0); // CH1 , 0dB
  // channel 0 = 0x00, 1 = 0x01
  // att = 0dB...-78dB = int 0...126 (0...-48 step 0.5dB, -48...-78 step 1dB) /// int 255 = MUTE
}

void LM1972Write(byte ch, byte att){  
  digitalWrite(CLK,LOW);delay(1);digitalWrite(CS,LOW);
     for(int i = 7; i >= 0; i--){
        digitalWrite(DATA, (ch >> i) & 0x01);
        digitalWrite(CLK,HIGH);digitalWrite(CLK,LOW);}
     for(int i = 7; i >= 0; i--){
        digitalWrite(DATA, (att >> i) & 0x01);
        digitalWrite(CLK,HIGH);digitalWrite(CLK,LOW);}
        digitalWrite(CS,HIGH);delay(1);
}

Функция LM1972Write() позволяет управлять громкостью отдельно для каждого канала. 

LM1972Write(0, 0); // канал 0, громкость 0 дБ

LM1972Write(1, 0); //  канал 1, громкость 0 дБ

Так как выход LM1972 имеет высокое сопротивление, то подключать к выходу низкоомную нагрузку нельзя, вход последующего каскада усиления должен иметь большой входное сопротивление. Так же рекомендуется использовать для входа отдельные земли (не соединять с общей землей) GND1 и GDN2, отдельные для входа IN1 и IN2.

Форум — http://forum.rcl-radio.ru/viewtopic.php?id=248

Добавить комментарий

Войти с помощью: