Перейти к содержанию

АЦП AD-01 на CS5381


Рекомендуемые сообщения

День добрый!

Сегодня хотелось бы раcсказать о своей разработке - АЦП AD-01 на преобразователе от Cirrus Logic CS5381.

Целью данной разработки было получение близких к даташитным параметрам характеристики АЦП, при этом плату имеющeю не высокую стоимость и универсальность.

На данный момент это уже третья версия платы. Первая версия была сделана ЛУТом, для отработки схемотехники АЦП. Далее последовала вторая версия на заводских платах:

wr3S6uf6vEg.thumb.jpg.2f3ef51bfd63dd082d7b1b8ebb4a9ad7.jpg

Схемотехника была взята полностью из даташитов. Стандартное включение CS5381, стабилизаторы питания в цифровой части AMS1117-3.3, в аналоговой из серии TPS7A.

Схемотехника входного буфера взята из даташита на OPA1632.

После опробования данной платы, были выявлены некоторые недочеты и разработана третья версия версия:

DSC_8214-1.thumb.jpg.0ba81522a44b84103e88f81b59ba3197.jpg

 

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

20180412-05.thumb.JPG.3a9b42f59af29714de84659939145e62.JPG

Топология такого буфера позволяет без переделок проводить замеры/запись как балансного сигнала так и не балансного, достаточно вывод 3 посадить на землю (2). Это достаточно удобно, для различных типов сигнала достаточно иметь 2 пары кабелей с различной распайкой.

Питание аналоговой части сделано на малошумящих стабилизатора TPS7A4901 и TPS7A3001.

20180412-04.thumb.JPG.02bb5da14d626335e94ea1f934628543.JPG

Питание цифровой части на 2х AMS1117-3.3В, схему нет смысла приводить, она из даташита на стабилизаторы.

На плате всего 1 генератор на 512fs (24.576 Мгц). Такая частота выбрана не случайно, для работы SPDIF передатчика необходимо иметь частоту мастерклока не ниже 256fs для работы на частоте 96к, я использую передатчик на WM8805 (о этой плате чуть ниже). В качестве интерфейса на компьютере я использую ЗК E-MU 0404 PCIe.

Полная схема преобразователя:

20180412-02.thumb.JPG.09c72e940f0e87159420326637cf44f6.JPG

На плате присутствует место под DIP переключатель, для настройки режимов работы АЦП. Выход АЦП - I2S, уровни 3.3В.

Для соединения с компьютером была разработана плата SPDIF интерфейса SI-01.

DSC_9510.thumb.jpg.ba3c416b8bfc85477447c53626936b5b.jpg

Схему приводить особого смысла нет, она повторяет даташитную для WM8805 включенным в HW режиме. В этом режиме есть определенные ограничения, связанные с работой PLL, поэтому максимальная частота приёма/передачи ограничена в 96к. WM8805 позволяет работать как в Master режиме, так и в Slave, что очень удобно. Выбор режима осуществляется установкой джампера. Так же на плате присутствуют джамперы выбора питания, от ЦАП или АЦП. В качестве выходного буфера для передатчика используется 1G125.

 

Шумовая полка:

noice8.thumb.png.92193e05d405769c42286ca802bce2e8.png

В качестве источника питания пара трансформаторов с стабилизаторами 317/337, даже имея ёмкости в 10000 мкФ полностью подавть 50Гц и гармоники пока не удалось, возможно проблема в корпусе и компоновке.

Замер моего ЦАПа на 4490, к сожалению не обошлось без земляных петель, поэтому присутствует шум на уровне -125дБ и ниже.

thd5.thumb.png.9404bed17b669e0848cb92bbdad461f6.png

 

Есть определенные особенности применения ИМС CS5381, скупо описанные в App Notes, позволяющие реализовать данную ИМС в двойном моно и теоретическим уровнем THD+N в -123дБ, что позволит производить оценку и замеры искажений у большинства современных ИМС ЦАП без режекторов.

В проекте плата с 2мя генераторам на сетки частот 44.1 кГц и 48 кГц, АЦП включенным в моно режимах и DSP процессором ADAU1452.

Подробную инструкцию с описание на текущую схемы и платы прикладываю.

инструкция.pdf

Евгений

Идеи, проекты, готовые девайсы: https://vk.com/hifi_samara

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Я уже собрал :)

20190119_172455.thumb.jpg.b84b33339aaa3bffb6d10e0c064a4fae.jpg

Пока борюсь с 50-500гц

5c4b2d375d9e6_2.thumb.png.5fed24075b0e2608d185e659abb5ec8b.png

10кГц с генератора

5c4b2cdf60c68_.thumb.png.d4e0ee0c58f4405526b26c1249ee220f.png

Сейчас допиливаю по совету Евгения гальваноразвязку цифровых линий на ADUM1401

Дмитрий Боков

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

на плате предусмотрена интересная возможность, соединить землю возле АЦП напрямую к источнику питания, тем самым уменьшив земляные петли

DSC_8214-2.jpg.f7ffab514183b1e09114209a4ff9dfc5.jpg

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

и землю от разъемов питания не соединять, только одним проводом из выделенной точки

Изменено пользователем maxssau

Евгений

Идеи, проекты, готовые девайсы: https://vk.com/hifi_samara

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

12 минуты назад, maxssau сказал:

на плате предусмотрена интересная возможность

У меня собраны три отдельных стабилизатора +-12в, +9в, +5в.

Земли стабов соединяются на плате АЦП через штатные разъёмы.

Я пробовал земли стабов в эту точку, но разницы не увидел.

Правда земля входного разъёма оставалась на штатном разъёме платы АЦП.

На данный момент к этой точке присоединён корпус.

Изменено пользователем dbokov

Дмитрий Боков

Ссылка на комментарий
Поделиться на другие сайты

Поставил развязку на ADUM1401

20190126_163635.thumb.jpg.2172452df9a5604af009a86f936e5247.jpg

50-500Гц стало лучше, правда шумовая полка как у автора не получается :(

5c4c6fac5e22d_3.thumb.png.5225cfaf2f89779702525e15cf828265.png

10кГц

5c4c6fadded1e_4.thumb.png.7abe9f66b65f5929f565c403121e9a77.png

подключил землю АЦП к контуру заземления

5c4c6faf8ff00_5.thumb.png.1bbd5eeeda1aadcc68e1ef2325449d86.png

Дмитрий Боков

Ссылка на комментарий
Поделиться на другие сайты

сделайте размер FFT 1 миллион

noice9.png.6dc98a2c2a4332645037dd0a1de547e3.png

плюс, можно усреднение сделать, 100 конечно много, 10-20 будет достаточно

noice10.png.5e4023ace0d1f7c131c8f1463e10c31a.png

Евгений

Идеи, проекты, готовые девайсы: https://vk.com/hifi_samara

Ссылка на комментарий
Поделиться на другие сайты

 

 

В AN331 есть интересный график:

an331.png.d2299a5b29930340a69c42170966f6ab.png

 

если снизить входной сигнал до примерно -10...-12 дБ, то THD+N будет в районе SNR, т.е. не выше шумовой полки. В следующей конструкции хочу сделать делитель на 12 дБ и компенсировать снижение сигнала в DSP, что бы на выходе получить не ослабленный сигнал.

Евгений

Идеи, проекты, готовые девайсы: https://vk.com/hifi_samara

Ссылка на комментарий
Поделиться на другие сайты

  • 4 месяца спустя...

Собрал вот такой https://www.diyaudio.com/forums/group-buys/176416-diy-cs5381-analog-digital-converter-pcb-buy.html на базе 5381, правда еще не запускал, осталось то да се, питание, тумблеры и т.д. 

Бабосов вышло не мало... Появилась бы ваша тема раньше, собирал бы ее, вроде явно бюджетнее.

Изменено пользователем Traktorist3d
Ссылка на комментарий
Поделиться на другие сайты

В одно время тоже хотел купить эту плату, 100 евро показалось заоблачной ценой для Spdif. Сейчас готовится новая версия, под usb. С 2мя генераторами, переработанной аналоговой частью и скорее всего двойное моно. Будет наверное не раньше зимы. Поэтому распродам остатки, а новые заказывать не буду.

Евгений

Идеи, проекты, готовые девайсы: https://vk.com/hifi_samara

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Обновил плату, теперь версия AD-02V1

 

20200811_141218.thumb.jpg.9edcbd29fd740172a1550bc79e3b7359.jpg

 

Входной буфер по той же схеме. 

Интерфейс подключения - только USB 2.0.

Поддерживаемые режимы: 24 бита 44.1-192 кГц, обе сетки частот. 

Балансный/не балансный вход, есть защитные диоды на входе.

 

Замеры:

20200811-01.png.bb486966c30edf423803b4d5718234d7.png

Кг, источник генератор Виктора:

20200812-01.png.b415a261cfde80b4d2ca2a2ecd4ea837.png

Евгений

Идеи, проекты, готовые девайсы: https://vk.com/hifi_samara

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

В связи со спросом на первую версию готов немного улучшить плату, в частности сделать SPDIF выход с фиксированной частотой 24 бита 96кГц. Стоимость немного возрастёт при этом и будет в районе 170-190 зеленых. Прошу отписаться заинтересованных, если наберется 5-10 человек, к НГ будет готово. Вариант USB есть и low cost версия не предвидится, если не осилю STM32 xCube Audio Framework.

 

Старых плат версий 1.0-1.02 больше не будет из-за нерентабельности.

Евгений

Идеи, проекты, готовые девайсы: https://vk.com/hifi_samara

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...
1 час назад, Nory Crown сказал:

Добрый.

Как задействовать двойное моно в SpectraPlus?

Хороший вопрос. Если у платы АЦП выход i2s, можно математику сделать в самой дешевой плате Чип и Дип на ADAU1701.Как делают в софте, не в курсе.

Что можно выиграть от двойного моно? 3 дБ? При уровне -12 дб на входе CS5381 показывает 0.00004% что перекрывает большинство потребностей для измерений.

Евгений

Идеи, проекты, готовые девайсы: https://vk.com/hifi_samara

Ссылка на комментарий
Поделиться на другие сайты

13 часов назад, maxssau сказал:

Что можно выиграть от двойного моно? 3 дБ? При уровне -12 дб на входе CS5381 показывает 0.00004% что перекрывает большинство потребностей для измерений.

Вопрос уже не актуален, интересовался с точки зрения абсолютной оценки только шумового сигнала. Здесь этот метод не имеет смысла.

 0.01%THD уже на гране добра и зла при оценке аудио, тк. они соответствуют 80dBSPL полезного сигнала при суммарной помехе на уровне предела слышимости - 0dBSPL или 20*10-6 Па. Поэтому мой интерес к железкам уже давно, скорее, академический.

Ниже XonarU7 с CS4398/CS5361 и умеренным шаманством с ОУ (AD8656 выход/вход). При предклиппинговом состоянии АЦП (0dBFS) CS5381, увы, не выдерживает никакой конкуренции со своим младшим братом, причем ни на 0dBFS (0dBV), ни на -3dBV, ни на -6dBV. Около -10dBV они выравниваются, дальше 5381 уходит в отрыв. При коротком замыкании входа (последний скрин) 5381 показывает около -118dBА. И к, сожалению, эту важную характеристику редко видно на скринах. Я бы сказал, её вообще никто не показывает) 

0dB.jpg

-3dB.jpg

-12dB.jpg

-20dB.jpg

кз вход.jpg

И, да, SNR в Spectre врет, можно использовать только  Tpwr. И в SpectraPlus SC надо включать именно стерео, тк. в моно она ощутимо врет с уровнем шума. Spectra 5.0 Prof Edition не врет в моно, но так же врет с SNR. Не врет нигде только их предшественник - древний спектралаб.

Изменено пользователем Nory Crown
описка
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • ИМХО, только с24, с25, с12 имеет смысл проверить/заменить.
    • Я сам найду, вы мне название напишите пожалуйста.
    • Добрый вечер..)) Нет в моем случае лучше найти готовый для моего Цифровой осциллограф Instrustar ISDS205A 2 канала х 20 МГц..
    • А как же вы квазар спаяли? Или ЛУТом не владеете? Можно даже маркером все прорисовать. А за осцил боятся не стоит, ему на вход будет приходить допустимое напряжение (указано в хар-ках осциллографа).
    • Релюхи не причём. При неисправности релюх симптомы были бы другие. И ИБП даже не клацает когда переходит в  "аварию".   Да. Аккум новый. Более того - 2 новых пробовал. И без АКБ тоже. Не влияет. Да мелкие особо не вздуваются ж. Хотя С21 под подозрением..   Спасибо. Буду иметь ввиду.
    • #include <Wire.h> #include <Oregon_TM.h> #include <BME280I2C.h> //////////////////////////////////////////////////////////////////////////////////////////////////////////// //Скетч для устройства, передающего данные датчика BME280 в формате Oregon Scientific THGN132N //Принципиальная схема прилагается. //Для работы необходима библиотека https://github.com/finitespace/BME280/ //Устройство работает от 3-ех пальчиковых батареек, для экономии электричества заливать скетч нужно через ISP //////////////////////////////////////////////////////////////////////////////////////////////////////////// //Также возможна передача данных в формате - THP (температура, влажность, давление, напряжение батареи) //Пример с приёмником поддерживает расшифоовку THP //////////////////////////////////////////////////////////////////////////////////////////////////////////// # define THGN_SEND 1 // Передавать ли данные в формате THGN132 # define THP_SEND 0 // Передавать ли данные в формате THP # define DEVICE_LOG 1 //Писать ли лог В Serial # define DONE_PIN 15 // вывод сигнала об окончании работы на таймер # define BME_WAIT 10 // Сколько мс ожидать датчик BME # define BATTERY_THR 3.5 // Порог напряжения для выставляения флага разряда батарейки (THGN) ///////////////////////////////////////////////////////////////////////////////////////////////// //Ниблы датчика THP //Во всех полях младшие ниблы идут вперёд!!! // 1-2 - тип (55) // 3 - канал (0-7) // 4-6 - (температура от -100С) * 10. Т.е. +25.1С = 1251 = 4E3h // 7-9 - Влажность *10 Т.е. 25.1% = 251 = 0FBh // 10-12 - (давление от 500ммртст) * 10. Т.е. 765мм = 2650 = A5Ah // 13-15 - данные с АЦП (A0) // 16-17 - CheckSUM // 18-19 - CRC8 (poly 0x07 start 0x00) ///////////////////////////////////////////////////////////////////////////////////////////////// Oregon_TM transmitter(4); BME280I2C bme; bool bme_present = false; float bme_temp(NAN), bme_hum(NAN), bme_pres(NAN); ///////////////////////////////////////////////////////////////////////////////////////////////// void setup() { digitalWrite(DONE_PIN, LOW); pinMode(DONE_PIN, OUTPUT); #ifdef DEVICE_LOG Serial.begin(115200); Serial.println("Waiting for BMEsensor..."); #endif //Обмен данными с BME////////////////////////////////// Wire.begin(); while(!bme.begin()) { if (millis() > BME_WAIT) break; } if (!bme.begin()) { #ifdef DEVICE_LOG Serial.println("No BME sensor found"); #endif bme_present = false; } else { switch(bme.chipModel()) { case BME280::ChipModel_BME280: bme_present = true; bme.read(bme_pres, bme_temp, bme_hum); #ifdef DEVICE_LOG Serial.println("Found BME280 sensor! Success."); Serial.print("Temperature = "); Serial.print(bme_temp, 1); Serial.println("C"); Serial.print("Humidity = "); Serial.print(bme_hum, 1); Serial.println("%"); Serial.print("Pressure = "); Serial.print(bme_pres * 0.75, 1); Serial.println("mmHg"); #endif break; default: #ifdef DEVICE_LOG Serial.println("Found UNKNOWN sensor! Error!"); #endif bme_present = false; } } //Напряжения батареи/////////////////////////////////////////// word battvotage = (word)(((float)(1.1 * 16368) / Vbg()) * 100); #ifdef DEVICE_LOG Serial.print("Battery voltage = "); Serial.println(battvotage,HEX); #endif //Подготовка и отправка данных THGN////////////////////////////////////// transmitter.protocol == 2; if (THGN_SEND) { transmitter.setType(THGN132); transmitter.setChannel(3); transmitter.setBatteryFlag(battvotage < BATTERY_THR); if (bme_present) { if (bme_hum > 98) bme_hum = 98; if (bme_hum < 2) bme_hum = 2; if (bme_temp > 70) bme_temp = 70; if (bme_temp < -50) bme_temp = -50; transmitter.setTemperature(bme_temp); transmitter.setHumidity(bme_hum); transmitter.setComfort(bme_temp, bme_hum); } else { transmitter.setTemperature(-49.9); transmitter.setHumidity(2); transmitter.setComfort(-49.9, 2); } transmitter.SendPacket(); } // Если отправляются оба формата пакетов, межу ними надо выдержать паузу if (THP_SEND && THGN_SEND) delay(100); //Подготовка и отправка данных THP////////////////////////////////////// if (THP_SEND) { transmitter.setType(THP); transmitter.setChannelTHP(1); transmitter.setBatteryTHP( battvotage); if (bme_present) { transmitter.setTemperatureTHP(bme_temp); transmitter.setHumidityTHP(bme_hum); transmitter.setPressureTHP(bme_pres * 0.75); // перевод Pa в mmHg } else { transmitter.setErrorTHP(); } transmitter.SendPacket(); } #ifdef DEVICE_LOG Serial.println(); Serial.print(millis()); Serial.println("ms"); Serial.println(); #endif //Команда на отключение питания digitalWrite(DONE_PIN, HIGH); } ///////////////////////////////////////////////////////////////////////////////////////////////// void loop(){} ///////////////////////////////////////////////////////////////////////////////////////////////// int Vbg() { ADMUX = (1<<REFS0)|(0<<REFS1)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(0<<MUX0); long buffersamp=0; for (int n=0x0; n<=0xff; n++ ) { ADCSRA = 0xc7; while (bit_is_set(ADCSRA,ADSC)); buffersamp += ADC; } buffersamp >>=4; //16368 full scale 14bit ADCSRA &= ~(1 << ADEN); // отключаем АЦП return buffersamp; } Вот код программы. Пробовал по разному и от 5в запитывал и всю систему от 3,3 в. Причем голая ардуинка с таймером работает в нормальном режиме некоторое время, но потом все равно слетает и начинает питать мк постоянно( Причем это происходит всегда через разный промежуток времени.
  • Похожий контент

×
×
  • Создать...