Чи можливо об'єднати два 8-бітових ЦАПів разом, щоб створити 16-бітний ЦАП, по одному байту 16-бітного слова буде надіслано кожен з них


16

Для двох ЦАПів, один надсилається D0-D7, а інший надсилається D8-D15, при цьому джерело живлення 5V, якщо 5V додається до виходу другого ЦАП і потім два виходи ЦАП підсумовуються, повинно призвести до 16 бітного ЦАП складається з двох 8-бітних ЦАПів.

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

Чи є щось принципово не так у цій ідеї?


11
У вашій ідеї немає нічого принципово неправильного, але вам доведеться впоратися з дизайном відносної складності. По-перше, справа не в простому підведенні результатів за аналоговий сигнал. Перед підсумком вам потрібно буде посилити DAC MSB в коефіцієнті x256, оскільки кожен біт MSB DAC еквівалентний 256 бітам DSB DSB. Тоді вам потрібно буде компенсувати це значення в повномасштабних вольтах DAC DSB, ніж ви можете додати обидва.
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 було б здійснено.
supercat

19

28=256

216=65536

Зауважте, як це множиться, це не доповнення (як це було б, коли ви підсумуєте виходи двох 8-бітових ЦАПів).

Якщо я б взяв два 8-бітових ЦАП і підсумував їхні виходи, які можливі значення?

Відповідь: 0, 1, 2, ..., 256, 257, 258, .... 511, 512 і все!

16-бітний ЦАП може зробити 0,1,2 ..., 65535, 65536, це набагато більше!

Теоретично це можливо, але тоді вам потрібно буде помножити вихід одного з 8 бітових ЦАПів рівно на 256 і підключити біти LSB до 1x DAC, а MSB біти до 256x DAC. Але не дивуйтеся, якщо постраждає точність та лінійність!


Гм, бачу. Я не здогадувався, що ...
Quantum231

1
Якщо використовується коефіцієнт множення менше 256, то компенсувати нелінійність програмного забезпечення. Диференціальна нелінійність буде принаймні дорівнює розміру кроків меншого ЦАПу, але той, який використовує два 8-бітні ЦАПі, реально може керувати монотонним 14-бітовим ЦАП, якщо можна точно визначити, які коефіцієнти компенсації застосовувати
supercat

2
Ви також можете помножити вихід одного ЦАПу на 257/256 і підсумувати їх, якщо вам подобається математична задача визначити, які значення надсилати до якого ЦАП, щоб отримати заданий загальний вихід. Інакше дзвінки однакові :)
варення

@hobbs: Я не думаю, що це цілком працює. Якщо один ЦАП виводить 0 - 65280 на кроках 256, а інший виводить 0 - 65535 на кроках 257, один зможе досягти всіх вихідних значень між 65280 і 65535, але не зможе досягти жодного в діапазоні між 32639 та 32768. Це не дуже добре, ніж один 8-бітний ЦАП.
supercat

@supercat ти маєш рацію, я розправив математику. Я думаю, що існує версія, яка працює, якщо ви можете піти негативно, але вона працює не так, як я її написав. Здебільшого це була спроба гумору.
варення

6

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

До речі, стара конструкція мікросхеми Cypress PSOC (я не знаю про новіші) емулює дев'ятирозрядний ЦАП за допомогою двох шестирозрядних ЦАПів, які масштабуються відносно один одного. Він не використовує корекцію лінійності програмного забезпечення, але лише намагається додати три біти точності до шести бітного ЦАП. Спроба додати більше 3-4 біт точності до будь-якого типу ЦАП без використання компенсації програмного забезпечення, швидше за все, не спрацює.


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 LB DNL у 8-бітному ЦАПі ​​слід досить просто, але не в 16-бітному ЦАП.

Я не пам’ятаю, якою була ефективна роздільна здатність у моєму випадку, можливо, 12 чи 13 біт, і мені довелося налаштувати посилення 2-го ступеня вручну за допомогою потенціометра.


2

Я бачив це на практиці на ультрафіолетовому детекторі HPLC для збільшення динамічного діапазону. Один з ЦАПів компенсується необхідною кількістю. Скажіть, 1-й ручок ЦАП від 0 до 10 В, а 2-й ручки 10 - 20 Вольт.


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-бітний ЦАП. Ви згадали, що він повинен працювати лише до декількох 10 Гц, так що ви можете використовувати лише один ЦАП (який, ймовірно, може працювати до 100 кГц), і використовувати його як модулятор. Основна ідея полягає у виведенні 256 циклів значення MSB плюс один прапор переповнення / перенесення біта з 8-бітового акумулятора, до якого додається LSB кожного циклу. Ви отримуєте лише 254 як максимальний MSB через додатковий модулюючий біт від LSB, але це не зменшує діапазон сильно.

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

Точність цього методу дуже залежить від розміру кроків, але не більше, ніж будь-який інший метод. У минулому я використовував це для генерації опорної напруги, і це працює напрочуд добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.