DNL, INL et ENOB étonnamment pauvres sur un ADC

8

J'essaie actuellement de caractériser un MCU et ses périphériques, en particulier l'ADC embarqué. Cependant, en exécutant les procédures de test habituelles (c'est-à-dire l'onde sinusoïdale pour ENOB et en dents de scie pour DNL et INL), je trouve que les résultats sont plutôt médiocres. Pour faire court, l'ADC "fait" 12 bits - ce qui signifie que l'on s'attendrait à une résolution d'environ 10 bits. Cependant, peu importe ce que j'essaie, ENOB semble se stabiliser autour de 8,5 bits. De même avec le DNL et l'INL - les meilleurs résultats que j'ai obtenus sont lorsque le signal est suréchantillonné 64 fois. La fiche technique à la page 44 dit que l'on peut s'attendre à un DNL d'environ ± 3 LSB - cependant, c'est ce que j'obtiens quand je suréchantillonne. Le signal brut culmine à environ 7 LSB. Il y a quelques choses que j'ai essayées jusqu'à présent:

  • Mettre un condensateur de 10 nF entre l'entrée ADC et la masse (ce qui fonctionne dans une certaine mesure - sans cela, ENOB est de 7,5)
  • Suréchantillonnage 4x, 8x et quelques autres jusqu'à 256x. Cela - comme on pouvait s'y attendre - améliore également les résultats, mais pas de manière aussi significative. Un suréchantillonnage plus grand produit de meilleurs résultats tandis que 4x est presque identique à aucun suréchantillonnage.
  • Ralentir l'horloge du module ADC et augmenter la fenêtre d'échantillonnage. Aucun de ceux-ci n'était particulièrement efficace. L'augmentation de la fenêtre d'échantillonnage a eu un petit impact positif sur ENOB et DNL. Ralentir l'horloge n'a pas vraiment eu d'effet.
  • De même, l'utilisation de références externes ou internes ne semble pas produire d'effet, même si je n'ai pas fait beaucoup d'expériences avec des références externes - c'est peut-être la prochaine à considérer. Une petite modification pour la référence de celui qui peut le lire un jour - l'utilisation d'une référence externe dans mon cas a donné de moins bons résultats. En d'autres termes, la référence interne sur mon MCU semble être plus précise - ou la référence externe n'est pas aussi bonne que ce à quoi je m'attendais.

Maintenant, la question est à quel point accepte-t-on que l'ADC est juste de mauvaise qualité ou en quelque sorte endommagé? Quels autres tests puis-je essayer d'améliorer les caractéristiques de l'ADC. Notez que je génère les signaux d'entrée avec le générateur de fonctions. À ce stade, je suis juste bloqué - c'est-à-dire à court de fils de discussion pour lire - et j'apprécierais vraiment tout conseil.

fandor
la source
Avez-vous vérifié le PS? Est-ce un mode commuté? Si oui, pouvez-vous mettre un LDO entre PS et ADC? Avez-vous vérifié la qualité de l'horloge ADC?
Claudio Avi Chami
Ces erreurs sont comme prévu. La fiche technique indique dans le pire des cas 6 LSB. Vous pouvez essayer un étalonnage ou mieux utiliser un ADC séparé pour des mesures précises.
@ClaudioAviChami Je crois que le mien est une alimentation linéaire. Sa marque est Rigol DG2041A. Pourriez-vous me dire où je peux commencer par vérifier l'horloge ADC - une recherche rapide sur Google ne semble pas prometteuse :)
fandor
1
Quelle impédance de source alimente l'ADC? Vous pourriez avoir besoin d'un amplificateur tampon.
Brian Drummond
@BrianDrummond Je m'assurerai de mesurer cela demain matin lorsque j'arriverai à ma configuration et le posterai ici. Merci pour la suggestion!
fandor

Réponses:

11

Personnellement, je ne suis pas un grand fan des règles de base, mais il y a quelques règles qui sont juste exceptionnellement précises pour lesquelles même je fais une exception.

L'une de ces règles est la suivante:

Les périphériques ADC du microcontrôleur sont toujours terribles.

Toujours. Pas le genre de terrible que vous venez de déclasser. Le genre de terrible qui vous laisse pleurer en position fœtale sous la douche.

Je gosse, mais seulement légèrement. Pour répondre à votre question, oui, l'ADC est en fait aussi mauvais que ça, et oui, vous devez l'accepter. Notez le grand avertissement indiquant "les conditions de fonctionnement s'appliquent." dans la fiche technique.

Vous devez vous rappeler que pour certaines pièces (comme les microcontrôleurs), la fiche technique est également du matériel de marketing, et les microcontrôleurs concurrencent généralement les périphériques, ou la consommation d'énergie (ou les deux). Donc, les chiffres pour des choses comme les ADC seront souvent techniquementcorrect, tant que vous utilisez l'ADC dans les mêmes circonstances ridicules et peu pratiques, ils ont pris la mesure pour la fiche technique. Un favori que je vois souvent est de mesurer l'ENOB avec tous les autres périphériques ainsi que le cœur du processeur réel complètement éteint dans un sommeil profond. Un autre utilise un post-traitement logiciel important et des techniques similaires comme le suréchantillonnage pour obtenir la mesure. Je ne pense pas avoir jamais vu une fiche technique MCU qui ne spécifie pas l'ADC en termes de `` c'est le meilleur que vous obtiendrez jamais, et nous pouvons ou ne pouvons même pas vous dire comment nous l'avons géré '' plutôt que «c'est la spécification avant d'essayer de nettoyer le signal dans le logiciel».

Et, pour être clair, il semble que cette partie ait un très bon ADC, au moins par rapport à tous les autres terribles ADC MCU. 8,5 bits? Quelle opulence! Tellement bourgeois! La plupart du temps, vous obtiendrez peut-être 6 bits d'un ADC 10 bits dans un MCU. Rappelez-vous, quand ils disent une résolution de 12 bits, cela signifie qu'il y a 12 bits que vous pouvez lire quelque part dans un registre. Il n'y a aucune implication qu'ils ne seront pas 12 bits de bruit inutile. La seule promesse est qu'il y aura 12 bits de quelque chose .

Maintenant, à ce stade, vous pourriez être un peu sceptique quant au fait que ces périphériques analogiques seraient toujours aussi terribles, ou à tout le moins, vous demandez pourquoi une société de puces ne publie pas simplement un microcontrôleur avec un frontal analogique décent à mi-chemin.

Eh bien, ils ne peuvent pas. Peu importe la qualité de la référence, ce n'est pas un problème de stabilité. C'est du bruit. Et la physique.

Il est tout simplement physiquement impossible de créer un ADC haute performance (ou vraiment, juste médiocre) sur la même puce en silicium qu'un MCU. Et il suffit d'un gotchya pour bousiller les performances analogiques. Dans ce cas, il n'y a pas un gotchya, mais plusieurs.

Tout d'abord, une seule commutation de transistor CMOS déversera toutes sortes d'harmoniques et de bruit directement dans, eh bien, tout, et se couplera dans (vous l'avez deviné) tout, quand il commutera. Nous avons tendance à penser CMOS comme étant faible puissance (et il est), mais il est utile de garder à l' esprit que la puissance CMOS ne utilisation est effectivement nul - sauf lorsqu'un transistor est en train de changer l' état. Et ils changent d'état très rapidement, de l'ordre de dizaines à centaines de picosecondes. Lorsque vous prenez une douzaine de milliampères consommés par quelque chose qui ne consomme pratiquement pas d'électricité statique, et tout ce courant est entièrement transformé en pics de courant intenses de 100 ps de littéralement des millions de petits bâtards minusculescommutateurs, commutation dans l'ensemble ... eh bien, cela devrait recadrer un peu les choses. Ces quelques milliampères sont beaucoup plus sinistres qu'il n'y paraît, du moins pour les trucs analogiques. Faible puissance, faible bruit. Le CMOS est de faible puissance car il n'a besoin que d'alimentation pour commuter. Mais il bascule plus dur qu'une baisse de basse dubstep.

Ces pointes doivent toutes traverser le substrat, le substrat que l'ADC partage, et suffisamment résistif pour provoquer un rebond de masse localisé dans le substrat qui n'a pas de sens pour les circuits numériques, mais très gênant en effet pour tout circuit analogique.

Et il n'y a vraiment aucun moyen de contourner cela. Ce n'est qu'un problème. L'autre est qu'il est en fait physiquement impossible de créer une disposition analogique haute performance pouvant coexister avec le MCU, qui devra également utiliser ces broches comme GPIO, et d'autres considérations qui perturbent fatalement toute chance d'avoir une bonne section analogique disposition.

Maintenant, il existe quelques MCU spécialisés avec des ADC quelque peu améliorés qui y parviennent en ayant en fait deux matrices de silicium entièrement séparées dans un boîtier, connectées par des fils de liaison, ce qui permet d'isoler le substrat. Vous allez payer pour cette fonctionnalité, et les résultats seront toujours moins bons qu'un ADC dédié en raison de la proximité.

Oh, et je n'ai même pas expliqué comment tout cela suppose que vous avez une disposition externe sans faille et une situation de mise à la terre et de découplage de toutes les manières liées à votre section analogique et numérique. Rien que cela n'est pas anodin, il suffit de demander à Henry Ott .

Donc, en conclusion, je crains que l'ADC sur votre puce soit vraiment terrible. Exactement comme tous les autres ADC MCU. Désolé. Soit c'est assez bon - et pour de nombreuses applications (aidé par une source de logiciel assez intelligente, ry - pun!) - c'est le cas. C'est incroyable ce que l'on peut vraiment faire, même avec les mauvaises performances analogiques disponibles tant que vous êtes intelligent. Mais l'intelligent ne peut que vous mener jusqu'ici. si vous voulez un nombre efficace et froid de bits, il vous suffit de mordre la balle et d'utiliser un ADC dédié avec une disposition et un découplage PCB prudents, ou de chercher à utiliser une partie plus spécialisée (comme les packages multi-die).

métacolline
la source
3
+1 pour la citation du jour: "Le CMOS est une faible puissance car il n'a besoin que de puissance pour commuter. Mais il commute plus fort qu'une baisse de basse dubstep."
Araho
Je note que cette partie utilise un ADC de style de redistribution des charges, qui ont leurs propres problèmes uniques: analog.com/en/search.html?q=an-931
Peter Smith