Est-il possible de combiner deux DAC 8 bits ensemble pour créer un DAC 16 bits, un octet du mot 16 bits doit être envoyé à chacun d'eux


16

Pour deux DAC, l'un étant envoyé D0-D7 et l'autre envoyé D8-D15, avec une alimentation de 5 V, si 5 V est ajouté à la sortie du 2e DAC et que les deux sorties du DAC sont additionnées, cela devrait donner un DAC 16 bits composé de deux DAC 8 bits.

Le seul problème est que si le deuxième DAC a une entrée 0x00, l'addition 5V doit être annulée, ce que je ne sais pas comment faire. La sommation peut être effectuée en sommant l'amplificateur. Le circuit n'a besoin que de fonctionner jusqu'à quelques 10 s de kHz.

Y a-t-il quelque chose de fondamentalement mauvais avec cette idée?


11
Il n'y a rien de fondamentalement mal avec votre idée, mais vous devrez gérer une conception d'une complexité relative. Tout d'abord, il ne s'agit pas simplement de résumer les résultats en signal analogique. Avant la somme, vous devrez amplifier le DAC MSB dans un facteur x256 car chaque bit de DAC MSB équivaut à 256 bits de DAC LSB. Ensuite, vous devrez compenser cette valeur en volts pleine échelle DAC LSB que vous pouvez ajouter les deux.
PDuarte

7
Sans parler du bruit, de la distorsion, de la capacité d'alimentation ...
PDuarte

4
Si c'était aussi simple que ça, tout le monde le ferait ... Théoriquement, oui, vous pouvez combiner deux DAC (vous avez besoin de multiplication plutôt que d'addition). De manière réaliste, vous n'allez pas vous approcher des 16 bits, en termes de performances. Il suffit d'acheter un DAC 16 bits.
uint128_t

2
La compensation est nécessaire si la valeur multipliée par 256x devient trop grande. Supposons que les DAC 8 bits fournissent 1 Volt à pleine échelle. Multipliez cela par 256 donne 256 V. Pas si pratique ;-). C'est plus facile avec un DAC fournissant un courant, alors vous pouvez simplement connecter les sorties de courant en parallèle (à condition qu'il y ait une charge qui maintiendra la tension à la bonne valeur, une masse virtuelle ou autre).
Bimpelrekkie

1
Que se passe-t-il si au lieu de diviser le signal en 8 bits supérieur et inférieur, vous l'implémentez comme une approximation progressive en deux passes (comme la façon dont le JPG ou PNG progressif s'affiche), avec DAC1 fournissant (grosso modo) les bits pairs et DAC2 fonctionnant à demi-puissance avec (encore une fois, grossièrement) les bits impairs. Les calculs seraient compliqués, mais je pense que vous pouvez obtenir 15 bits de précision du signal.
Foo Bar

Réponses:


28

C'est possible, mais cela ne fonctionnera pas bien.

Premièrement, il y a le problème de la combinaison des deux sorties, l'une étant mise à l'échelle précisément 1/256 de l'autre. (Que vous atténuiez l'un par 1/256, amplifiez l'autre par 256, ou un autre arrangement, * 16 et / 16 par exemple, n'a pas d'importance).

Le gros problème est cependant qu'un DAC 8 bits est susceptible d'être précis à quelque chose de mieux que 8 bits: il peut avoir une spécification "DNL" de 1/4 LSB et une spécification "INL" de 1 / 2LSB. Ce sont les spécifications de non-linéarité "différentielle" et "intégrale", et sont une mesure de la taille réelle de chaque pas entre les codes adjacents. (DNL fournit une garantie entre deux codes adjacents quelconques, INL entre deux codes quelconques sur toute la gamme du DAC).

Idéalement, chaque étape représenterait précisément 1/256 de la valeur pleine échelle; mais une spécification DNL 1 / 4LSB indique que les étapes adjacentes peuvent différer de cet idéal de 25% - ceci est normalement un comportement acceptable dans un DAC.

Le problème est qu'une erreur LSB de 0,25 dans votre DAC MSB contribue à une erreur de 64 LSB (1/4 de toute la plage) dans votre DAC LSB!

En d'autres termes, votre DAC 16 bits a la linéarité et la distorsion d'un DAC 10 bits, ce qui est inacceptable pour la plupart des applications d'un DAC 16 bits.

Maintenant, si vous pouvez trouver un DAC 8 bits qui garantit une précision de 16 bits (INL et DNL mieux que 1/256 LSB), allez-y: cependant, ils ne sont pas économiques à faire, donc la seule façon de l'obtenir est de commencer avec un DAC 16 bits!

Une autre réponse suggère une "compensation logicielle" ... cartographiant les erreurs exactes dans votre DAC MSB et les compensant en ajoutant l'erreur inverse au DAC LSB: quelque chose longtemps réfléchi par les ingénieurs du son à l'époque où les DAC 16 bits étaient chers. ..

En bref, il peut être fait fonctionner dans une certaine mesure, mais si le DAC 8 bits dérive avec la température ou l'âge (il n'a probablement pas été conçu pour être ultra-stable), la compensation n'est plus suffisamment précise pour en valoir la peine. complexité et dépenses.


1
Votre point sur la dérive est bon et rendrait cette méthode peu pratique pour essayer d'obtenir, par exemple, une précision de 20 bits en combinant deux DAC de 8 bits. Je pense cependant qu'il serait possible d'essayer d'obtenir 13-14 bits utilisables à partir de 2x8.
supercat

19

Un DAC 8 bits peut sortir 28=256 différentes valeurs.

Un DAC 16 bits peut sortir 216=65536 différentes valeurs.

Notez comment cela se multiplie, ce n'est pas un ajout (comme cela se produirait lorsque vous additionnez les sorties de deux DAC 8 bits).

Si je prenais deux DAC 8 bits et additionnais leurs sorties, quelles sont les valeurs possibles?

Réponse: 0, 1, 2, ..., 256, 257, 258, .... 511, 512 et c'est tout!

Un DAC 16 bits peut faire 0,1,2 ..., 65535, 65536, c'est beaucoup plus!

Théoriquement, c'est possible, mais vous devrez multiplier la sortie de l' un des DAC 8 bits par exactement 256 et connecter les bits LSB au 1x DAC et les bits MSB au 256x DAC. Mais ne soyez pas surpris si la précision et la linéarité en souffrent!


Hmm je vois. Je ne savais pas que ...
quantum231

1
Si l'on utilise un facteur de multiplication inférieur à 256, on peut alors compenser la non-linéarité dans le logiciel. La non-linéarité différentielle sera au moins égale à la taille de pas du plus petit DAC, mais une utilisant deux DAC de 8 bits, on pourrait raisonnablement gérer un DAC monotone de 14 bits si l'on peut déterminer avec précision les facteurs de compensation à appliquer
supercat

2
Vous pouvez également multiplier la sortie d'un DAC par 257/256 et les additionner, si vous aimez le défi mathématique de déterminer quelles valeurs envoyer à quel DAC pour obtenir une sortie totale donnée. Sinon, les callenges sont les mêmes :)
hobbs

@hobbs: Je ne pense pas que cela fonctionne vraiment. Si un DAC sort 0 à 65280 par pas de 256, et les autres sorties 0 à 65535 par pas de 257, on pourra atteindre toutes les valeurs de sortie entre 65280 et 65535, mais ne pourra pas en obtenir aucune dans la plage entre par exemple 32639 et 32768. Cela ne fait pas vraiment mieux qu'un seul DAC 8 bits.
supercat

@supercat vous avez raison, j'ai fait des calculs. Je pense qu'il y a une version qui fonctionne si vous pouvez devenir négatif, mais cela ne fonctionne pas comme je l'ai écrit. C'était surtout une tentative d'humour de toute façon.
Hobbs

6

La technique est réalisable si la tension à pleine échelle du DAC "interne" est supérieure à la taille de pas du DAC externe, et que l'on a un moyen de mesurer avec précision (mais pas nécessairement rapidement) les tensions de sortie générées par différents codes de sortie et d'appliquer ajustements de linéarité appropriés dans le logiciel. Si la tension à pleine échelle du DAC interne peut être inférieure à la taille de pas la plus défavorable entre deux tensions sur le DAC externe (en gardant à l'esprit que les étapes sont rarement absolument parfaitement uniformes), il peut y avoir des tensions qui ne peuvent être obtenues avec aucun combinaison de valeurs DAC internes et externes. Cependant, si l'on s'assure qu'il y a chevauchement dans les plages, l'utilisation de la correction de linéarité logicielle peut permettre de bons résultats.

BTW, l'ancienne conception de puce Cypress PSOC (je ne connais pas les plus récentes) émule un DAC à neuf bits en utilisant deux DAC à six bits qui sont mis à l'échelle l'un par rapport à l'autre. Il n'utilise pas de correction de linéarité logicielle, mais essaie seulement d'ajouter trois bits de précision à un DAC à six bits. Essayer d'ajouter plus de 3-4 bits de précision à tout type de DAC sans utiliser de compensation logicielle ne fonctionnera probablement pas très bien.


4

Il y a 21 ans, quand j'étais un pauvre étudiant (et ne pouvais me permettre que des DAC 8 bits), j'ai utilisé cette technique pour combiner deux DAC 8 bits en un DAC plus élevé, sachant que je n'obtiendrais pas une précision de 16 bits, car de non-linéarité intégrale (INL) et de non-linéarité différentielle (DNL). DNL sur le DAC d'octet le plus significatif est le tueur dans ce cas; si vous avez INL, la sortie est déformée mais toujours fluide. DNL dicte la taille d'une étape DAC à la suivante, et si elle varie suffisamment, vous verrez des discontinuités ou des inversions lors du franchissement des limites de 8 bits: 0x07ff <-> 0x0800 par exemple, car le DAC MSB passe de 0x07 <-> 0x08, il pourrait changer non pas par les 256 comptes idéaux du DAC LSB, mais par 384 comptes ou 128 comptes (± 1/2 de son propre bit le moins significatif). Un bon DAC n'aura que 1/2 LSB DNL, ​​un DAC médiocre aura un DNL pire, bien que cela devienne plus difficile avec la résolution, il devrait donc être assez facile de trouver 1/2 LSB DNL dans un DAC 8 bits mais pas dans un DAC 16 bits.

Je ne me souviens pas de la résolution effective dans mon cas, peut-être 12 ou 13 bits, et j'ai dû régler manuellement le gain du 2ème étage avec un potentiomètre.


2

J'ai vu cela en pratique sur un détecteur UV HPLC pour augmenter la plage dynamique. L'un des CAD est compensé par le montant nécessaire. Disons que le 1er DAC gère de 0 à 10 V et le 2e gère de 10 à 20 Volts.


1
Cela n'ajouterait-il qu'un seul bit?
Szidor

Oui, cela n'ajoute qu'un bit. Cependant, en termes audio, cela peut être un compromis très réussi. Un DAC "droit" a un énorme problème à mi-échelle où tous les 16 bits commutent en même temps - le MSB s'allume, tous les autres s'éteignent, et c'est là que se produira la plus grande erreur DNL unique. Sur un signal audio, cette plus grande erreur est également au pire endroit possible - le passage par zéro - corrompant même les sons les plus silencieux. Maintenant, si un DAC gère les signaux positifs et l'autre gère les signaux négatifs, vous pouvez éviter complètement ce problème. Le légendaire DAC Burr-Brown PCM-63 a bien exploité cela.
Brian Drummond


0

J'ai un point de vue différent ... Utilisez simplement un DAC 8 bits. Vous avez mentionné qu'il ne devait fonctionner que jusqu'à quelques 10 s de Hz, vous pouvez donc utiliser un seul DAC (qui peut probablement fonctionner jusqu'à 100 kHz) et l'utiliser comme modulateur. L'idée de base est de produire 256 cycles de la valeur MSB plus l'indicateur de dépassement / report d'un bit à partir d'un accumulateur de 8 bits auquel le LSB est ajouté à chaque cycle. Vous obtenez seulement 254 comme MSB maximum en raison du «bit de modulation» supplémentaire du LSB, mais cela ne réduit pas beaucoup la plage.

Exemple: si vous exécutez le cycle à 30 kHz, les 256 cycles se répètent à 117 Hz, vous pouvez donc mettre un filtre passe-bas à 50 Hz sur la sortie pour un signal assez lisse et précis qui peut fonctionner jusqu'à la vitesse dont vous avez besoin.

La précision de cette méthode dépend beaucoup de la taille des pas de bits, mais pas plus que toute autre méthode. Je l'ai utilisé pour la génération de tension de référence dans le passé, et cela fonctionne étonnamment bien.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.