• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Выбор I2S DAC + amplifier

sharikov

Active member
Что поставить на вывод звука ?
Хочется интегральный I2S Digital input class D amplifier но доступных чипов мощностью 3-5W с 5V питанием что-то не попадается (на 20++W - без проблем например TAS5707). Чипы есть но либо неприлично дороги, либо нет в продаже, либо корпус bga с шагом 0,4

По доступности проще поставить раздельно Dac + amplifier из серии PAM8xxx но это какой то анахронизм получится.
Тут вопрос: какой тысяч моделей dac лучше выбрать (главное - легкодоступный) ?

Неужели китайцы не наклепали цифровых аудио-усилителей ?
 

pvvx

Активный участник сообщества
Неужели китайцы не наклепали цифровых аудио-усилителей ?
Нет. Проблема кроется в корпусах микросхем, а не самих чипах. Из SOIC и прочего легкопаяющегося на кухне и на свалках со складов производителей микросхем есть только динозавры DAС, применявшиеся в 2000-м году. А новые модули, собранные по современным технологиям, будут дороги, т.к. продажи на али не превышают тысячи штук в год.
Посмотрите аналогичное в телефонах и прочей старой технике (ноутах и т.д.)...
TDA1543 по 10 руб...
Полный набор ALC5627 - 160 руб... http://opendevices.ru/wp-content/uploads/2011/11/alc5627_datasheet_1.2.pdf

ALC5621 (28 руб) - I2S Audio Codec + 2.6W Class-AB/D Mono Speaker Amplifier + Headphone Amplifier
ALC5622 - I2S Audio Codec + 2.6W Class-AB/D Mono Speaker Amplifier
....

Берите набором PAM8303/8403 + I2S DAC :)


ALC5626 (али ~35 руб) I2S Audio DAC + Headphone and Stereo Class-AB/D Speaker Amplifier

ALC5627 (али ~30 руб) I2S/PCM Stereo DAC + Multiple Analog Inputs, Headphone, and Mono Class-D Speaker Amplifier
 
Последнее редактирование:

pvvx

Активный участник сообщества
Напомню еще раз про недорогой и распространенный DAC:
ESP8266 I2S MP3 webradio streaming example
Простой и удобный (не требуется тактовый генератор).
Есть на том же ALI.
Он дороже других одиночных DAC для I2S. Нет выхода на динамики. На RTL не требуется PLL. CLK дает сам RTL. Так-же на RTL есть аппаратный I2C для управления кодеками. Так-же у RTL есть возможности вывода напрямую 4-х каналов на Digital выход каскада class D с передескретизацией на несущую в 83MHz. Декодирование MP3 на RTL в стерео по 24-ре бита занимает 60% производительности и не мешает работе WiFi и других приложений.
Называется "зачем козе баян"?
 

goodwin

Member
Не все так просто, если нужна не "хрюкалка", а более-менее достойный звук.
В CLK, который выдает RTL, присутствует большой джиттер. Он не может не присутствовать,
ибо этот CLK генерится с помощью PLL. Этот джиттер превращает звук с любого, даже супер-пупер "другого одиночного DAC для I2S" в полное дерьмо.
Для того и пользуют в нормальном аудио отдельные генераторы с малым джиттером для сетки 44.1кгц и для сетки 48кгц.
Я много чего пощупал, чтобы было и максимально просто, и паябельно, и дешево, и хорошо звучало с автоакустикой 4*25 Вт.
Остановился на UDA1334ATS + LPC1758, ибо в "ATS" имеется встроенный тактовый генератор, с подстройкой частоты и фазы по сигналу "WS". За счет интегрирования в цепи подстройки получается вполне достойное качество. Цена - меньше 1 бакса. Обвязки минимум.
Требуется всего два(!) сигнала I2S - WS (word select) и Data.
Ну еще до-кучи сигнал "mute" c GPIO, чтобы без плавно без щелчков выключать/включать звук.
К нему добавить тот же PAM8303 или какой-нить копеечный аналоговый TDAxxxx для более притязательных слушателей.
Кстати, в LPC1758 декодирование стерео MP3 c USB флэшки при битрейте 320 заняло около 65% ресурсов при тактовой 72 МГц. Что позволило добавить цифровой регулируемый "фильтр присутствия". В RTL наверное можно и программный регулятор громкости прикрутить вместе с "темброблоком"...

TDA1543, кстати, не прокатил по тем же критериям. К тому же там нужен дополнительный активный фильтр на выходе, который в UDA уже встроен.


Топикстартеру может подойти, например, CS43L22 (применяется в STM32F4DISCOVERY).
https://www.cirrus.com/cn/pubs/proDatasheet/CS43L22_F2.pdf
Но там QFN40 и лошадиная цена в розницу.
О чем, собственно, и было сказано в стартовом топике...

PS: В связи с особенностью UDA пришлось изобразить вот такой "финт ушами"
при произвольном изменении sample rate, чтобы не рвалась цепь OC ФАПЧ
(не было щелчков):
Код:
void  SetI2S_SR(int sr)
{
  int beg;
  int end=0;
  if (CurrSR==sr) return;
  CurrSR=sr;
  beg = I2S->I2STXBITRATE & 0x003F ;  // текущий делитель

if (sr % 1000) 
      {
       I2S->I2STXRATE = 256*53+169;  //11.2896  //72 mhz   // нечетное
      }
   else
      {
       I2S->I2STXRATE = 256*71+208;       //12.288   //72 mhz
      }
   Host_DelayMS(2);
   switch(sr)
    {
     case 8000:
      end=47;
      break;
     case 12000:
      end=31;
      break;
     case 16000:
      end=23;
      break;
     case 24000:
      end=15;
      break;
     case 32000:
      end=11;
      break;
     case 48000:
      end=7;
      break;
     case 11025:
      end=31;
      break;
     case 22050:
      end=15;
      break;
     case 44100:
      end=7;
      break;
     case 96000:   // в железе не поддержано (нога UDA на GND)
      end=3;
      break;
 
      default:  end=23; 
     }
  if (end == beg) return;
  if (end > beg)
    {
     for(; beg <= end; beg++)
      {
        I2S->I2STXBITRATE= beg;
        Host_DelayMS(2);
      }
    }
   else
    {
     for (; beg >= end; beg--)
      {
        I2S->I2STXBITRATE= beg;
        Host_DelayMS(2);
      }
    }
}
 
Последнее редактирование:

pvvx

Активный участник сообщества
Не все так просто, если нужна не "хрюкалка", а более-менее достойный звук.
В CLK, который выдает RTL, присутствует большой джиттер. Он не может не присутствовать,
ибо этот CLK генерится с помощью PLL. Этот джиттер превращает звук с любого, даже супер-пупер "другого одиночного DAC для I2S" в полное дерьмо.
Для того и пользуют в нормальном аудио отдельные генераторы с малым джиттером для сетки 44.1кгц и для сетки 48кгц.
Я много чего пощупал, чтобы было и максимально просто, и паябельно, и дешево, и хорошо звучало с автоакустикой 4*25 Вт.
Начните с начала - с источника потока. MP3 Радио :) :) Потом битрейт радио... Далее как работает decodec MP3.. Затем как работает усилок класса D.
 
Последнее редактирование:

goodwin

Member
Ну у меня там еще стандартный CD WAV - 2 * 16 бит * 48 кГц крутится.
Типа для эстетов ;)
Дело даже не в качестве исходного сигнала и искажениях DAC. Дело в сильном шуме, который возникает при малейшем джиттере тактового сигнала в этих "одиночных" AЦП.
C UDA уровень шума в паузах при прибавленной до конца громкости субъективно не обнаруживается вообще, в отличие от встроенного в "гавнитолу" CD привода.
 
Последнее редактирование:

pvvx

Активный участник сообщества
В UDA1334ATS сколько бит в самом DAC? Один? :)
 

pvvx

Активный участник сообщества
Ну у меня там еще стандартный CD WAV 2 * 16 бит * 48 кГц крутится.
Типа для эстетов ;)
Дело даже не в качестве исходного сигнала и искажениях DAC. Дело в сильном шуме, который возникает при малейшем джиттере тактового сигнала в этих "одиночных" AЦП.
Всё правильно - у них у всех у DAC всего 1 бит - ключ.
C UDA уровень шума при прибавленной до конца громкости субъективно не обнаруживается вообще, в отличие от встроенного в "гавнитолу" CD привода.
Скорее всего сказывается согласование - у него на выход ОУ с фильтром и наверно правильно развели цепи по питанию, а у других взяли текстолит с тонкой медью и большим сопротивлением, да тонкими дорожками без фильтрации цифрового питания...
Если звук уже оцифрован, то нет никакого смысла его выгонять в аналог, а потом опять на ШИМ/Дельта-Сигму в динамик...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Ну да 1 бит, дельта-сигма. Как и туева хуча остальных звуковых ЦАП.
AD5790 20bit $67.50 1 channel - и это минимум.
Тогда зачем переводить из одной частоты дельта-сигма на выход, потом опять на вход дельта-сигма и далее на ключи динамика? Чтобы поймать биения таковых этих устройств, да добавить шумов?
Амплитудка выходная у DAC мала. Пайка - термоконтакт - шумит прекрасно. Наводок в городе на кусочек провода платы уже на уровне 16 бит в экране... Далее это опять оцифровывать - вносить искажения и на динамик :) Классная затея - мне нравиться. :)
 
Последнее редактирование:

goodwin

Member
Такие для звука пользуют только "ламповики-затейники", вкупе с проводами из бескислородной меди в шерстяной оплетке из горной ламы, протянутыми строго с севера на юг ;)
 

goodwin

Member
Увы, имеющихся на борту 83 МГц, чтобы напрямую заШИМить звуковой сигнал с 16 бит разрешением сильно мало...
 

pvvx

Активный участник сообщества
Такие для звука пользуют только "ламповики-затейники", вкупе с проводами из бескислородной меди в шерстяной оплетке из горной ламы, протянутыми строго с севера на юг ;)
Не - лампы не пойдут. У них нелинейная характеристика по передаче и микрофонный эффект + влияние ифк от колебаний. - Это что - не дышать и звук не включать?
Увы, имеющихся на борту 83 МГц, чтобы напрямую заШИМить звуковой сигнал с 16 бит разрешением сильно мало...
Для радио - потянет.
 

mikush

New member
получил alc5628, брал так как вроде простой. мало пинов. не нужен кварц. :confused:мне не поддался. по i2c не отвечает.
чип менял, уровни смотрел и ни как
 
Последнее редактирование:

Vladimir_Putin

New member
получил alc5628, брал так как вроде простой. мало пинов. не нужен кварц. :confused:мне не поддался. по i2c не отвечает.
чип менял, уровни смотрел и ни как
Отвечает она по I2C только при наличии синхронизации. Читать между строк надо описание микросхемы.
Отвечать будет при двух условиях:
1. Стоит кварц и разрешен, или подан сигнал подан меандр на вход XTI
2. В регистре Reg-42h: Global Clock Control разрешено тактирование от BCLK (когда идут данные по I2S).
После сброса он автоматически выбирает тактирование от XTI.

Чтобы сильно не колбасить плату, рекомендую замкнуть выводы 7 и 8 (XTI и SDAC). Для инициализации микрухи сперва подать тактовый сигнал на SDAC от какого-нибудь таймера, переключить тактирование от BCLK и потом настроить I2S. Как бы у неня всё заработало.
 

slonspb

New member
Отвечает она по I2C только при наличии синхронизации. Читать между строк надо описание микросхемы.
Как вы догадались до этого?! Магия просто! Это единственное упоминание на весь интернет, как запускать alc5628!

Вопрос ещё плз
- вход запрещения OSC_EN pin15, оставлять float, не подключённым?
- какой частоты меандр загонять в XTI, примерно, порядок, мегагерца хватит?
- если я переключу Reg-42h[14] =1 на BCLK, и не подам сам BCLK, то у меня i2c тут же отвалится?
- и всётаки непонятно, как вы догадались, где там всё это между строк :)
Спасибо!
[у меня не стартует, в первом же пакете i2c_read(0х30,0х00) нет ACK, всё перепробовал]
 
Последнее редактирование:
Сверху Снизу