TDA7317 – стереофонический 5-полосный эквалайзер (Arduino)

TDA7317 – стереофонический 5-полосный эквалайзер с цифровым управлением, позволяющий осуществлять регулировку уровня звука и тембра в пяти полосах 60 Гц, 260 Гц, 1 кГц, 3 кГц, 10 кГц. В связке с Arduino TDA7317 можно сделать функциональный предварительный усилитель с регулировкой тембра по пяти полосам, а если добавить аудиопроцессор например TDA7313 или TDA7318, то помимо регулировки тембра добавятся дополнительные функции, например коммутатор входов, регулятор громкости и баланса, предусилитель.

Технические характеристики TDA7317

  • Напряжение питания от 6 до 10 В (9 В рекомендуемое)
  • Ток потребления от 8 до 20 мА (в зависимости от напряжения питания)
  • Диапазон воспроизводимых частот от 20 до 20000 Гц
  • Шаг регулировки тембра 2 дБ (14 шагов от -7 до +7)
  • Максимальный уровень входного сигнала 2,5 В
  • КНИ на частоте 1 кГц не более 0,01 %
  • Отношение сигнал/шум 100 дБ
  • Разделение каналов на частоте 1 кГц 100 дБ
  • Регулировка громкости  -17.625 до 0 дБ (шаг 0.375, 47 шагов регулировки)

Рекомендуемая схема подключения

Библиотека https://github.com/liman324/TDA7317.git при помощи Arduino позволяет осуществлять регулировку параметров TDA7317.

Тестовый скетч

#include <Wire.h>
#include <TDA7317.h>
  TDA7317 tda;
 
void setup(){ 
  Serial.begin(9600);Wire.begin();
  audio();
}
 
void loop(){}
 
void audio(){
  tda.setVolume(47); // громкость 0...47
  tda.setBand(0,0);  // номер полосы, дБ (-7...+7)
  tda.setBand(1,0);
  tda.setBand(2,0);
  tda.setBand(3,0);
  tda.setBand(4,0);
}

Выход 18 (ADDR) ИМС TDA7317 при использовании данной библиотеки не замкнут на землю.

tda7317.pdf


Следующий пример скетча позволяет управлять 5- полосным эквалайзером при помощи энкодера  KY-040, информация о состоянии настроек эквалайзера выводится на LCD дисплея LCD1602 на базе контроллера HD44780.

При нажатии на кнопку и поворачивая ручку энкодера можно менять настройки регулировок эквалайзера по пяти полосам. Все настройки эквалайзера сохраняются в энергонезависимой памяти.

Плата Arduino Nano аудиопроцессор TDA7317 обмениваются данными на шине I2C по линиям SDA (data — данные) и SCL (clock — синхронизация).

Для работы скетча Вам понадобятся дополнительные библиотеки:

Плата Пин SDA Пин SCL
Arduino Uno, Nano, Pro и Pro Mini A4 A5
#include <Wire.h>
#include <TDA7317.h>
#include <MsTimer2.h>
#include <LiquidCrystal.h>
#include <Encoder.h>
#include <EEPROM.h>
  TDA7317 tda;
   Encoder myEnc(9, 8);//CLK, DT подключение энкодера
  LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 подключение LCD
   byte a1[8]={0b00000,0b11011,0b11011,0b11011,0b11011,0b11011,0b11011,0b00000};
   byte a2[8]={0b00000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b00000};
   unsigned long newPosition,time,oldPosition  = -999;
   int menu,w,z,band1,band1_d,band2,band2_d,band3,band3_d,band4,band4_d,band5,band5_d;
 
void setup(){ 
  Serial.begin(9600);Wire.begin();
   lcd.begin(16, 2);lcd.createChar(0,a1); lcd.createChar(1,a2);
   pinMode(A0,INPUT);// КНОПКА ЭНКОДЕРA
   MsTimer2::set(1, to_Timer);MsTimer2::start();
   band1 = EEPROM.read(0)-7;band2 = EEPROM.read(1)-7;band3 = EEPROM.read(2)-7;band4 = EEPROM.read(3)-7;band5 = EEPROM.read(4)-7;
   delay(500);audio();delay(100);
}
 
void to_Timer(){ //функция таймера
 newPosition = myEnc.read()/4;}
 
void loop(){
    if(analogRead(A0)<900){menu++;cl();myEnc.write(0);time=millis();w=1;if(menu>4){menu=0;}}// меню
 
//////////////////////////////// 60 Hz /////////////////////////////////////////////////////////
    if(menu==0){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    band1=band1+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(band1>7){band1=7;}if(band1<-7){band1=-7;}audio();} 
 
  lcd.setCursor(0,0);lcd.print("60 Hz    ");
  lcd.print(band1*2);lcd.setCursor(13,0);lcd.print("dB");band1_d=band1+7;
   if(band1_d>=0){for(z=0;z<=band1_d;z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}}}
 
////////////////////////////// 260 Hz //////////////////////////////////////////////////////////
    if(menu==1){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    band2=band2+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(band2>7){band2=7;}if(band2<-7){band2=-7;}audio();} 
 
  lcd.setCursor(0,0);lcd.print("260 Hz    ");
  lcd.print(band2*2);lcd.setCursor(13,0);lcd.print("dB");band2_d=band2+7;
   if(band2_d>=0){for(z=0;z<=band2_d;z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}}}
 
////////////////////////////// 1000 Hz //////////////////////////////////////////////////////////
    if(menu==2){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    band3=band3+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(band3>7){band3=7;}if(band3<-7){band3=-7;}audio();} 
 
  lcd.setCursor(0,0);lcd.print("1000 Hz   ");
  lcd.print(band3*2);lcd.setCursor(13,0);lcd.print("dB");band3_d=band3+7;
   if(band3_d>=0){for(z=0;z<=band3_d;z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}}}
 
////////////////////////////// 3000 Hz //////////////////////////////////////////////////////////
    if(menu==3){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    band4=band4+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(band4>7){band4=7;}if(band4<-7){band4=-7;}audio();} 
 
  lcd.setCursor(0,0);lcd.print("3000 Hz   ");
  lcd.print(band4*2);lcd.setCursor(13,0);lcd.print("dB");band4_d=band4+7;
   if(band4_d>=0){for(z=0;z<=band4_d;z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}}}  
 
////////////////////////////// 1000 Hz //////////////////////////////////////////////////////////
    if(menu==4){
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    band5=band5+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(band5>7){band5=7;}if(band5<-7){band5=-7;}audio();} 
 
  lcd.setCursor(0,0);lcd.print("10000 Hz  ");
  lcd.print(band5*2);lcd.setCursor(13,0);lcd.print("dB");band5_d=band5+7;
   if(band5_d>=0){for(z=0;z<=band5_d;z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}}}
//////////////////////////////////////////////////////////////////////////////////////////////////
 if(millis()-time>10000 && w==1){
     EEPROM.update(0,band1+7);
     EEPROM.update(1,band2+7);
     EEPROM.update(2,band3+7);
     EEPROM.update(3,band4+7);
     EEPROM.update(4,band5+7);
     cl();menu=0;w=0;}
}// loop
 
void cl(){delay(300);lcd.clear();} 
void audio(){
  tda.setVolume(47); // громкость 0...47
  /////////// номер полосы, дБ (-7...+7) //////////
  tda.setBand(0,band5);  // 10000 Hz
  tda.setBand(1,band2);  // 260   Hz
  tda.setBand(2,band3);  // 1000  Hz
  tda.setBand(3,band4);  // 3000  Hz
  tda.setBand(4,band1);  // 60    Hz
}

Comments

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

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