ЦАП на основе резистивной матрицы R-2R и его реализация на микроконтроллере

Параллельный Цифро Аналоговый Преобразователь по схеме R-2R Электроника для всех

Блог о электронике

Порой надо выдать точный аналоговый сигнал, да еще с быстро менющийся. Например, функцию. Раньше я рассматривал как это можно сделать с помощью ШИМ, но у этого метода есть проблема — он очень медленный. В самом деле, чтобы получить один уровнь на ШИМ, нужно, по меньшей мере, 256 тиков таймера. А если надо развернуть функцию в которой 256 отсчетов? Да еще на каждый отсчет по 256 тиков? Это какая же должна быть частота процессора? Да еще надо учесть, что ШИМ требует интегрирующей цепочки с конденсатором. А значит для четкого установления уровня должно пройти еще несколько импульсов, что снижает скорость еще раза в три. Короче, получить что либо быстрей чем 50 ГЦ на ШИМ очень сложно. Я не говорю даже о том, что у ШИМ изза свойств емкостного заряда сильно плывет линейность, так что это приходится учитывать.

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

Опорное напряжение тут последовательно делится на резистивной матрице. Номиналы резисторов должны быть любыми. Главное, чтобы горизонтальные ветви были по номиналу ровно в два раза больше чем вертикальные. А вся резистивная цепь в своей нижней точке садится на землю через резистор равный номиналам в горизонтальных ветвях . Ну и кондерчик для фильтрации дополнительной. Самый старший разряд вверху, самый младший внизу, ближе к земле.

Теоретически, разрядность можно повышать практически до бесконечности. На практике же, уже на десятом разряде возникают проблемы из-за сопротивления ключей, что сказывается на точности и , главное, линейности выходных данных. Но в подавляющем большинстве случаев восьми разрядов хватает за глаза. Тем более их где то еще надо найти, это же целых 8 линий I/O которые надо урвать.

Также не помешает добавить операционный усилитель, включенный повторителем. Чтобы сопротивление нагрузки не вносило искажений. Я поначалу впаял OP07, но получил облом — у меня отрезало все, что ниже 2.5 вольт. Слишком маленькое напряжение питания. Тут нужен усилитель который может работать в режиме Rail-2-Rail то есть выдавать на выходе сигнал с амплитудой от плюса до минуса питания, с минимальным отклонением. При добавлении ОУ, надо учитывать тот факт, что почти у всех операционников максимальное выходное напряжение резко заваливается с ростом частоты — параметр Max Output Swing vs Freq. это показывает. Например, для LM324 выглядит так:

Я усилитель подходящий в запасах не нашел, поэтому пока так. Благо у осциллографа сопротивление высокое и на выходное напряжение он практически не влияет. Чтобы не подбирать номиналы резисторов я поступил проще — в вертикальную линию впаял по два резистора в параллель. При таком включении резистора его сопротивление уполовинивается. Таким образом, все резисторы у меня одного номинала.

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

Читайте также:  Бла бла кар Краснодар Москва (или обратно) ▶Найти поездку бла бла каром на сегодня для пассажира лег

Первым делом, выдал синус. Синус у меня чисто табличный. 256 значений, саму таблицу нарыл в инете. Функция получилась гладенькая. Прям заглядение.

Пробовал брать каждое второе значение из таблицы (при этом она ужалась до 128 значений) — тоже все очень красивое. И лишь когда стал брать чуть ли не каждое 16е значение, то тогда стали заметны лесенки на функции:

И то их можно было сгладить фильтром и опять будет красота. Зато на 8ми мегагерцовой Меге удалось добиться 20кГц синусоидального сигнала 🙂

Вот такой код получился, точнее это фрагмент.

Sine: SetTask TS_Sine ; Повторный вызов через API RTOS. Тут не имеет значения LDS Counter,SinCT ; Загрузить из памяти текущее значение указателя Loop: WDR ; Сброс собаки LDPA Sinus ; Макрос, загружающий в Z адрес таблицы с синусом CLR OSRG ; Сбрасываем рабочий регистр ADD ZL,Counter ; Вычисляем смещение по адресу таблицы ADC ZH,OSRG LPM OSRG,Z ; Грузим в рабочий регистр из таблицы байт OUT PORTD,OSRG ; Выдаем его в порт INC Counter ; Увеличиваем счетчик STS SinCT,Counter ; Сохраняем значение счетчика в память RJMP Loop ; Переход RET ; Так как таблица на 256 значений, то проверку счетчика на переполнение делать не надо, он сам, достчитав до 255, ; обнулится. ; А эта та самая таблица Sinus: .DB 64,65,67,68,70,72,73,75 .DB 76,78,79,81,82,84,85,87 .DB 88,90,91,92,94,95,97,98 .DB 99,100,102,103,104,105,107,108 .DB 109,110,111,112,113,114,115,116 .DB 117,118,118,119,120,121,121,122 .DB 123,123,124,124,125,125,126,126 .DB 126,127,127,127,127,127,127,127 .DB 128,127,127,127,127,127,127,127 .DB 126,126,126,125,125,124,124,123 .DB 123,122,121,121,120,119,118,118 .DB 117,116,115,114,113,112,111,110 .DB 109,108,107,105,104,103,102,100 .DB 99,98,97,95,94,92,91,90 .DB 88,87,85,84,82,81,79,78 .DB 76,75,73,72,70,68,67,65 .DB 64,62,61,59,58,56,54,53 .DB 51,50,48,47,45,44,42,41 .DB 39,38,36,35,34,32,31,30 .DB 28,27,26,25,23,22,21,20 .DB 19,18,17,15,14,13,13,12 .DB 11,10,9,8,8,7,6,5 .DB 5,4,4,3,3,2,2,2 .DB 1,1,1,0,0,0,0,0 .DB 0,0,0,0,0,0,1,1 .DB 1,2,2,2,3,3,4,4 .DB 5,5,6,7,8,8,9,10 .DB 11,12,13,13,14,15,17,18 .DB 19,20,21,22,23,25,26,27 .DB 28,30,31,32,34,35,36,38 .DB 39,41,42,44,45,47,48,50 .DB 51,53,54,56,58,59,61,62

  • Схема преобразователя. Формат Sprint Layout
  • Проект с программой для Mega8

З.Ы.
Но синус это не прикольно. В конце концов, его можно и аналоговыми методами получить не сильно напрягаясь. А с ЦАП можно по таблицам задать любую форму. Вот, например,

А это рок концерт. Вид со сцены.

А напоследок, дабы меня не упрекали что тема сисек не раскрыта…

R 2R ЦАП. Практическое применение

Для преобразования цифрового сигнала в аналоговый, используют устройства под названием цифро-аналоговые преобразователи. Как правило, они существуют в виде отдельных микросхем которые порой труднодоставаемы. Если к ЦАПу не предъявляются серьёзные требования, то его можно сделать самостоятельно из обычных резисторов. Называется такой ЦАП — R 2R. Своё название он получил из-за номиналов применяемых в нём резисторов с сопротивлениями R и 2*R. Сопротивления по идее могут быть любыми, но в разумных пределах разумеется. Если поставить очень большие например по несколько мегаом, то нагрузка которая подключена к выходу, внесет существенные искажения в сигнал. Напряжение начнёт проседать. Я взял резисторы с сопротивлениями 1Ком и 2Ком (просто первое что попалось под руку). Hint: Если есть много резисторов одного сопротивления, то получить сопротивление вдвое меньшее, можно просто запараллелив два одинаковых резистора. Для такого ЦАПа желательно использовать резисторы с 1%-м допуском. У меня к сожалению таких не нашлось, и я использовал обычные. На моей отладочной плате этот ЦАП выглядит так:

Как оно работает
Каждый вход ЦАПа имеет свой «вес». Входы расположены в порядке уменьшения веса слева направо. Т.е. левый вход оказывает самое большое влияние на выходной сигнал следующий за ним вдвое меньше итд. Ну а самый последний (правый) вход изменяет выходной сигнал на ничтожные милливольты. Если известна комбинация бит поступающая на вход ЦАПа, то рассчитать напряжение очень легко. Предположим, что на входе у нас число 10010101 тогда выходное напряжение можно рассчитать по формуле

Читайте также:  Электросхемы Opel Astra J - Дополнительно - Авто центр SPB - ремонт автомобилей и заказ запчастей

Uвых=Uпит * (1 * 1/2 + * 1/4 + *1/8+ 1*1/16 +*1/32+1*1/64+*1/128+1*1/256)

Формула простая, и мозг ни кому взорвать не должна. Согласно ей, напряжение на выходе будет равно 2.91 вольта. Uпит — напряжение питания микроконтроллера. При расчете использовалось значение 5 вольт. Таким образом, восьмибитный ЦАП способен выдать 256 различных напряжений с шагом около 20 милливольт, что вполне неплохо.

Применение
Применений у данного данного ЦАПа несколько. К примеру можно сделать генератор сигналов различной формы. Например пилы:

или скажем треугольника:

ну или можно вывести сигнал эротической экзотической формы:

А можно еще выводить звук. Звук конечно не самого хорошего качества, но для создания какого-нибудь дверного звонка, его вполне достаточно. Проще всего воспроизводить звук формата WAV т.к. он не сжат ни какими аудиокодеками и не потребуется его декодировать перед воспроизведением. Из-за того что звук ни чем не сжат, размер звукового файла не внушает оптимизма. Во флеш микроконтроллера много не влезет. Для эксперимента по выводу звука через ЦАП было решено заюзать SD карту памяти на 2 гб. Не буду рассказывать всех тонкостей работы с картой, (возможно напишу об этом подробно в следующий раз) хочу лишь дать возможность оценить качество звучания такого ЦАПа (звук 8 бит 16 кГц моно):

Преимущества и недостатки
К преимуществам можно отнести:

  • Возможность увеличения разрядности
  • Неплохая частота дискретизации
  • Схемотехническая простота и повторяемость

Недостатки тоже есть :

  • Качество ЦАПа сильно зависит от применяемых резисторов
  • Сопротивление ключей порта микроконтроллера вносят искажения
  • Громоздкость на плате

Благодарности
Спасибо DiHalt’у за функцию выводящую последнюю осциллограмму 😉

R 2R ЦАП. Практическое применение: 28 комментариев

Хех.. Лучше ещё добавь нормальную запись звука с ЦАПа:)
Например повесить вывод ЦАПа на вход микрофона и записать и дать прослушать чтобы можно было понять:)

Я сначала так и хотел, но джека не нашлось к сожалению.

я вообше думал что услышу 8 бит музыку
типо: «дырынь тынь тынь» )))

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

А он и забирает. Последние разряды вообще почти ничего не решают =)

дааа, помню самопальные «звуковухи», сделанные по такому принципу… вешались на LPT-порт.
есть одно «но» — так как выходное сопротивление этой схемы больше, чем хотелось бы, буфер на выходе явно не помешает.
касательно искажений — ну, до 8 бит звучит вполне ничего так. 🙂 и работает быстро. для улучшения характеристик можно использовать 1% резисторы, что обычно и делают.

Звуковуха не ковокс называлась?

Вот Вы заняли 8 ног микроконтроллера, и ножками дергаете. На мой взгляд, неэффективное рещение. Гораздо рациональнее было бы использовать ШИМ с усреднением через фильтр. А тут уже простор для фантазии: точность большая не нужна — берем RC-фильтр, а поточнее — можно Баттерворта 4 порядка рассчитать. Благо информации по ним хватает.

Зато при помощи r2r ЦАПа можно получить неплохие частоты выходного сигнала. Но на счёт большого кол-ва занимаемых ног это минус.

Читайте также:  Водитель самосвала борется с лихачами с помощью сатирических стихов – Безопасность и страхование – А

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

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

Audio-gd R2R 11

  • — 0 %

Audio-gd R2R 11

  • Описание

Ни для кого не секрет, что резистивные матрицы цифро-аналоговых преобразователей стали прерогативой топовых решений аудиотехники. Audio-GD, как всегда, пошли своим путем, и теперь благодаря им у Нас появилась возможность наслаждаться R2R звуком за умеренные деньги.

Цифро-аналоговый преобразователь
Для ЦАПа выбрана самая оптимальная и популярная резистивная матрица DA-8, которых установлено в новинке две. Один из самых сложных моментов при создании резистивных матриц это синхронизация и коррекция сигнала при преобразовании, и в данном вопросе инженерам пришли на помощь высокоскоростные CPLD процессоры с энергонезависимой памятью, которые делают преобразование более точным.
Истинный non-oversampling (NOS) дизайн предлагает более чистый и нейтральный звук, для подавления цифровых артефактов которого используется специальная схема шумоподавления.

Преимущества R2R матриц:

  • преобразование происходит без clock-генераторов
  • R2R преобразование не чувствительно к джиттеру , в отличии от дельта-сигма преобразователей
  • выходной сигнал намного точнее
  • прямая обработка DSD и PCM сигналов без коммутации между выходами

Недостатки:

  • общие гармонические искажения (THD) в R2R матрицах немного выше, чем в чипах
  • сложность конструирования и комплексность подхода во избежание погрешностей

Усилитель
Аналоговая часть построена на фирменном интерфейсе Audio-gd — ACSS, с использованием полностью дискретных компонентов. Двухступенчатые высокомощные высокоскоростные источники питания обеспечивают музыкальность и поразительную прозрачность. Сам усилитель/ предусилитель построен по singe-ended (не балансному) принципу с резисторами, которые имеют минимальное сопротивление, такими, как Vishay, KOA. Как всегда, производитель позаботился и о тех, кому нравится ровный, аналитичный звук, и о тех, кому больше по душе натуральная и музыкальная подача, подарив возможность самостоятельно выбирать что больше по душе(модификация производиться мануально в соответствии и инструкцией). Регулятор громкости: ALPS. Все монтажные работы выполнены припоем с высоким содержанием серебра.

______________________________________

Характеристики комбайна Audio-gd R2R 11:

  • SNR: 100dB
  • Выходнойуровень:
    • Выход для наушников: 10 В RMS
    • Предусилитель:
      • Регулируемый выход: 5 В Макс.
      • Фиксированный выход: 2,5 В RMS (High gain)
      • Фиксированный выход: 1 В RMS (Low gain)
  • Мощность выхода для наушников:
    • 3500 мВт / 25 Ом
    • 1800 мВт / 50 Ом
    • 900 мВт / 100 Ом
    • 300 мВт / 300 Ом
    • 150 мВт / 600 Ом
  • Выходной импеданс
    • TRS 6.3 мм: 2Ом
    • ЦАП: 2 Ом
  • Чувствительность входа
    • коаксиальный: 0,5 Vp-p
    • оптический: 19 дБм
  • Поддерживаемые ОС: Windows, Mac, IOS, Linux
  • Поддержка частоты дискретизации:
    • USB:
      • PCM: 44,1 кГц, 48 кГц, 88,2 кГц, 96 кГц, 176,4 кГц, 192 кГц, 352,8 кГц, 384 кГц
      • DSD: DSD64, DSD128, DSD 256.
    • коаксиальный: 44,1 кГц, 48 кГц, 88,2 кГц, 96 кГц, 192 кГц
    • оптический: 44,1 кГц, 48 кГц, 88,2 кГц, 96 кГц
  • Питание: 220-240 В или 100-120 В, 50/60 Гц
  • Потребляемаямощность: 12W
  • Вес: 2.2kg
  • Габаритныеразмеры: 180*220*55 мм
  • Комплект поставки:
    • Кабель питания
    • Кабель USB
Ссылка на основную публикацию
Хендай Крета черного цвета — фото, отзывы и видео
Хендай крета серый цвет фото Выбрав технические характеристики нового автомобиля Hyundai Creta, пора выбрать цвет кузова. Фото модели 2018-2019 года...
Формула расчета частоты вращений
Расчетные формулы основных параметров асинхронных двигателей В таблице 1 представлены расчетные формулы для определения основных параметров асинхронных двигателей. В данной...
Формула скорости ℹ️ определение, обозначение, единицы измерения, примеры вычислений, онлайн-калькуля
Задачи на среднюю скорость Задачи на среднюю скорость (далее СК). Мы уже рассматривали задания на прямолинейное движение. Рекомендую посмотреть статьи...
Хендай Портер не заводится; Сундук статей
Стартер на Хендай Портер где находится, как снять, замена Своевременная замена и уход за комплектующими автомобиля позволяет избежать неприятных ситуаций...
Adblock detector