Питание

Начнем с питания. Чип имеет 3 питания. Digital 1.8V, 3.3V. Analog 3.3V или 5V. Причем 1.8V можно получить либо от внешнего либо от внутреннего источника питания. В зависимости куда подключен вывод LDDE. Если нога LDDE на 3V3 берется внутренний источник. Но на него надо внешне подключить конденсатор
Схема немного "паукообразная" и я как-то не так провел пальцем по линиям. Подключил наоборот. Пришлось добавить внешний LDO на 1V8. Резать дорожку под микросхемой QFN и подводить под нее сигнал не получилось

Сброс

Сброс и начало работы AK4452
Сброс и начало работы AK4452

Требуется подать 1 на PDN pin и после этого установить RSTN bit в регистре управления с аресом 00H

Код сброса AK4452
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
  HAL_Delay(100);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
  HAL_Delay(100);

/*
  for (int i=1; i<128; i++)
	{
	  
	   // the HAL wants a left aligned i2c address
	   // &hi2c1 is the handle
	   // (uint16_t)(i<<1) is the i2c address left aligned
	   // retries 2
	   // timeout 2

	  uint16_t addr = (uint16_t)(i<<1);
	  HAL_StatusTypeDef res = HAL_I2C_IsDeviceReady(&hi2c1, addr, 2, 50);
	  if (res == HAL_OK) {
      // i = 10 addr = 0x20 Находим адрес AK4452
		  printf("0x%X", i); // Received an ACK at that address
	  } else {
		  printf("Error", i); // Received an ACK at that address
	  }
	}
*/

Аттенюатор

В микросхеме есть регулятор уровня. Но к моему разочарованию использовать его можно только для сглаживания щелчка Mute. Имеется 256 уровней (8bit) с шагом 0.5db. Было бы здорово организовать аппаратный регулятор громкости на этом чипе. Пока не удалось это попробовать

Регистры

Коммуникация с AK4452 осуществляется по шине I2C выставлением на 13 пин 3V3. Есть возможность сконфигурировать SPI

13 pin I2C - Control Mode Select Pin

“L”: 3-wire serial control mode

“H”: I2C Bus serial control mode or Parallel control mode.

Для запуска AK4452 достаточно выставить только один регистр 00H
ACKS=1 - автоматически детектировать MCKL
DIF2-1=NNN - Выставить скорость обмена и формат данных
RSTN=1 - Надо сделать сброс внешней ногой PDN и потом выставить этот бит в 1 (см. Сброс и начало работы)

Таблица режимов и форматов данных
Таблица режимов и форматов данных

STM32 кроме I2S поддерживает так же LSB/MSB justified. Наверное режимы будут полезны для совместимости специальных контроллеров управления без I2S стандарта

Аналоговый выход

Преобразование дифференциального сигнала в сигнал с общей землей

Выход дифференциальный. Я взял сдвоенный ts922. Операционный усилитель не дорогой, может работать на наушники 32 Ом. Rail-to-rail, high output current, dual operational amplifier

На фильтры в обратной связи операционника я конечно забил, для простоты конструкции. Думаю в следующей итерации добавить, если она будет

Схемотехника

Отмечены ошибки и схема дополнительного внешнего питания 1V8. AOUTL1P Это положительный дифференциальный выход Левого канала, соответственно AOUTL1N отрицательный. P-positive N-negative. Неправильное соединение резисторов в цепи обратной связи для одного из каналов

Схема соединения AK4452 с аналоговой частью
Схема соединения AK4452 с аналоговой частью

Включив тест я получил на дифференциальных выходах AK4452 сдвинутую на 180 градусов синусоиды. На выходах была странная картина. Один вход обрезался

The analog outputs are full differential outputs and 2.8Vpp (typ, VREFH1 - VREFL1 = 5V) centered around VREFH/2. The differential outputs are summed externally, adding voltage VAOUT is calculated as (AOUT+) - (AOUT). If the summing gain is 1, the output range is 5.6Vpp (typ, VREFH1 - VREFL1= 5V). The bias voltage of the external summing circuit is supplied externally. PCM input data format is 2's complement. The output voltage (VAOUT) is a positive full scale for 7FFFFFH (@24bit) and a negative full scale for 800000H (@24bit). The ideal VAOUT is 0V for 000000H(@24bit)

Амплитуда на выходе AK4452 достигала около 2 вольта!

Дифференциальные выходы одного канала AK4452
Дифференциальные выходы одного канала AK4452
Выход LM358
Выход LM358

Даже заменил операционный усилитель на LM358 и уменьшил усиление изменением номиналов резисторов в обратной связи. Ничего не помогло

TS922
TS922

Посмотрел характеристики TS922 внимательнее и проблема очевидно крылась в ограничении характеристик по дифференциальному входу

The differential voltage is the non-inverting input terminal with respect to the inverting input terminal. If Vid±1 V, the maximum input current must not exceed ±1 mA. In this case (Vid > ±1 V), an input series resistor must be added to limit the input current

В референсном дизайне оценочной платы операционный усилитель видимо не имеет таких ограничений, поскольку питание операционного усилителя ДВУХПОЛЯРНОЕ и значительно выше питания самого AK4452. Поэтому проблем с перегрузкой нет

Выход или делать резисторный делитель или уменьшать VREFH или "гасить" программно через центр 0x80000 для 16bit и 0x800000 для 24bit. Но есть ещё поддержка 32bit см. Таблица режимов и форматов данных

VREFH значительно уменьшать не получится. VREFH1 min AVDD-0.5

Программно уменьшать это снижать разрядность или динамический диапазон, что не приемлемо

Остается поделить уровень сигнала до операционного усилителя

Следующая итерация

Попытка подружить ЦАП с Усилителем питаемым однополярным источником питания не получились. Посмотрел как это делают в Texas Instruments

Усилитель для наушников
Усилитель для наушников

Обратная связь по положительному и отрицательному входу дифференциального операционного усилителя различна. В одном случае она последовательная в другом параллельная, что в свою очередь влияет на входное сопротивление каждого из каналов. Чтобы исключить влияние этих входных сопротивлений/импедансов применяют согласовывающий буфер, для каждого входа

TI Solution
TI Solution

AKM еще и активные фильтры низких частот второго порядка добавили в буфер

AKM Solution
AKM Solution

Преобразователь двухполярного напряжения TPS65135 питает TPA6120A2. На сколько я понял, TPA6120A2 это популярная микросхема у аудиофилов

Небольшая ремарка. Питание будет только +5В/-5В

Подумал что может тогда и аналоговую часть ЦАП запитать +5В?

Analog Characteristics 5V
Analog Characteristics 5V
Analog Characteristics 3.3V
Analog Characteristics 3.3V

Коэффициент Нелинейных Искажений + Шум (THD+N) различается почти на 10dB

TPS61040
TPS61040

Не так давно заказывал TPS61040. Смущает, что изначально она проектировалась для питания светодиодов

The device is ideal to generate output voltages up to 28 V from a dual-cell NiMH/NiCd or a single-cell Li-Ion battery. The part can also be used to generate standard 3.3-V or 5-V to 12-V power conversions.

Для целей фильтрации питания после импульсных преобразователей есть специальный набор микросхем. Например LT3042. Правый край показывает величину подавление на частоте импульсного преобразователя, большинство из них работает на частоте 1..2 МГц. Левый край это сглаживание 50Гц-60Гц после выпрямителя блока питания

Вообще микросхема эта относительно дорогая. И для полного HiEnd надо запитать каждый канал от отдельного стабилизатора. Например в серии AK4490 наружу выведены отдельные пины, для питания левой и правой аналоговой части

Хотя в datasheet и показан общий источник, я встречал схемы питания именно с раздельными стабилизаторами для каждого канала и внутренних опорных напряжений. Это сделано чтобы снизить влияние между каналами. На сколько это оправдано и заметно на слух вопрос, но снятые АЧХ может показать влияние при определенных условиях

Питание VREF
Питание VREF

Для питания VREFHL/R в демо плате AKM применяется такое решение. Буферный усилитель (повторитель напряжения) 

Для сравнения характеристики подавления пульсаций в зависимости от частоты обычной LM1117

Если не получится кину перемычку и будет 3.3В как прежде. На всякий случай добавил фильтрующую LC цепочку на выход. Хотя это может быть источником дополнительных помех. Посмотрим..

Программная часть

Потратил время на выяснение почему не работает I2S через DMA при использовании HAL. Оказалось, что куб генерирует инициализацию в неверном порядке. Сначала надо MX_DMA_Init() а потом MX_I2S3_Init(); В комментариях наверное появятся рекомендации выкинуть HAL и писать в ручную. Но можно допустить такую ошибку и самому. Где-то в недрах мануалов должна быть описана эта ситуация. А вы знали о ней?

Исправление последовательности инициализации

DMA must be initialized before ADC peripheral, but generated code performs initialization in wrong order. It is well known minor flaw in default configuration of current STM32CubeIDE. Try to change

MX_GPIO_Init();
MX_I2S3_Init();
MX_DMA_Init(); // wrong order

to

MX_GPIO_Init();
MX_DMA_Init(); // right order
MX_I2S3_Init();

To make permanent changes,

  1. Open "Project Manager" (tab near Pinout / Clock Configuration)

  2. Project Manager → Advanced Settings → Generated Function Calls

  3. Use tiny arrow buttons near this list to move MX_DMA_Init() above MX_I2S3_Init()

  4. Save the project, generated code will have correct order

PCB

Отделил питание цифровой и аналоговой части на разные стабилизаторы. Взял AMS1117 3V3. Думаю хорошо бы подошел HT7833. AMS1117 у меня много для экспериментов, лента на 100 шт. Так же для устранения попадания паразитных частот от контроллера STM32, сделал "отдельную" аналоговую землю. Под ногами кварцевого резонатора убрал землю. Надо расположить в следующей итерации как можно ближе к STM32

Кварцевый резонатор
Кварцевый резонатор
Раздельное питание на цифровую и аналоговую часть
Раздельное питание на цифровую и аналоговую часть

PCB 2

Развел новый вариант на другом усилителе для наушников

Стабилизатора питания теперь три . На 3В, 5В и +5В/-5В. Точнее 3 источника питания HT7833, TPS61040 и TPS65135. Как то сложно для плеера, вы не находите?

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

Усилитель для наушников
Усилитель для наушников

Во первых столкнулся с сильным перегрузом выходного сигнала. На выходе R16, R17 не референсного значения. Перепаял на 75 Ом. Но это не особо помогло. По питанию была сильная помеха, в момент пиков. Я уже стал грешить на недостаточную емкость в фильтре питания, но все оказалось проще

Резистор 2.2КОм
Резистор 2.2КОм

R14-R15 стояли 2.2 КОм вместо 820 Ом. Можно сказать, что монтаж не соответствует схеме. Вместо усиления равного единице получается два-три. При этом изменение номиналов было только для отрицательного входа. R1-R4 тоже не соответствовали номиналу. Вместо 470 Ом стояли 120 Ом. Отдать под Электронный трибунал, за такую работу!

Вот такие сюрпризы

Помеха по питанию +5/-5 осталась 100 мВ/200 мВ

После того как я перепаял резисторы, все заиграло новыми чистыми красками. Сразу почувствовал, что наушников за 25$ не хватает. Бубнят они сильно. Небольшой звон тоже присутствует. Динамический диапазон чувствуется. Слабые звуки слышны отчетливо. Ощущение как в концертном зале со средненькой акустикой

Запустил плеер из урока STM Урок 46. I2S AUDIO. Часть 1

Пробовал stm32-i2s-examples. Пример без DMA, урок более грамотно составлен. Подозреваю часть взята из примера STMicroelectronics

Внешний усилитель
Внешний усилитель

На тот момент выглядело это так. Подумал перенести MP3 плеер Helix отсюда Программный декодер MP3(+). Переход на платформу STM32F407

Есть у производителя STM32 своя либа без исходных кодов, но оптимизированная. Интересно как реализована management of input signal volume with negative gains in range [-80 dB: 0 dB] with 0.5 dB. Можно ли это как полноценную регулировку уровня звука использовать?

Some features
  • MP3 encoder (MP3Enc): encoder for MPEG-1,2 or 2.5 formats (for layer 3 only) supporting fixed or free format bit rate for mono or stereo audio input streams.

  • Gain manager (GAM): management of input signal volume with negative gains in range [-80 dB: 0 dB] with 0.5 dB granularity without compression

  • Graphical equalizer (GREQ): 5, 8 or 10 bands. Adjustable gain factors from -12 dB to +12 dB in standard mode

X-CUBE-AUDIO ACTIVE - Audio effects software expansion for STM32Cube

Есть еще проект USB микрофона с использованием эквалайзера от Andy I2S USB Microphone

Из этого проекта сколхозил (см. GitHub) регулятор громкости. На самом деле можно было и из примера ST взять. Регулятор как и Эквалайзер программный. Отъедает ресурсы системы

Smart volume control library 
software expansion for STM32Cube
Smart volume control library software expansion for STM32Cube

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

Graphical equalizer library 
 software expansion for STM32Cube
Graphical equalizer library software expansion for STM32Cube
Вызов процессинга регулировки громкости и эквалайзера
_graphicEqualiser.process(_processBuffer, MIC_SAMPLES_PER_PACKET / 2);
_volumeControl.process(_processBuffer, MIC_SAMPLES_PER_PACKET / 2);

В чипе имеется дополнительный функционал по регулировке звука и фильтры

Daisy Chain

AK4452 Может работать в четырех, восьми и шестнадцатиканальном режиме. Чипы в таком режиме составляются в последовательную гирлянду

16 Канальный режим
16 Канальный режим

Регулировка качества звука

Режим регулировки качества звука. Не выяснил что это подразумевается

Цифровые фильтры

Как написано в описании предоставляется различная окраска звука. Видимо что-то наподобие Джаз/Поп/Рок предустановок

Выводы

В заключении скажу что я слушал маленькую широкополосную колонку на cs4434 и pcm5102 разница была заметна невооруженным ухом, так сказать. Что касается AK4452 DAC отличный. Моих бюджетных Philips RP‑HTF295 наушников явно нехватает для такого DAC и усилителя. Посоветуйте в коментариях, что взять на пробу

Matrix, Neo
Panasonic RP-HT202
Matrix, Neo Panasonic RP-HT202

Теплый ламповый звук 1956 Silvertone 1333 хорошо бы подошел для такого ЦАП

Сылки на материалы из статьи

Комментарии (9)


  1. AndreyDmitriev
    10.12.2021 00:25
    +2

    Спасибо, всегда была любопытна схемотехника такой штуки.

    По наушникам могу посоветовать попробовать Sennheiser HD599. Мне очень нравится конструкция, ну и звук неплохой. Я их с ibasso dx50 использую и всё нравится. Но они открытого типа.


    1. KakOS
      10.12.2021 07:17
      +2

      Я бы автору посоветовал сходить в аудиомагазин по типу DrHead, где можно послушать почти всё, ну и послушать сначала несколько ушей совсем дорогих, как референс, а далее по своему бюджету слушать что похоже на понравившиеся уши.

      Субъективщина конечно, каждый по разному слышит (или не слышит) казалось бы одни и те же нюансы. Ранее использовал HD598 (минорные отличия от 599), на свои деньги конечно хороши. Однако после Focal Elear и Westone B50 Sennheiser HD5xx-HD6xx звучат довольно мутно, детализации сильно не хватает.


      1. AndreyDmitriev
        10.12.2021 09:38
        +2

        Абсолютно согласен. Как по мне, так с качественным звуком дела обстоят также как и с вином - я довольно легко отличаю вино за пару евро от вина за десятку, однако если поднять ценник, скажем до тридцати евро, то там отличия для меня невелики (за редкими исключениями). Ну и есть ещё красное и белое - это как накладные уши или затычки. Я вот ненавижу затычки. А Зеннхайзеры мне нравятся тем, как они на голове сидят (у меня ещё PXC 550 есть, но это для улицы и командировок). Вообще тут главное - вовремя остановиться, иначе ведь и до прогрева проводов можно дойти...


  1. werwolflg
    10.12.2021 02:12
    +1

    >Посоветуйте в коментариях, что взять на пробу

    AKG K701/702.


  1. Chaa
    10.12.2021 09:35
    +3

    Автор, вы видимо увлекаетесь цифровыми схемами, STM32 и все такое. Это здорово, но вам стоит подтянуть теоретические знания про аналоговые вещи. Потому что вы пишете совершенную дичь, особенно там, где картинка с PCM1792.


    Далее, ОУ в выходном ФНЧ должны бороть остатки от работы цифрового фильтра, это шум от сотен килогерц до десятков мегагерц. Ни TS922, ни тем более LM358, здесь не подойдут. Из дешевых возьмите OPA1656. И да, и резисторы, и конденсаторы в ФНЧ обязательны.


    Было бы здорово организовать аппаратный регулятор громкости на этом чипе. Но не получится

    В даташите есть целый раздел "Output Volume".


    1. app-z Автор
      10.12.2021 17:09

      В даташите есть целый раздел "Output Volume".

      Да это именно для Mute уровни. Я отметил это в статье и конечно пробовал срачала исподбзовать регистор для регулирования уровня выходного сигнала.
      Вы этот DAC запускали? У вас получилось сделать регулятор выходного уровня?


    1. app-z Автор
      10.12.2021 19:30

      Может быть вы правы на счет Output Volume, но когда я менял значение регистра звук пропадал. Надо перепроверить


  1. Tontu
    10.12.2021 14:19
    +2

    Если речь о наушниках, то своё всегда лучше :) Есть у меня небольшой проект с ПЛИС, сигма-дельта модуляцией и большим количеством звука, правда не доделанный, надо будет хотя бы статейку по этой теме написать с товарищем, вдохновился.


  1. sterr
    10.12.2021 20:57

    Почему нельзя изначально сделать нормальное стандартное питание +-15в? Тогда все проблемы сразу уйдут. Почему вы не понимаете что помеха 200мв по питанию в 5в и 15в - это абсолютно разные вещи? Плюс динамика. Че вы все время катитесь в низковольтку? Поставьте нормальный операционник в 50в/мкс и радуйтесь звуку.