16 bitlik bir DAC oluşturmak için iki adet 8 bitlik DAC'yi birleştirmek mümkün mü, 16 bitlik kelimenin bir baytı her birine gönderilecektir


16

İki DAC için, biri D0-D7 ve diğeri D8-D15 gönderilir, güç kaynağı 5V olur, 2. DAC çıkışına 5V eklenir ve daha sonra iki DAC çıkışı toplanırsa, 16 bit DAC ile sonuçlanmalıdır. iki adet 8 bit DAC'den oluşur.

Tek sorun, ikinci DAC 0x00 girişi varsa, 5V eklenmesi iptal edilmelidir ki ben nasıl emin değilim. Toplama amplifikatör toplanarak yapılabilir. Devrenin yalnızca birkaç 10 kHz'e kadar çalışması gerekir.

Bu fikirde temelde yanlış olan bir şey var mı?


11
Fikrinizle ilgili temelde yanlış bir şey yoktur, ancak göreceli karmaşıklık tasarımını ele almanız gerekir. İlk olarak, sonuçları sadece analog sinyalde toplamak önemli değildir. Toplamdan önce, MSB DAC'yi x256 faktöründe yükseltmeniz gerekir, çünkü her MSB DAC biti 256 bit LSB DAC'ye eşdeğerdir. LSB DAC tam ölçek voltlarında bu değeri her ikisini de ekleyebileceğinizden dengelemeniz gerekir.
PDuarte

7
Gürültü, bozulma, tedarik kabiliyetinden bahsetmiyoruz ...
PDuarte

4
Bu kadar kolay olsaydı, herkes bunu yapardı ... Teorik olarak, evet, iki DAC'yi birleştirebilirsiniz (yine de toplama yerine çarpmaya ihtiyacınız var). Gerçekçi olarak, performans açısından akıllıca 16 bit'e yakın bir yere ulaşamayacaksınız. Sadece 16bit DAC satın alın.
uint128_t

2
256x çarpılan değer çok büyük olursa ofsetleme gereklidir. 8 bit DAC'lerin 1 Volt'a tam ölçek verdiğini varsayalım. 256 ile çarpın 256 V verir. O kadar pratik değil ;-). Akım besleyen bir DAC ile daha kolaydır, o zaman akım çıkışlarını paralel olarak bağlayabilirsiniz (voltajı doğru değerde tutacak bir yük varsa, sanal bir toprak veya benzeri).
Bimpelrekkie

1
Sinyali üst ve alt 8 bite bölmek yerine, iki geçişli aşamalı bir yaklaşım olarak (aşamalı JPG veya PNG'nin oluşturulduğu gibi) uygularsanız, DAC1 çift sayılı bitleri ve DAC2'yi tek numaralı bitlerle (yine kabaca) yarım güç. Matematik dağınık olurdu, ama sanırım bundan 15 bit sinyal doğruluğu elde edebilirsiniz.
Foo Bar

Yanıtlar:


28

Mümkün, ama iyi çalışmaz.

İlk olarak, iki çıkışın biri diğerinin 1 / 256'sı ile ölçeklenmiş olması sorunu vardır. (Birini 1/256 oranında zayıflatırsanız, diğerini 256 ile güçlendirirseniz veya örneğin * 16 ve / 16 gibi başka bir düzenlemede önemli değildir).

Ancak büyük sorun, 8 bitlik bir DAC'nin 8 bit'ten daha iyi bir şey için doğru olması muhtemeldir: 1/4 LSB "DNL" spesifikasyonu ve 1 / 2LSB "INL" spesifikasyonu olabilir. Bunlar "Diferansiyel" ve "İntegral" doğrusal olmayan özelliklerdir ve bitişik kodlar arasındaki her adımın gerçekte ne kadar büyük olduğunun bir ölçüsüdür. (DNL, iki bitişik kod arasında, DAC'nin tüm DAC aralığı boyunca herhangi iki kod arasında bir garanti sağlar).

İdeal olarak, her adım tam ölçek değerinin 1 / 256'sı olacaktır; ancak 1 / 4LSB DNL spesifikasyonu, bitişik adımların bu idealden% 25 oranında farklı olabileceğini gösterir - bu normalde bir DAC'da kabul edilebilir davranıştır.

Sorun, MSB DAC'ınızdaki bir 0.25 LSB hatasının LSB DAC'ınızda 64 LSB hatasına (tüm aralığın 1 / 4'ü) katkıda bulunmasıdır!

Başka bir deyişle, 16 bit DAC'niz, 16 bit DAC'nin çoğu uygulaması için kabul edilemez olan 10 bit DAC'ın doğrusallığına ve bozulmasına sahiptir.

Şimdi 16 bit doğruluğu (INL ve DNL 1/256 LSB'den daha iyi) garanti eden 8 bitlik bir DAC bulabilirseniz, devam edin: ancak bunlar ekonomik değildir, bu yüzden bir tane elde etmenin tek yolu başlamaktır 16 bit DAC ile!

Başka bir yanıt, "yazılım telafisi" ni önerir ... MSB DAC'nizdeki hataları tam olarak haritalamak ve LSB DAC'a ters hata ekleyerek bunları telafi etmek: 16 bit DAC'lerin pahalı olduğu günlerde ses mühendisleri tarafından uzun zamandır düşünülen bir şey. ..

Kısacası, bir dereceye kadar çalışmak için yapılabilir, ancak 8 bit DAC sıcaklık veya yaşla sürüklenirse (muhtemelen ultra kararlı olacak şekilde tasarlanmamışsa), tazminat artık değecek kadar doğru değildir. karmaşıklık ve gider.


1
Drift ile ilgili noktanız iyi bir şeydir ve bu yöntemi, örneğin 8 bitlik iki DAC'yi birleştirerek 20 bit hassasiyet elde etmeye çalışmak için kullanışsız hale getirir. Ancak, 2x8'den 13-14 kullanılabilir bit almaya çalışmanın uygun olacağını düşünürdüm.
supercat

19

8 bit DAC, farklı değer verebilir .28=256

16 bit DAC, farklı değer verebilir .216=65536

Bunun nasıl çoğaldığına dikkat edin, bir ek değildir (iki 8 bit DAC'nin çıkışlarını topladığınızda olduğu gibi).

İki adet 8 bit DAC alır ve çıktılarını toplarsam, olası değerler nelerdir?

Cevap: 0, 1, 2, ..., 256, 257, 258, .... 511, 512 ve hepsi bu!

16 bitlik bir DAC 0,1,2 ..., 65535, 65536 yapabilir.

Teorik olarak mümkündür, ancak daha sonra 8 bit DAC'lerden birinin çıkışını tam olarak 256 ile çarpmanız ve LSB bitlerini 1x DAC'ye ve MSB bitlerini 256x DAC'ye bağlamanız gerekir. Ancak doğruluk ve doğrusallık düşerse şaşırmayın!


Hmm anlıyorum. Ben bunu fark etmedim ...
kuantum231

1
Eğer 256'dan küçük bir çarpma faktörü kullanılırsa, yazılımdaki doğrusal olmama durumu telafi edilebilir. Diferansiyel lineer olmayanlık en azından daha küçük DAC'nin adım boyutuna eşit olacaktır, ancak iki 8 bit DAC kullanan biri, hangi telafi faktörlerinin uygulanacağını doğru bir şekilde belirleyebilirse, gerçekçi bir şekilde monotonik 14 bit
DAC'yi yönetebilir

2
Ayrıca, belirli bir toplam çıktıyı almak için hangi DAC'a hangi değerleri göndereceğinizi anlamanın matematiksel zorluğundan hoşlanıyorsanız, bir DAC'nin çıktısını 257/256 ile çarpabilir ve toplayabilirsiniz. Aksi takdirde, callenges aynı :) vardır
Hobbs

@hobbs: Bunun işe yaradığını sanmıyorum. Bir DAC 256 adımda 0 ila 65280 çıktı ve 257 adımda 0 ila 65535 çıktı alırsa, 65280 ve 65535 arasındaki tüm çıkış değerlerine ulaşılabilir, ancak aralıkta herhangi bir değer elde edilemez. Bu, tek bir 8 bitlik DAC'den çok daha iyi bir sonuç vermiyor.
supercat

@supercat haklısın, matematiği kabarttım. Sanırım olumsuz gidebilirseniz çalışan bir sürüm var, ancak yazdığım şekilde çalışmıyor. Zaten çoğunlukla mizah girişimiydi.
hobbs

6

"İç" DAC'nin tam ölçekli gerilimi, dış DAC'nin adım büyüklüğünden daha büyükse ve farklı çıkış kodları tarafından üretilen çıkış voltajlarının doğru bir şekilde (mutlaka hızlı olmamakla birlikte) ölçülmesi ve uygulanması için teknik uygulanabilir yazılımda uygun doğrusallık ayarlamaları. İç DAC'ın tam ölçekli voltajı, dış DAC üzerindeki iki voltaj arasındaki en kötü durum adım boyutundan daha az olabilirse (adımların nadiren mükemmel şekilde tekdüze olduğunu akılda tutarak), herhangi biriyle elde edilemeyen voltajlar olabilir. iç ve dış DAC değerlerinin kombinasyonu. Bununla birlikte, aralıklarda çakışma olmasını sağlarsa, yazılım doğrusallık düzeltmesinin kullanılması iyi sonuçlar sağlayabilir.

Eski Cypress PSOC çip tasarımı (daha yenilerini bilmiyorum) BTW, birbirine göre ölçeklendirilmiş iki altı bit DAC kullanarak dokuz bit DAC'yi taklit eder. Yazılım doğrusallık düzeltmesi kullanmaz, ancak altı bitlik bir DAC'ye yalnızca üç bit hassasiyeti eklemeye çalışır. Yazılım telafisi kullanmadan herhangi bir DAC'a 3-4 bit'ten fazla hassasiyet eklemeye çalışmak muhtemelen çok iyi çalışmaz.


4

21 yıl önce Zavallı Kolej Öğrencisi olduğumda (ve sadece 8 bit DAC'leri karşılayabildiğimde), bu tekniği, 8 bit DAC'leri daha yüksek bir DAC'de birleştirmek için kullandım, çünkü 16 bit doğruluk elde edemeyeceğimi bildim, bir entegre doğrusal olmaması (INL) ve diferansiyel nonlineerlik (DNL). En önemli bayt DAC üzerindeki DNL, ​​bu durumda katildir; INL'niz varsa çıktı bozuk ama yine de düzgün. DNL, boyutu bir DAC adımından diğerine dikte eder ve yeterince değişirse, 8 bitlik sınırları aşarken süreksizlikler veya ters dönüşler görürsünüz: örneğin, MSB DAC 0x07 <-> değiştiği için 0x07ff <-> 0x0800 0x08, LSB DAC'ın ideal 256 sayımı ile değil, 384 sayımı veya 128 sayımı ile değişebilir (kendi en önemli bitinin ± 1 / 2'si). İyi bir DAC sadece 1/2 LSB DNL'ye sahip olacak, vasat bir DAC daha kötü DNL'ye sahip olacak, ancak çözünürlük arttıkça zorlaşıyor, bu nedenle 8 bit DAC'de 1/2 LSB DNL'yi bulmak oldukça kolay olmalı, ancak 16 bit DAC'de.

Benim durumumda, 12 veya 13 bitlik etkili çözünürlüğün ne olduğunu hatırlamıyorum ve 2. aşamanın kazancını manuel olarak bir potansiyometre ile ayarlamak zorunda kaldım.


2

Bunu, uygulamada dinamik aralığı artırmak için bir HPLC UV Dedektörü üzerinde gördüm. DAC'lardan biri ihtiyaç duyulan miktarda dengelenir. Diyelim ki 1. DAC 0 ila 10 V arasında, 2. DAC 10 ila 20 Volt arasında.


1
Bu sadece bir bit eklemez mi?
Szidor

Evet, bu sadece bir bit ekler. Bununla birlikte, sesli terimlerle, çok başarılı bir uzlaşma olabilir. "Düz" bir DAC, 16 bitin hepsinin aynı anda açıldığı yarı ölçekte büyük bir soruna sahiptir - MSB açılır, diğerleri kapanır ve en büyük tek DNL hatasının olduğu yer burasıdır. Bir ses sinyalinde bu en büyük hata aynı zamanda en sessiz yerde - sıfır geçiş - en sessiz sesleri bile bozar. Şimdi bir DAC pozitif sinyalleri ve diğeri negatif sinyalleri ele alıyorsa, bu problemi tamamen önleyebilirsiniz. Efsanevi Burr-Brown PCM-63 DAC bunu çok iyi kullandı.
Brian Drummond


0

Farklı bir yaklaşımım var ... Sadece bir 8 bit DAC kullanın. Sadece birkaç 10 Hz'ye kadar çalışması gerektiğini söylediniz, bu yüzden sadece bir DAC (muhtemelen 100kHz'e kadar çalışabilir) kullanabilir ve bir modülatör olarak kullanabilirsiniz. Temel fikir, her döngü LSB'nin eklendiği 8 bitlik bir akümülatörden MSB değerinin 256 devir artı bir bit taşma / taşıma bayrağını çıkarmaktır. LSB'den ekstra 'modülasyon biti' nedeniyle maksimum MSB olarak sadece 254 elde edersiniz, ancak bu aralığı çok fazla azaltmaz.

Örnek: Döngüyü 30kHz'de çalıştırırsanız, 256 döngü 117Hz'de tekrarlanır, böylece ihtiyacınız olan hıza kadar çalışabilen oldukça düzgün ve doğru bir sinyal için çıkışa 50Hz düşük geçiş filtresi koyabilirsiniz.

Bu yöntemin doğruluğu, bit adımlarının büyüklüğüne oldukça bağlıdır, ancak diğer yöntemlerden daha fazla değildir. Geçmişte referans voltaj üretimi için kullandım ve şaşırtıcı derecede iyi çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.