Czy można połączyć dwa 8-bitowe przetworniki cyfrowo-analogowe, aby utworzyć 16-bitowy przetwornik cyfrowo-analogowy, do każdego z nich należy wysłać jeden bajt 16-bitowego słowa

16

W przypadku dwóch przetworników DAC, jeden wysyłany jest D0-D7, a drugi D8-D15, z zasilaniem 5 V, jeśli 5 V zostanie dodane do wyjścia drugiego DAC, a następnie dwa wyjścia DAC zostaną zsumowane, powinno to skutkować 16-bitowym przetwornikiem DAC składa się z dwóch 8-bitowych przetworników DAC.

Jedyny problem polega na tym, że jeśli drugi przetwornik cyfrowo-analogowy ma wejście 0x00, to należy anulować dodawanie 5V, czego nie jestem pewien, jak to zrobić. Sumowanie można wykonać, sumując wzmacniacz. Obwód musi działać tylko do kilku 10 kHz.

Czy z tym pomysłem jest coś zasadniczo nie tak?

quantum231
źródło
11
Z twoim pomysłem nie ma nic zasadniczo złego, ale musisz poradzić sobie z projektem o względnej złożoności. Po pierwsze, nie jest to kwestia sumowania wyników w sygnale analogowym. Przed sumą trzeba wzmocnić przetwornik DAC MSB o współczynniku x256, ponieważ każdy bit przetwornika DAC MSB odpowiada 256 bitom przetwornika DAC LSB. Następnie musisz zrównoważyć tę wartość w woltach pełnoskalowych przetwornika DAC LSB, niż możesz dodać oba.
PDuarte,
7
Nie wspominając o hałasie, zniekształceniach, możliwościach dostaw ...
PDuarte
4
Gdyby to było takie proste, wszyscy by to robili ... Teoretycznie tak, można połączyć dwa przetworniki cyfrowo-analogowe (potrzebujesz mnożenia, a nie dodawania). Realistycznie nie osiągniesz poziomu 16 bitów pod względem wydajności. Wystarczy kupić 16-bitowy przetwornik cyfrowo-analogowy.
uint128_t
2
Przesunięcie jest konieczne, jeśli zwielokrotniona wartość 256x staje się zbyt duża. Załóżmy, że 8-bitowe przetworniki DAC dają pełną skalę 1 wolt. Pomnożenie tego przez 256 daje 256 V. Nie takie praktyczne ;-). Łatwiej jest z przetwornikiem cyfrowo-analogowym dostarczającym prąd, wtedy można po prostu podłączyć równolegle wyjścia prądowe (pod warunkiem, że istnieje obciążenie, które utrzyma odpowiednią wartość napięcia, wirtualna masa lub podobne).
Bimpelrekkie 08.03.16
1
Co jeśli zamiast podzielić sygnał na 8 górnych i dolnych bitów, zastosujesz go jako dwuprzebiegowe przybliżenie progresywne (podobnie jak w przypadku progresywnego renderowania JPG lub PNG), przy czym DAC1 zapewnia (z grubsza) parzyste bity i DAC2 działa na połowa mocy z (znowu z grubsza) nieparzystymi bitami. Matematyka byłaby nieuporządkowana, ale myślę, że można uzyskać z niej 15 bitów dokładności sygnału.
Foo Bar

Odpowiedzi:

28

Jest to możliwe, ale nie zadziała dobrze.

Po pierwsze, istnieje problem łączenia dwóch wyjść, z których jedno wyskalowane jest dokładnie 1/256 drugiego. (Niezależnie od tego, czy osłabisz jedną wartość o 1/256, a drugą zwiększysz o 256, lub w innym układzie, na przykład * 16 i / 16, nie ma znaczenia).

Dużym problemem jest jednak to, że 8-bitowy przetwornik cyfrowo-analogowy może być dokładniejszy do czegoś lepszego niż 8 bitów: może mieć specyfikację „DNL” wynoszącą 1/4 LSB i specyfikację „INL” wynoszącą 1 / 2LSB. Są to specyfikacje nieliniowości „Różnicowa” i „Całkowa” i są miarą tego, jak duży jest naprawdę każdy krok między sąsiednimi kodami. (DNL zapewnia gwarancję między dowolnymi dwoma sąsiednimi kodami, INL między dowolnymi dwoma kodami w pełnym zakresie DAC).

Idealnie byłoby, gdyby każdy krok wynosił dokładnie 1/256 wartości pełnej skali; ale specyfikacja DNL 1 / 4LSB wskazuje, że sąsiednie kroki mogą różnić się od tego ideału o 25% - jest to zwykle akceptowalne zachowanie w przetworniku cyfrowo-analogowym.

Problem polega na tym, że błąd 0,25 LSB w DAC MSB przyczynia się do błędu 64 LSB (1/4 całego zakresu) w DAC LSB!

Innymi słowy, 16-bitowy przetwornik cyfrowo-analogowy ma liniowość i zniekształcenie 10-bitowego przetwornika cyfrowo-analogowego, co w przypadku większości zastosowań przetwornika 16-bitowego jest niedopuszczalne.

Teraz, jeśli możesz znaleźć 8-bitowy przetwornik cyfrowo-analogowy, który gwarantuje 16-bitową dokładność (INL i DNL lepsze niż 1/256 LSB), to kontynuuj: jednak nie są one ekonomiczne, więc jedynym sposobem na uzyskanie takiego jest rozpoczęcie z 16-bitowym przetwornikiem cyfrowo-analogowym!

Inna odpowiedź sugeruje „kompensację programową” ... odwzorowanie dokładnych błędów w DAC MSB i kompensację ich poprzez dodanie odwrotnego błędu do DAC LSB: coś, o czym inżynierowie audio długo zastanawiali się w czasach, gdy 16-bitowe przetworniki były drogie. ..

Krótko mówiąc, można do pewnego stopnia sprawić, aby działał, ale jeśli 8-bitowy przetwornik cyfrowo-analogowy dryfuje wraz z temperaturą lub wiekiem (prawdopodobnie nie został zaprojektowany jako ultra-stabilny), kompensacja nie jest już wystarczająco dokładna, aby była warta złożoność i koszty.

Brian Drummond
źródło
1
Twoje zdanie na temat driftu jest dobre i sprawiłoby, że ta metoda byłaby niepraktyczna przy próbach uzyskania np. 20-bitowej precyzji poprzez połączenie dwóch 8-bitowych przetworników DAC. Sądzę jednak, że próba uzyskania 13-14 użytecznych bitów z 2x8 byłaby wykonalna.
supercat
19

8-bitowy przetwornik cyfrowo-analogowy może wysyłać 28=256 różnych wartości.

16-bitowy przetwornik cyfrowo-analogowy może wysyłać 216=65536 różnych wartości.

Zauważ, jak to się zwielokrotnia, nie jest to dodatek (jak by to było, gdyby zsumować wyjścia dwóch 8-bitowych przetworników DAC).

Gdybym wziął dwa 8-bitowe przetworniki cyfrowo-analogowe i zsumował ich wyjścia, jakie są możliwe wartości?

Odpowiedź: 0, 1, 2, ..., 256, 257, 258, .... 511, 512 i to wszystko!

16-bitowy przetwornik cyfrowo-analogowy może zrobić 0,1,2 ..., 65535, 65536, to znacznie więcej!

Teoretycznie jest to możliwe, ale wtedy trzeba będzie pomnożyć wyjście jednego z 8-bitowych przetworników DAC przez dokładnie 256 i podłączyć bity LSB do 1x DAC, a bitów MSB do 256x DAC. Ale nie zdziw się, jeśli ucierpi dokładność i liniowość!

Bimpelrekkie
źródło
Hmm rozumiem. Nie zdawałem sobie sprawy, że ...
quantum231
1
Jeśli zastosuje się mnożnik mniejszy niż 256, wówczas można skompensować nieliniowość w oprogramowaniu. Różnicowa nieliniowość będzie co najmniej równa wielkości kroku mniejszego przetwornika DAC, ale przy użyciu dwóch 8-bitowych przetworników DAC można realistycznie zarządzać monotonicznym 14-bitowym przetwornikiem DAC, jeśli można dokładnie określić, jakie współczynniki kompensacji należy zastosować
supercat
2
Możesz także pomnożyć moc wyjściową jednego przetwornika cyfrowo-analogowego przez 257/256 i zsumować je, jeśli lubisz matematyczne wyzwanie polegające na ustaleniu, które wartości wysłać do którego przetwornika cyfrowo-analogowego, aby uzyskać daną całkowitą moc wyjściową. W przeciwnym razie wezwania są takie same :)
hobbs
@ Hobbs: Nie sądzę, że to całkiem działa. Jeśli jeden przetwornik cyfrowo-analogowy wyprowadza sygnały od 0 do 65280 w krokach co 256, a pozostałe wyjścia 0 do 65535 w krokach po 257, będzie można osiągnąć wszystkie wartości wyjściowe między 65280 a 65535, ale nie będzie w stanie osiągnąć żadnego z tego zakresu między np. 32639 a 32768. Nie jest tak naprawdę dużo lepiej niż pojedynczy 8-bitowy przetwornik cyfrowo-analogowy.
supercat,
@supercat masz rację, rozwaliłem matematykę. Wydaje mi się, że istnieje wersja, która działa, jeśli można przejść negatywnie, ale nie działa tak, jak ją napisałem. W każdym razie była to głównie próba humoru.
hobbs
6

Technika ta jest wykonalna, jeśli napięcie w pełnej skali „wewnętrznego” przetwornika cyfrowo-analogowego jest większe niż wielkość kroku zewnętrznego przetwornika cyfrowo-analogowego i można dokładnie (choć niekoniecznie szybko) zmierzyć napięcia wyjściowe generowane przez różne kody wyjściowe i zastosować odpowiednie korekty liniowości w oprogramowaniu. Jeśli napięcie w pełnej skali wewnętrznego przetwornika cyfrowo-analogowego może być mniejsze niż najgorszy rozmiar kroku między dwoma napięciami na zewnętrznym przetworniku cyfrowo-cyfrowym (pamiętając, że etapy rzadko są absolutnie idealnie równomierne), mogą wystąpić napięcia, których nie można uzyskać przy żadnym połączenie wewnętrznych i zewnętrznych wartości DAC. Jeśli jednak upewnisz się, że zakresy zachodzą na siebie, to zastosowanie programowej korekcji liniowości może zapewnić dobre wyniki.

BTW, stary projekt układu Cypress PSOC (nie wiem o nowszych) emuluje dziewięciobitowy przetwornik cyfrowo-analogowy przy użyciu dwóch sześciobitowych przetworników cyfrowo-analogowych, które są skalowane względem siebie. Nie wykorzystuje programowej korekcji liniowości, ale próbuje jedynie dodać trzy bity precyzji do sześciobitowego przetwornika cyfrowo-analogowego. Próba dodania więcej niż 3-4 bitów precyzji do dowolnego przetwornika cyfrowo-analogowego bez użycia kompensacji programowej prawdopodobnie nie zadziała bardzo dobrze.

supercat
źródło
4

21 lat temu, kiedy byłem kiepskim studentem (i mogłem sobie pozwolić tylko na 8-bitowe przetworniki cyfrowo-analogowe), zastosowałem tę technikę, aby połączyć dwa 8-bitowe przetworniki cyfrowo-analogowe w przetworniki wyższego poziomu, wiedząc, że nie uzyskam dokładności 16 bitów, ponieważ z integralnej nieliniowości (INL) i różnicy nieliniowości (DNL). DNL w najbardziej znaczącym bajcie DAC jest zabójcą w tym przypadku; jeśli masz INL, to sygnał wyjściowy jest zniekształcony, ale nadal płynny. DNL dyktuje rozmiar od jednego kroku DAC do następnego, a jeśli będzie wystarczająco zróżnicowany, wtedy zobaczysz nieciągłości lub cofnięcia podczas przekraczania granic 8-bitowych: na przykład 0x07ff <-> 0x0800, ponieważ DAC MSB zmienia się z 0x07 <-> 0x08, może się to zmienić nie o idealne 256 zliczeń DAC LSB, ale o 384 lub 128 zliczeń (± 1/2 jego najmniej znaczącego bitu). Dobry przetwornik cyfrowo-analogowy będzie miał tylko 1/2 LSB DNL, ​​mierny przetwornik cyfrowo-analogiczny będzie miał gorszy DNL, ​​chociaż im trudniej jest, tym wyższa rozdzielczość, więc powinno być dość łatwo znaleźć 1/2 LSB DNL w 8-bitowym przetworniku cyfrowo-analogowym, ale nie w 16-bitowym przetworniku cyfrowo-analogowym.

Nie pamiętam, jaka była efektywna rozdzielczość w moim przypadku, może 12 lub 13 bitów, i musiałem dostroić wzmocnienie drugiego stopnia ręcznie potencjometrem.

Jason S.
źródło
2

Widziałem to w praktyce na detektorze UV ​​HPLC w celu zwiększenia zakresu dynamicznego. Jeden z przetworników DAC ma wartość wymaganą. Powiedzmy, że pierwszy DAC obsługuje od 0 do 10 V, a drugi obsługuje od 10 do 20 woltów.

purza
źródło
1
Czy to nie dodałoby tylko jednego bitu?
Szidor
Tak, to dodaje tylko jeden bit. Jednak pod względem audio może to być bardzo udany kompromis. „Prosty” przetwornik cyfrowo-analogowy ma ogromny problem w połowie skali, w którym wszystkie 16 bitów przełącza się jednocześnie - MSB włącza się, wszystkie pozostałe wyłączają się, i to właśnie tam będzie największy pojedynczy błąd DNL. W przypadku sygnału audio ten największy błąd występuje również w najgorszym możliwym miejscu - przejściu przez zero - niszcząc nawet najcichsze dźwięki. Teraz, jeśli jeden przetwornik obsługuje sygnały dodatnie, a drugi obsługuje sygnały ujemne, możesz całkowicie uniknąć tego problemu. Legendarny przetwornik Burr-Brown PCM-63 wykorzystał to ładnie.
Brian Drummond,
0

Mam inne zdanie ... Po prostu użyj jednego 8-bitowego przetwornika cyfrowo-analogowego. Wspomniałeś, że musi on działać tylko do kilku 10 Hz, więc możesz użyć tylko jednego przetwornika cyfrowo-analogowego (który prawdopodobnie może pracować do 100 kHz) i użyć go jako modulatora. Podstawową ideą jest wyprowadzenie 256 cykli wartości MSB plus jednobitowa flaga przepełnienia / przeniesienia z 8-bitowego akumulatora, do którego LSB jest dodawany w każdym cyklu. Otrzymujesz tylko 254 jako maksymalny MSB ze względu na dodatkowy „bit modulujący” z LSB, ale to nie zmniejsza znacznie zasięgu.

Przykład: jeśli uruchomisz cykl przy 30 kHz, 256 cykli powtórzy się przy 117 Hz, dzięki czemu możesz umieścić na wyjściu filtr dolnoprzepustowy 50 Hz, aby uzyskać dość gładki i dokładny sygnał, który może pracować z wymaganą częstotliwością.

Dokładność tej metody zależy w dużej mierze od wielkości kroków bitowych, ale nie bardziej niż w przypadku jakiejkolwiek innej metody. W przeszłości używałem go do generowania napięcia odniesienia i działa on zaskakująco dobrze.

Simon Tillson
źródło