Apakah mungkin untuk menggabungkan dua 8 bit DAC bersama-sama untuk membuat 16 bit DAC, satu byte kata 16 bit harus dikirim ke masing-masing

16

Untuk dua DAC, satu dikirim D0-D7 dan yang lainnya dikirim D8-D15, dengan catu daya 5V, jika 5V ditambahkan ke output DAC kedua dan kemudian dua output DAC dijumlahkan, akan menghasilkan DAC 16 bit terdiri dari dua DAC 8 bit.

Satu-satunya masalah adalah bahwa jika DAC kedua memiliki 0x00 input maka penambahan 5V perlu dibatalkan yang saya tidak yakin bagaimana melakukannya. Penjumlahan dapat dilakukan dengan menjumlahkan amplifier. Rangkaian hanya perlu bekerja hingga 10 detik kHz.

Apakah ada yang salah dengan ide ini?

quantum231
sumber
11
Tidak ada yang salah dengan ide Anda, tetapi Anda harus menangani desain dengan kompleksitas relatif. Pertama, ini bukan masalah hanya menjumlahkan hasil dalam sinyal analog. Sebelum dijumlahkan, Anda harus memperbesar MSB DAC dalam faktor x256 karena setiap bit MSB DAC setara dengan 256 bit LSB DAC. Daripada Anda harus mengimbangi nilai ini dalam LSB DAC volk skala penuh daripada Anda dapat menambahkan keduanya.
PDuarte
7
Belum lagi kebisingan, distorsi, kemampuan pasokan ...
PDuarte
4
Jika semudah itu, semua orang akan melakukannya ... Secara teoritis, ya, Anda dapat menggabungkan dua DAC (Anda perlu penggandaan daripada penambahan sekalipun). Secara realistis, Anda tidak akan mencapai 16bits, dari segi kinerja. Beli saja 16GB DAC.
uint128_t
2
Offsetting diperlukan jika nilai 256x yang dikalikan menjadi terlalu besar. Misalkan DAC 8 bit memberikan skala penuh 1 Volt. Kalikan itu dengan 256 memberi 256 V. Tidak begitu praktis ;-). Lebih mudah dengan DAC memasok arus, maka Anda cukup menghubungkan output saat ini secara paralel (asalkan ada beban yang akan menjaga tegangan pada nilai yang tepat, tanah virtual atau semacamnya).
Bimpelrekkie
1
Bagaimana jika alih-alih membagi sinyal menjadi 8 bit atas & bawah, Anda menerapkannya sebagai pendekatan dua langkah progresif (seperti cara render JPG atau PNG progresif), dengan DAC1 menyediakan (kira-kira) bit genap dan DAC2 bekerja pada setengah kekuatan dengan (sekali lagi, kira-kira) bit bernomor ganjil. Matematika akan berantakan, tapi saya pikir Anda bisa mendapatkan 15 bit akurasi sinyal darinya.
Foo Bar

Jawaban:

28

Itu mungkin, tetapi itu tidak akan berhasil.

Pertama, ada masalah menggabungkan dua output, dengan satu tepat skala 1/256 dari yang lain. (Apakah Anda menipiskan satu dengan 1/256, memperkuat yang lain dengan 256, atau pengaturan lain, * 16 dan / 16 misalnya, tidak masalah).

Namun masalah besar adalah bahwa DAC 8-bit cenderung akurat untuk sesuatu yang lebih baik daripada 8 bit: ia mungkin memiliki spesifikasi "DNL" 1/4 LSB dan "INL" spesifikasi 1 / 2LSB. Ini adalah spesifikasi nonlinier "Diferensial" dan "Integral", dan merupakan ukuran seberapa besar setiap langkah antara kode yang berdekatan sebenarnya. (DNL memberikan jaminan antara dua kode yang berdekatan, INL antara dua kode di seluruh rentang DAC).

Idealnya, setiap langkah tepatnya 1/256 dari nilai skala penuh; tetapi spesifikasi DNL 1 / 4LSB menunjukkan bahwa langkah-langkah yang berdekatan mungkin berbeda dari ideal dengan 25% - ini biasanya perilaku yang dapat diterima dalam DAC.

Masalahnya adalah bahwa kesalahan 0,25 LSB di MSB DAC Anda berkontribusi kesalahan 64 LSB (1/4 dari seluruh rentang) di LSB DAC Anda!

Dengan kata lain, 16 bit DAC Anda memiliki linearitas dan distorsi 10 bit DAC, yang untuk sebagian besar aplikasi 16 bit DAC, tidak dapat diterima.

Sekarang jika Anda dapat menemukan DAC 8-bit yang menjamin keakuratan 16-bit (INL dan DNL lebih baik dari 1/256 LSB) kemudian lanjutkan: namun tidak ekonomis untuk dibuat, jadi satu-satunya cara untuk mendapatkannya adalah mulai dengan DAC 16-bit!

Jawaban lain menyarankan "kompensasi perangkat lunak" ... memetakan kesalahan yang tepat di MSB DAC Anda dan menggantinya dengan menambahkan kesalahan terbalik ke LSB DAC: sesuatu yang lama direnungkan oleh insinyur audio pada hari-hari ketika DAC 16-bit mahal. ..

Singkatnya, ini dapat dibuat untuk bekerja sampai batas tertentu, tetapi jika 8-bit DAC melayang dengan suhu atau usia (mungkin tidak dirancang untuk menjadi sangat stabil), kompensasi tidak lagi cukup akurat untuk menjadi layak kompleksitas dan biaya.

Brian Drummond
sumber
1
Maksud Anda tentang drift adalah bagus dan akan membuat metode ini tidak praktis untuk mencoba mendapatkan misalnya 20-bit presisi dengan menggabungkan dua DAC 8-bit. Saya akan berpikir mencoba untuk mendapatkan 13-14 bit yang dapat digunakan dari 2x8 akan layak, namun.
supercat
19

28=256

216=65536

Perhatikan bagaimana itu mengalikan, itu bukan tambahan (seperti yang akan terjadi ketika Anda menjumlahkan output dari dua DAC 8 bit).

Jika saya akan mengambil dua DAC 8 bit dan menjumlahkan outputnya, berapa nilai yang mungkin?

Jawaban: 0, 1, 2, ..., 256, 257, 258, .... 511, 512 dan hanya itu!

16 bit DAC dapat melakukan 0,1,2 ..., 65535, 65536 itu jauh lebih banyak!

Secara teori adalah mungkin tetapi kemudian Anda perlu mengalikan output dari salah satu dari 8 bit DAC dengan tepat 256 dan menghubungkan bit LSB ke 1x DAC dan bit MSB ke 256x DAC. Tetapi jangan heran jika akurasi dan linearitas menderita!

Bimpelrekkie
sumber
Hmm begitu. Saya tidak menyadari bahwa ...
quantum231
1
Jika seseorang menggunakan faktor multiplikasi kurang dari 256 maka dapat mengkompensasi non-linearitas dalam perangkat lunak. Diferensial non-linearitas akan setidaknya sama dengan ukuran langkah DAC yang lebih kecil, tetapi yang menggunakan dua DAC 8-bit yang satu mungkin secara realistis mengelola DAC 14-bit monoton jika seseorang dapat secara akurat menentukan faktor kompensasi apa yang diterapkan
supercat
2
Anda juga bisa mengalikan output dari satu DAC dengan 257/256 dan menjumlahkannya, jika Anda menikmati tantangan matematis untuk mengetahui nilai mana yang akan dikirim ke DAC mana untuk mendapatkan total output yang diberikan. Kalau tidak, callenges adalah sama :)
hobbs
@obb: Saya pikir itu tidak berhasil. Jika satu DAC menghasilkan 0 hingga 65280 dalam langkah-langkah 256, dan yang lain mengeluarkan 0 hingga 65535 dalam langkah-langkah 257, satu akan dapat mencapai semua nilai keluaran antara 65280 dan 65535, tetapi tidak akan mampu mencapai apa pun dalam kisaran antara misalnya 32639 dan 32768. Itu tidak benar-benar melakukan jauh lebih baik daripada DAC 8-bit tunggal.
supercat
@ supercat Anda benar, saya mengacaukan matematika. Saya pikir ada versi yang berfungsi jika Anda bisa negatif, tetapi tidak berfungsi seperti yang saya tulis. Bagaimanapun, sebagian besar merupakan upaya humor.
hobbs
6

Teknik ini bisa diterapkan jika tegangan skala penuh dari DAC "dalam" lebih besar dari ukuran langkah DAC luar, dan seseorang memiliki cara yang akurat (meskipun tidak harus dengan cepat) mengukur tegangan output yang dihasilkan oleh kode output yang berbeda dan menerapkan penyesuaian linearitas yang sesuai dalam perangkat lunak. Jika tegangan skala penuh dari DAC bagian dalam mungkin kurang dari ukuran langkah terburuk antara dua tegangan pada DAC bagian luar (dengan mengingat bahwa langkah-langkahnya jarang benar-benar seragam) mungkin ada tegangan yang tidak dapat diperoleh dengan kombinasi nilai DAC dalam dan luar. Namun, jika seseorang memastikan adanya tumpang tindih dalam rentang, maka menggunakan koreksi linearitas perangkat lunak dapat memungkinkan hasil yang baik.

BTW, desain chip Cypress PSOC lama (saya tidak tahu tentang yang lebih baru) mengemulasi DAC sembilan-bit menggunakan dua DAC enam-bit yang diskalakan relatif satu sama lain. Itu tidak menggunakan koreksi linearitas perangkat lunak, tetapi hanya mencoba menambahkan tiga bit presisi ke DAC enam-bit. Mencoba menambahkan lebih dari 3-4 bit presisi ke segala jenis DAC tanpa menggunakan kompensasi perangkat lunak kemungkinan tidak akan bekerja dengan baik.

supercat
sumber
4

21 tahun yang lalu ketika saya adalah seorang Mahasiswa Miskin (dan hanya mampu membeli DAC 8-bit), saya menggunakan teknik ini untuk menggabungkan dua DAC 8-bit menjadi DAC bit yang lebih tinggi, mengetahui bahwa saya tidak akan mendapatkan akurasi 16 bit, karena dari non-linear integral (INL) dan non-linear diferensial (DNL). DNL pada DAC byte paling signifikan adalah pembunuh dalam kasus ini; jika Anda memiliki INL maka outputnya terdistorsi tetapi masih lancar. DNL menentukan ukuran dari satu langkah DAC ke langkah berikutnya, dan jika itu cukup bervariasi, maka Anda akan melihat diskontinuitas atau pembalikan ketika melintasi batas 8-bit: 0x07ff <-> 0x0800 misalnya, karena MSB DAC berubah dari 0x07 <-> 0x08, itu mungkin berubah tidak dengan jumlah 256 ideal DAC LSB, tetapi dengan jumlah 384 atau 128 jumlah (± 1/2 dari bit paling tidak signifikan sendiri). DAC yang baik hanya akan memiliki 1/2 LSB DNL, ​​DAC yang biasa-biasa saja akan memiliki DNL yang lebih buruk, meskipun semakin sulit resolusinya, sehingga seharusnya cukup mudah menemukan 1/2 LSB DNL dalam DAC 8-bit tetapi tidak dalam DAC 16-bit.

Saya tidak ingat apa resolusi efektif dalam kasus saya, mungkin 12 atau 13 bit, dan saya harus menyetel gain tahap 2 secara manual dengan potensiometer.

Jason S
sumber
2

Saya telah melihat ini dalam praktiknya pada HPLC UV Detector untuk meningkatkan jangkauan dinamis. Salah satu DAC adalah offet dengan jumlah yang dibutuhkan. Katakanlah pegangan DAC 1 dari 0 hingga 10 V dan pegangan ke-2 10 hingga 20 Volts.

purza
sumber
1
Apakah ini tidak akan menambah hanya satu bit?
Szidor
Ya ini hanya menambah satu bit. Namun, dalam hal audio, ini bisa menjadi kompromi yang sangat sukses. DAC "lurus" memiliki masalah besar pada setengah skala di mana semua 16 bit diaktifkan sekaligus - MSB menyala, semua yang lain dimatikan, dan di situlah kesalahan DNL tunggal terbesar akan terjadi. Pada sinyal audio, kesalahan terbesar ini juga berada di tempat yang paling buruk - persimpangan nol - merusak bahkan suara paling tenang sekalipun. Sekarang jika satu DAC menangani sinyal positif dan yang lainnya menangani sinyal negatif, Anda dapat menghindari masalah ini sepenuhnya. Burr-Brown PCM-63 DAC yang legendaris mengeksploitasi ini dengan baik.
Brian Drummond
0

Saya memiliki pandangan berbeda tentang itu ... Cukup gunakan satu 8 bit DAC. Anda menyebutkan itu hanya perlu bekerja hingga 10-an Hz, jadi Anda bisa menggunakan hanya satu DAC (yang mungkin bisa bekerja hingga 100kHz), dan menggunakannya sebagai modulator. Ide dasarnya adalah untuk menghasilkan 256 siklus dari nilai MSB ditambah flag overflow / carry satu bit dari akumulator 8 bit yang ditambahkan LSB setiap siklus. Anda mendapatkan 254 sebagai MSB maksimum karena 'modulasi bit' ekstra dari LSB tetapi ini tidak mengurangi banyak jangkauan.

Contoh: Jika Anda menjalankan siklus pada 30kHz, 256 siklus ulangi pada 117Hz, sehingga Anda dapat menempatkan filter hubung-rendah 50Hz pada output untuk sinyal yang cukup halus dan akurat yang dapat bekerja hingga tingkat yang Anda butuhkan.

Keakuratan metode ini memang sangat tergantung pada ukuran langkah bit, tetapi tidak lebih dari metode lainnya. Saya telah menggunakannya untuk pembangkit tegangan referensi di masa lalu, dan itu bekerja dengan sangat baik.

Simon Tillson
sumber