Можно ли объединить два 8-битных ЦАП вместе для создания 16-битного ЦАП, по одному байту 16-битного слова должен быть отправлен каждый из них

16

Для двух ЦАП, один из которых отправляется D0-D7, а другой - D8-D15, с напряжением питания 5 В, если 5 В добавляется к выходу 2-го ЦАП, а затем два выхода ЦАП суммируются, должен получиться 16-разрядный ЦАП состоит из двух 8-битных ЦАП.

Единственная проблема заключается в том, что если второй ЦАП имеет вход 0x00, то необходимо отменить добавление 5 В, что я не уверен, как это сделать. Суммирование может быть выполнено суммированием усилителя. Схема должна работать только с частотой до 10 кГц.

Есть ли что-то принципиально не так с этой идеей?

quantum231
источник
11
В вашей идее нет ничего в корне неправильного, но вам нужно справиться с дизайном относительной сложности. Во-первых, это не просто суммирование результатов в аналоговом сигнале. Прежде чем суммировать, вам нужно усилить ЦАП MSB с коэффициентом х256, поскольку каждый бит ЦАП MSB эквивалентен 256 битам ЦАП LSB. Чем вам нужно будет компенсировать это значение в полномасштабных вольтах ЦАП LSB, чем вы можете добавить оба.
PDuarte
7
Не говоря уже о шуме, искажении, возможности подачи ...
PDuarte
4
Если бы это было так просто, все бы это делали ... Теоретически, да, вы можете объединить два ЦАП (хотя вам нужно умножение, а не сложение). Реально, вы не получите около 16 бит, с точки зрения производительности. Просто купите 16-битный ЦАП.
uint128_t
2
Смещение необходимо, если умноженное на 256x значение становится слишком большим. Предположим, что 8-битные ЦАП дают 1 Вольт на полную шкалу. Умножьте это на 256, чтобы получить 256 В. Не очень практично ;-). Проще с ЦАП, подающим ток, тогда вы можете просто подключить токовые выходы параллельно (при условии, что есть нагрузка, которая будет поддерживать правильное значение напряжения, виртуальное заземление или что-то подобное).
Bimpelrekkie
1
Что если вместо разделения сигнала на верхние и нижние 8 битов вы реализуете его в виде двухпроходного прогрессивного приближения (подобно способу рендеринга прогрессивного JPG или PNG), когда DAC1 обеспечивает (примерно) четные биты, а DAC2 работает на половина мощности с (опять же примерно) нечетными битами. Математика была бы грязной, но я думаю, что вы можете получить 15 бит точности сигнала из этого.
Foo Bar

Ответы:

28

Это возможно, но это не сработает.

Во-первых, существует проблема объединения двух выходов, причем один масштабируется точно на 1/256 другого. (Независимо от того, ослабляете ли вы одну на 1/256, усиливаете другую на 256 или как-то иначе, например, * 16 и / 16, значения не имеет).

Большая проблема, однако, заключается в том, что 8-битный ЦАП, вероятно, будет точнее, чем 8 бит: он может иметь спецификацию "DNL" 1/4 LSB и спецификацию "INL" 1 / 2LSB. Это спецификации «Дифференциальная» и «Интегральная» нелинейность, и они являются мерой того, насколько велик каждый шаг между смежными кодами. (DNL обеспечивает гарантию между любыми двумя смежными кодами, INL между любыми двумя кодами во всем диапазоне ЦАП).

В идеале каждый шаг должен быть точно 1/256 от значения полной шкалы; но спецификация DNL 1 / 4LSB указывает, что соседние шаги могут отличаться от этого идеала на 25% - это обычно приемлемое поведение в ЦАП.

Проблема в том, что ошибка 0,25 LSB в вашем ЦАП MSB вносит ошибку 64 LSB (1/4 от всего диапазона) в вашем ЦАП LSB!

Другими словами, ваш 16-битный ЦАП имеет линейность и искажение 10-битного ЦАП, что для большинства приложений 16-битного ЦАП неприемлемо.

Теперь, если вы можете найти 8-битный ЦАП, который гарантирует 16-битную точность (INL и DNL лучше, чем 1/256 LSB), тогда продолжайте: однако они не экономичны, поэтому единственный способ получить один - это начать с 16-битным ЦАП!

В другом ответе предлагается «программная компенсация» ... отображение точных ошибок в вашем ЦАП MSB и их компенсация путем добавления обратной ошибки к ЦАП LSB: это долго задумывалось звукорежиссерами в те дни, когда 16-разрядные ЦАП были дорогими. ..

Короче говоря, его можно заставить работать до некоторой степени, но если 8-разрядный ЦАП дрейфует с температурой или возрастом (вероятно, он не был разработан, чтобы быть сверхстабильным), компенсация больше не является достаточно точной, чтобы стоить сложность и стоимость.

Брайан Драммонд
источник
1
Ваше мнение о дрейфе является хорошим и сделает этот метод нецелесообразным для попытки получить, например, 20-битную точность путем объединения двух 8-битных ЦАП. Тем не менее, я думаю, что попытка получить 13-14 используемых битов из 2x8 была бы возможной.
суперкат
19

28знак равно256

216знак равно65536

Обратите внимание, как это умножается, это не прибавление (как это происходит, когда вы суммируете выходы двух 8-битных ЦАП).

Если бы я взял два 8-битных ЦАП и суммировал их выходы, каковы возможные значения?

Ответ: 0, 1, 2, ..., 256, 257, 258, .... 511, 512 и все!

16-битный ЦАП может делать 0,1,2 ..., 65535, 65536, это намного больше!

Теоретически это возможно, но тогда вам необходимо умножить выход одного из 8-битных ЦАП ровно на 256 и соединить биты LSB с 1-кратным ЦАП, а биты MSB с 256-кратным ЦАП. Но не удивляйтесь, если страдают точность и линейность!

Bimpelrekkie
источник
Мм понятно. Я не понял, что ...
Quant231
1
Если использовать коэффициент умножения менее 256, можно компенсировать нелинейность в программном обеспечении. Дифференциальная нелинейность будет по крайней мере равна размеру шага меньшего ЦАП, но при использовании двух 8-разрядных ЦАП один может реально управлять монотонным 14-разрядным ЦАП, если можно точно определить, какие коэффициенты компенсации применить
суперкат
2
Вы также можете умножить вывод одного ЦАП на 257/256 и суммировать их, если вам нравится математическая задача выяснить, какие значения отправить в какой ЦАП, чтобы получить заданный общий выход. В остальном календари одинаковые :)
хоббс
@hobbs: Я не думаю, что это работает. Если один ЦАП выводит от 0 до 65280 с шагом 256, а другой выводит от 0 до 65535 с шагом 257, он сможет получить все выходные значения в диапазоне от 65280 до 65535, но не сможет достичь ни одного в диапазоне между, например, 32639 и 32768. Это на самом деле не намного лучше, чем один 8-битный ЦАП.
Суперкат
@supercat ты прав, я взбесил математику. Я думаю, что есть версия, которая работает, если вы можете пойти отрицательно, но она не работает так, как я ее написал. Во всяком случае, в основном это была попытка юмора.
Хоббс
6

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

Кстати, старая конструкция чипа Cypress PSOC (я не знаю о новых) эмулирует девятибитный ЦАП, используя два шестибитовых ЦАП, которые масштабируются относительно друг друга. Он не использует программную коррекцию линейности, а лишь пытается добавить три бита точности к 6-битному ЦАП. Попытка добавить более 3-4 бит точности к любому типу ЦАП без использования программной компенсации, вероятно, не будет работать очень хорошо.

Supercat
источник
4

21 год назад, когда я был бедным студентом колледжа (и мог позволить себе только 8-разрядные ЦАП), я использовал эту технику для объединения двух 8-разрядных ЦАП в более высокий разрядный ЦАП, зная, что я не получу точность 16 бит, потому что из интегральной нелинейности (INL) и дифференциальной нелинейности (DNL), DNL на старшем байтовом ЦАП является убийцей в этом случае; если у вас есть INL, то выходной сигнал искажен, но все еще гладкий. DNL определяет размер от одного шага ЦАП до следующего, и, если он достаточно варьируется, при пересечении 8-битных границ вы увидите разрывы или изменения: например, 0x07ff <-> 0x0800, так как ЦАП MSB изменяется с 0x07 <-> 0x08 может измениться не на идеальные 256 отсчетов ЦАП LSB, а на 384 или 128 отсчетов (± 1/2 его собственного младшего значащего бита). Хороший ЦАП будет иметь только 1/2 LSB DNL, ​​посредственный ЦАП будет иметь худшее DNL, ​​хотя чем выше разрешение, тем труднее, поэтому в 8-битном ЦАП должно быть довольно легко найти 1/2 LSB DNL, ​​но не в 16-битном ЦАП.

Я не помню, какое было эффективное разрешение в моем случае, может быть, 12 или 13 бит, и мне пришлось настраивать усиление 2-й ступени вручную с помощью потенциометра.

Джейсон С
источник
2

Я видел это на практике на ВЭЖХ детекторе УФ для увеличения динамического диапазона. Один из ЦАПов является офсетным на необходимое количество. Скажем, 1-й ЦАП обрабатывает от 0 до 10 В, а второй - от 10 до 20 Вольт.

purza
источник
1
Разве это не добавит только один бит?
Шидор
Да, это добавляет только один бит. Однако, с точки зрения аудио, это может быть очень успешным компромиссом. «Прямой» ЦАП имеет огромную проблему в половинном масштабе, когда все 16 бит включаются одновременно - MSB включается, все остальные выключаются, и именно здесь будет самая большая ошибка DNL. В звуковом сигнале эта самая большая ошибка также находится в самом худшем месте - пересечении нуля - искажает даже самые тихие звуки. Теперь, если один ЦАП обрабатывает положительные сигналы, а другой обрабатывает отрицательные сигналы, вы можете полностью избежать этой проблемы. Легендарный ЦАП Burr-Brown PCM-63 прекрасно это использовал.
Брайан Драммонд
1

Это возможно, и это было сделано раньше. Смотрите эту отличную реализацию на EDN.com http://www.edn.com/design/analog/4329365/Combine-two-8-bit-outputs-to-make-one-16-bit-DAC

Питер
источник
Пожалуйста, отредактируйте этот ответ, чтобы хотя бы суммировать данные в ссылке. Ответы, содержащие только ссылки, не одобряются, потому что ссылки часто перестают работать.
Борт
0

У меня другое мнение ... Просто используйте один 8-битный ЦАП. Вы упомянули, что он должен работать только до нескольких десятков Гц, поэтому вы можете использовать только один ЦАП (который может работать до 100 кГц) и использовать его в качестве модулятора. Основная идея состоит в том, чтобы вывести 256 циклов значения MSB плюс однобитовый флаг переполнения / переноса из 8-разрядного аккумулятора, к которому LSB добавляется каждый цикл. Вы получаете только 254 в качестве максимального MSB из-за дополнительного «модулирующего бита» от LSB, но это не сильно уменьшает диапазон.

Пример: если вы запускаете цикл на частоте 30 кГц, 256 циклов повторяются на частоте 117 Гц, так что вы можете установить на выходе фильтр нижних частот 50 Гц для получения достаточно плавного и точного сигнала, который может работать до необходимой вам частоты.

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

Саймон Тилсон
источник