Supposons que j'ai une paire de CAN 12 bits, je peux imaginer qu'ils peuvent être montés en cascade pour obtenir une sortie <= 24 bits.
Je peux penser à utiliser simplement l'un pour la plage positive et l'autre pour la plage négative, bien qu'il y aura probablement une certaine distorsion dans la région de croisement. (supposons que nous pouvons ignorer quelques bits d'erreur ou, peut-être, placer un 3e ADC pour mesurer la valeur autour de 0 volt).
Une autre option à laquelle j'avais pensé était d'utiliser un seul ADC haute vitesse et de commuter les tensions de référence pour obtenir une résolution plus élevée à une vitesse inférieure. Il devrait également y avoir un moyen d'obtenir un résultat à valeur réelle en utilisant un ADC à référence fixe, puis en commutant les arcs du convertisseur secondaire pour obtenir une valeur plus précise entre les deux.
Tous les commentaires et suggestions sont les bienvenus.
Je présume qu'une puce quad 8 bits (ou double 12 bits) est moins chère qu'une seule puce 24 bits.
la source
Réponses:
Beaucoup de choses dans votre question. Alors prenons-les un par un.
Pas vraiment - vous obtiendriez une résolution de 13 bits. On peut décrire le fonctionnement du convertisseur 12 bits comme déterminant la tension d'entrée des 4096 bins (2 ^ 12). Deux ADC 12bits vous donneraient 8192 bins ou une résolution de 13 bits.
En fait, c'est ainsi que fonctionne le convertisseur d'approximation successif . Fondamentalement, un convertisseur à un bit (ou comparateur) est utilisé avec un convertisseur numérique-analogique qui produit une tension de référence variable selon un algorithme d'approximation successif pour obtenir un échantillon numérisé de la tension. Notez que les convertisseurs SAR sont très populaires et la plupart des ADC en uC sont de type SAR.
En fait, cela ressemble énormément au fonctionnement des ADC de pipeline . Cependant, au lieu de changer la référence de l'ADC secondaire, l'erreur résiduelle laissée après la première étape est amplifiée et traitée par l'ADC de l'étape suivante.
En fait, il y a une raison à cela, car avoir un convertisseur 24 bits n'est pas aussi simple que d'organiser dans une configuration quatre convertisseurs 8 bits. Il y a beaucoup plus à cela. Je pense que ce malentendu clé ici est de penser que l'on peut simplement "ajouter" un nombre de bits. Pour voir pourquoi cela est faux, il est préférable de considérer l'ADC comme un circuit qui décide à quelle tension d'entrée "bin" appartient. Le nombre de cases est égal à 2 ^ (nombre de bits). Le convertisseur 8 bits aura donc 256 cases (2 ^ 8). Le convertisseur 24 bits aura plus de 16 millions de bacs (2 ^ 24). Donc, pour avoir le même nombre de casiers que dans un convertisseur 24 bits, il faudrait plus de 65 milliers de convertisseurs 8 bits (en fait 2 ^ 16).
Pour continuer l'analogie avec le bac, supposons que votre ADC ait une pleine échelle de 1V. Ensuite, le convertisseur 8 bits "bin" est de 1 V / 256 = ~ 3,9 mV. Dans le cas du convertisseur 24 bits, ce serait 1V / (2 ^ 24) = ~ 59,6nV. Intuitivement, il est clair que «décider» si la tension appartient à un bac plus petit est plus difficile. En effet, c'est le cas en raison du bruit et de diverses non-réalités du circuit. Ainsi, non seulement l'un aurait besoin de plus de 65 milliers de convertisseurs 8 bits pour obtenir une résolution de 24 bits, mais également ces convertisseurs 8 bits devraient être en mesure de se résoudre à un bac de taille 24 bits (votre convertisseur 8 bits normal ne serait pas assez bon car il est capable de se résoudre à ~ 3,9 mV et non à 59,6 nV)
la source
Si vous divisez votre plage d'entrée, vous obtiendrez 13 bits et non 24. Supposons que vous ayez une plage d'entrée de -4,096 V à + 4,096 V. Un ADC 12 bits aura alors une résolution de 2 mV: 2 x 2 mV = 8,192 V (la plage de -4,096 V à + 4,096 V). Si vous prenez la moitié positive, vous obtenez une résolution de 1 mV car votre plage est divisée par deux: 2 x 1 mV = 4,096 V. C'est 2 niveaux au-dessus de 0V, et encore 2 ci-dessous. Ensemble 2 + 2 = 2 , de sorte que 1 bit supplémentaire, pas 12.12 12 12 12 12 1312 12 12 12 12 12 13
À propos de la modification de la tension de référence. Je vais donner un exemple différent. Supposons que vous ayez un CAN 1 bit et que vous souhaitiez obtenir 12 bits en modifiant la référence. Un bit vous donnera un 1 si l'entrée est supérieure à , et un zéro sinon. Supposons que votre référence soit 1V, alors le seuil est 0,5V. Si vous changez votre référence à 0,9 V, vous aurez un nouveau seuil à 0,45 V, vous pouvez donc déjà discerner 3 niveaux différents. Hé, cela peut fonctionner, je peux faire 12 bits avec un ADC 1 bit, puis probablement aussi 24 bits avec un ADC 12 bits!VREF2
Le tenir! Pas si vite! Vous pouvez le faire, mais les composants de votre ADC 1 bit doivent être de qualité 12 bits. C'est pour la précision de la référence et du comparateur. De même, un ADC 12 bits serait capable de faire 24 bits si la précision de l'ADC est suffisamment précise, et que la précision de la tension de référence variable est de qualité 24 bits. Donc, en pratique, vous ne gagnez pas grand-chose.
Il n'y a rien de tel qu'un déjeuner gratuit.
modifier
Il semble y avoir un malentendu à propos de suréchantillonnage, et le fait qu'il ya des ADCs audio 1 bit qui peut vous donner une résolution de 16 bits.
Si votre entrée est un niveau CC fixe, par exemple 0,2 V dans une plage d'entrée de 1 V, votre sortie sera toujours la même. Avec un ADC 1 bit, ce sera zéro pour notre exemple (le niveau est inférieur à la moitié de la référence). Maintenant, ce sera le cas, que vous échantillonniez à 1 échantillon par seconde ou à 1 000. La moyenne ne change donc rien à cela. Pourquoi cela fonctionne-t-il avec l'ADC audio?, Parce que la tension varie tout le temps (bruit), ce qui, selon Einstein (relativité, vous savez ;-)) revient à maintenir la tension constante et à faire varier la référence. Et puisvous obtenez plusieurs lectures différentes pendant le suréchantillonnage, que vous pouvez faire une moyenne pour obtenir une assez bonne approximation de votre niveau réel.
Le bruit doit être suffisamment fort pour passer le (s) seuil (s) de l'ADC, et doit s'adapter à certaines contraintes, comme la distribution gaussienne (bruit blanc). Dans l'exemple 1 bit, cela n'a pas fonctionné car le niveau de bruit est trop faible.
Pour en savoir plus:
Note d'application Atmel AVR121: Amélioration de la résolution ADC par suréchantillonnage
la source
Oui, en théorie, vous pouvez faire ce que vous voulez, mais seulement si vous avez à votre disposition du matériel totalement irréaliste.
Les nombreux autres commentaires faits jusqu'à présent sur la précision supplémentaire limitée sont hélas corrects.
Considérer. Mesurer une tension avec un CAN 12 bits et dire 111111000010 Vous savez que la valeur réelle se situe quelque part dans une plage de 1 bit +/- 0,5 bit de chaque côté de cette valeur.
SI votre ADC était précis à 24 bits mais ne fournissait que 12 bits, il signale que la valeur se situe à +/- un demi-bit de 111111000010 000000000000. Si tel était le cas, vous pourriez prendre un ADC 12 bits avec un +/- Plage de 1/2 bit, centrez-le sur 111111000010000000000000 et lisez le résultat. Cela vous donnerait la différence entre le signal réel et la valeur aDC, comme vous le souhaitez. QED.
Cependant, l'ADC 12 bits n'est lui-même précis qu'à environ un demi-bit. La somme totale de ses diverses erreurs l'amène à déclarer un certain résultat lorsque le résultat réel est jusqu'à environ la moitié mais plus ou moins différent.
Alors que vous voudriez
111111000010 signifie 111111000010 000000000000
cela peut en fait signifier 111111000010 000101101010 ou autre.
Donc, si vous prenez ensuite un deuxième ADC et mesurez les 12 bits inférieurs et supposez qu'ils sont relatifs à une limite exacte de 12 bits, ils sont en fait relatifs à la valeur erronée ci-dessus. Comme cette valeur est une erreur essentiellement aléatoire, vous ajouteriez un nouveau chiffre de 12 bits inférieurs à 12 bits de bruit essentiellement aléatoire. Précis + aléatoire = nouveau aléatoire.
EXEMPLE
Utilisez deux convecteurs qui peuvent mesurer une plage et donner un résultat en 1 sur 10 étapes. Si mis à l'échelle à 100 volts FS, ils donnent ge 0 10 20 30 40 50 60 70 80 90
Si mis à l'échelle à 10 volts pleine échelle, ils donnent 1 2 3 4 5 6 7 8 9
Vous décidez d'utiliser ces deux convertisseurs pour mesurer une plage de 100 volts avec une précision de 1 volt.
Le convertisseur 1 renvoie 70V. Vous mesurez ensuite la tension par rapport à 70V et obtenez -3V. Donc, vous considérez que la valeur réelle, c'est-à-dire + 70V - 3V = 67V.
CEPENDANT, le résultat 70V pourrait en fait être n'importe lequel de 65 66 67 68 69 70 71 72 73 74
Ce n'est que si le 1er convertisseur est PRÉCIS à 1V sur 100, même s'il affiche des pas de 10V sur 100V, que vous pouvez obtenir ce que vous voulez.
Donc, votre résultat réel est de 67V +/- 5 volts = de 62V à 72V. Vous n'êtes donc pas mieux lotis qu'avant. Votre centre a déménagé mais il peut être localisé de façon aléatoire.
Vous pourrez obtenir une amélioration modeste de cette façon, car un convertisseur est généralement légèrement plus précis que les bits qu'il renvoie (vous l'espérez), donc votre 2ème convertisseur en fait usage.
Un système qui fonctionne effectivement a été mentionné avec une omission importante. Si vous échantillonnez un signal N fois et que vous ajoutez + / _ un demi-bruit gaussien, vous étalerez le signal "sur toute la plage possible" et la valeur moyenne sera désormais log (N) plus précise qu'auparavant. Ce schéma a des hameçons et des qualifications et vous ne pouvez pas simplement obtenir un nombre supplémentaire arbitraire de bits, mais il offre une certaine amélioration.
Dans le premier cas ci-dessus, j'ai mentionné un ADC 12 bits avec une précision de 24 bits. Vous pouvez réaliser quelque chose de la sorte en utilisant un CAN 12 bits et en lisant sa valeur supposée avec un convertisseur sigma delta 24 bits par exemple. SI le signal était suffisamment stable pour rester dans la même plage d'un bit, vous pouvez utiliser un 2ème ADC pour lire le 2ème 12 bits par rapport à ce signal stable.
Alternative - il suffit de lire le signal 24 bits initialement avec sigma delta, de verrouiller ce point puis de mesurer successivement par rapport à celui-ci avec le 2e ADC.Tant que le signal reste dans la plage du 2e ADC, vous obtiendrez un résultat beaucoup plus rapide.
la source
Il existe quelque chose appelé suréchantillonnage qui peut être utilisé pour augmenter la résolution de nombreux types de CAN.
Il fonctionne en ajoutant du bruit au signal. Bien que le bruit réduise la résolution, il est nécessaire de provoquer la division des données sur plusieurs bits. (Je ne suis pas un spécialiste du traitement du signal - c'est comme ça que je le comprends.) Votre bruit n'est peut-être que de 1 ou 2 bits, mais il doit être là. Si vous prenez un échantillon de 12 bits - vous avez 12 bits. Si vous prenez ensuite 4 échantillons, les additionnez et divisez par deux, vous obtenez un échantillon de 13 bits. (Chaque bit supplémentaire nécessite 4 échantillons, en raison de Nyquist.)
Pour ce faire, une méthode simple consiste à ajouter du bruit à la tension de référence. J'utilise cela pour augmenter un ADC 12 bits dans un dsPIC33F à 16 bits pour une résolution plus élevée. Au préalable, j'ai configuré une minuterie asynchrone à haute fréquence et utilisé DMA pour mettre en file d'attente une séquence de nombres PRNG dans la capture de sortie, ce qui donne une source de bruit relativement propre. La sortie de bruit polarise la tension de référence d'environ 0,1% (diviseur 1k-1Meg.) Le bruit est bidirectionnel, descendant et source. J'utilise le DMA du dsPIC33F pour mettre les échantillons en file d'attente, ce qui peut être fait avec peu d'intervention du processeur. Bien sûr, le taux d'échantillonnage maximum tombe à environ 1/32 du taux normal, mais ce n'est pas un problème pour mon application.
Comme le bruit n'est pas toujours uniformément réparti, je calibrerai les entrées sur chaque unité expédiée, bien que la différence ne soit probablement que de 1 ou 2 LSB.
la source
En utilisant un amplificateur sommateur, vous pouvez additionner les deux sorties DAC. Vous pouvez utiliser R1 = 100k, R2 = R3 = 100 Ohm. De cette façon, la sortie sera Vout = - (V1 + V2 / 1000). Vous aurez besoin d'une double alimentation et si vous voulez qu'elle ne soit pas inversée, vous devez mettre un autre amplificateur inverseur avec un gain = 1. Supposons donc que vous ayez un DAC 12 bits avec 2 sorties et une référence 4.096V. Ensuite (si vous avez un deuxième amplificateur inverseur), un incrément du DAC 1 augmentera la sortie avec 1uV, et un incrément du DAC 2 augmentera la sortie avec 1mV. Ce n'est pas 24 bits au total. C'est environ 22 bits. En théorie, vous pouvez choisir R1 pour être 4096 fois plus grand que R2 et R3 et obtenir 24 bits, mais vous n'obtiendrez pas de meilleurs résultats. Vous aurez beaucoup de problèmes de bruit dans la gamme des microvolts même si vous choisissez un bon ampli-op à faible bruit.Mise à jour J'ai pensé que c'était une question sur DAC parce que je cherchais des DAC. Voici comment appliquer un principe similaire avec les ADC. Au lieu de sommer, vous devez soustraire le résultat ADC1 puis multiplier par 1000 avant de mesurer avec ADC2.
Correction - ADC3 devrait être sur VGnd (Vref / 2), pas sur Vref pour correspondre à la formule de résultat
Au lieu de AZ431, vous pouvez utiliser n'importe quelle autre référence de 2,5 V ou une autre référence réglable avec des passifs appropriés pour obtenir exactement 4,096 V. Moins la référence a de dérive de température, meilleurs sont les résultats. Il doit également être à faible bruit. Notez que tel n'est probablement pas assez précis. Ce sera bien de mettre un potentiomètre multi-tours de 500 ohms entre R7 et R8 avec un essuie-glace à l'entrée de référence et de le régler pour Vref = 4.096V exactement. Un potentiomètre (2) sera également nécessaire entre R1 et R2 avec un essuie-glace vers l'entrée positive U1. Ajustez-le pour 2.048V sur VGnd. U1 est juste n'importe quel ampli op à faible bruit. (BTW AZ431 est horrible pour le travail. Je l'ai mis parce que j'avais le symbole).
Il est très important que U2, U3 et U4 soient des amplificateurs de hacheur à décalage nul. U2 est plus important car il se multiplie par 100. chaque 1 microvolt arrive à 100 microvolts. Si vous utilisez OP07 et que vous le mettez à zéro correctement et que la température change de 10 degrés, vous obtenez un décalage de 13 uV qui se traduit par 1,3 mV à la sortie de U4. C'est 13 mV en sortie ADC, ce qui rend ADC2 presque inutile.
U3 doit également pouvoir atteindre 6,048 V - c'est-à-dire VGnd (2,048V) + 2xVinmax (2x2V = 4V). C'est toute l'idée d'avoir une alimentation Vcc = + 12V. Le Vcc peut être aussi bas que 6,5 V lorsque le MAX44252 est utilisé. Étant donné que le MAX44252 est une alimentation négative d'opamp rail à rail, l'alimentation négative peut être ignorée et Vss de l'ampli op peut être connecté à la terre. C'est vrai pour tout ampli op qui peut descendre jusqu'à 48 mV sur sa sortie.
Le MAX44252 a une tension de décalage de 2 à 4 uV (typique) et une dérive de température de 1 à 5 nV. C'est 2,64 $ sur digikey en quantités de 1 et c'est quadopamp donc une seule puce fera le travail.
Comment ça fonctionne? Ayons le DAC 10 bits par exemple. La résolution est 4,096 / 1024 = 4mV. Le signal d'entrée doit être relatif à VGnd, qui est la moitié de Vref. L'ADC1 mesure la tension d'entrée normalement. Puis sort la valeur via DAC1. La différence entre Vin et DAC1 est l'erreur dont vous avez besoin pour amplifier, mesurer et ajouter au résultat ADC1. U2 amplifie la différence Vin - DAC1, par rapport à DAC1, avec un gain de 100. U4 amplifie cette différence de 10 et soustrait également DAC1, par rapport à VGnd. Cela fait ADC2 = (Vin - DAC1) * 1000, par rapport à VGnd. En d'autres termes, si vous avez 1.234567V sur Vin, par rapport à VGnd. ADC1 mesurera la valeur de 821car la résolution est de 4 mV et (2,048 + 1,234567) /0,004 = 820,64175. Ainsi, la valeur DAC sera définie sur 309, ce qui correspond à 309 * 0,004 V = 1,236 V. Maintenant, ADC2 obtiendra 1,234567-1,236 = -0,001433 * 1000 = -1,433V par rapport à VGnd (idéalement). C'est le mode commun 2.048-1.433 = 0.615V. 0,615 V / 0,004 = 153,75. Donc valeur ADC2 = 154. Il est plus facile de calculer la valeur en microvolts pour éviter d'utiliser float. pour convertir ADC2 en mV, nous devons multiplier la valeur par 4: VADC1 = 821 * 4 = 3284mV. Pour convertir en uV, nous devons multiplier par 1000. Ou c'est la valeur ADC1 multipliée par 4000. 821 * 4000 = 3284000. La tension ADC1 par rapport à VGnd est donc de 3284000-2048000 = 1236000uV. L'ADC2 est déjà multiplié par 1000, nous devons donc multiplier uniquement par 4: VADC2 = 154 * 4 = 616. Pour obtenir une tension relative à VGnd, nous devons soustraire VGnd: 616-2048 = -1432uV. Nous prenons VGnd = 2048uV ici parce que nous avons une amplification x1000.Nous ajoutons maintenant VADC1 et VADC2: 1236000 + (-1432) = 1234568uV ou 1.234568V
Bien sûr, ce ne sont que des rêves car lorsque vous traitez avec des microvolts, il y aura toutes sortes de problèmes horribles - bruit d'opamp, bruit de résistances, décalage de tension, dérive de température, erreur de gain ... Mais si vous utilisez des pièces décentes, au moins 1% de résistances et vous annulez par programmation le décalage et corrigez le gain que vous pourriez obtenir un résultat raisonnablement bon. Bien sûr, vous ne pouvez pas vous attendre à voir une entrée stable au dernier chiffre. vous pouvez peut-être limiter la résolution à 10uV (divisez le résultat par 10). La multiplication par 4 peut également être effectuée en additionnant 4 résultats séquentiels pour obtenir une moyenne.
Gardez à l'esprit que rien de tout cela n'est testé. J'ai simulé uniquement l'étage de l'amplificateur sans tenir compte du bruit et du décalage d'opamp. Si quelqu'un décide de le construire, écrivez les résultats dans les commentaires.
la source
modifier: voir les commentaires pour les corrections de mes calculs.
la source