ADC - Kasimashi/Systemes-embarques GitHub Wiki

L'ADC

Un convertisseur analogique-numérique (ADC) produit un nombre numérique signé ou non signé de précision finie pour représenter approximativement la taille d'une tension analogique par rapport à une tension de référence. La tension de référence est une tension fixe fournie par le circuit interne du microprocesseur ou par un circuit externe connecté à une broche du microprocesseur. Il ne convertit pas une tension supérieure à la tension de référence.

Les trois paramètres de performance clés des ADC sont :

  • le taux d'échantillonnage : Indique le nombre de convertion effectué par l'ADC par seconde.
  • la résolution : Entre 6 et 24 bits.
  • la dissipation de puissance.

image

image

Architecture de l'ADC

Il y a 3 principales architectures possibles concernant les ADC :

  • Les ADC sigma-delta : Pour les applications qui nécessite peu de vitesse d'échantillonnage mais une haute résolution. Typiquement moins de 100000 échantillons/secondes avec une résolution de 12 à 24 bits. Ils sont utilisés pour les applications audio ou encore largement utilisé dans les téléphones modernes.
  • Les ADC successive-approximation (SAR) : Pour les applications qui ont peu d'énergie. Typiquement moins de 5 millions d'échantillons/secondes.
  • Les ADC pipelined : Pour les applications qui nécessite une vitesse d'échantillonnage importante. Typiquement : les oscilloscopes, les télévisions, les communications radars qui ont besoin d'une vitesse d'échantillonnage supérieur à 5 millions d'échantillons/secondes. Et typiquement une faible résolution inférieur à 18 bits.

Architecture SAR

Généralement les ADC dans les microcontrôleurs sont des ADC de type SAR, Celui ci possède 2 composants majeurs : Le "Sample-and-hold amplifier" (SHA) : https://en.wikipedia.org/wiki/Sample_and_hold (https://www.falstad.com/circuit/circuitjs.html?startCircuit=samplenhold.txt) , et le "SAR digital quantization".

image

Quantification numérique

La quantification numérique fonctionne comme suit. La logique de contrôle SAR utilise l'algorithme de recherche binaire pour trouver le numéro numérique (sortie ADC) qui représente la valeur d'entrée analogique la plus proche. La logique de contrôle SAR modifie dynamiquement la sortie du CAN de sorte que la sortie du convertisseur numérique-analogique (DAC) Vdac se rapproche progressivement de la tension d'entrée du DAC Vin.

  • 1 : La conversion commence par régler la sortie DAC interne Vdac sur 1/2 Vref, puis compare la sortie DAC Vdac avec l'entrée ADC Vin.
  • 2 : Si Vin est plus grand que 1/2 Vref, la logique SAR met le MSB du résultat ADC à 1. Sinon le MSB est mis à 0.
  • 3 : Ensuite, si la tension DAC (Vdac) est mise 1 ou à 0 : à 3/4 Vref, ou 1/4 Vref (suivant la comparaison entre Vdac et Vin)
  • 4 : Le proccess se répète jusqu'à que l'ensemble des bits de la sortie de l'ADC soit déterminé.

Si l'ADC a une résolution de n bits, les conversions prennent n steps pour être accomplis. Ainsi la résolution et la vitesse d'échantillonnage sont "en concurrence" : il faut trouver un bon compromis pour l'utilisation voulue. Ex : Une haute résolution réduit la le taux d'échantillonnage de l'ADC.

image

Dans l'exemple ci dessus on montre la conversion de l'entrée analogique Vin en une sortie 4 digits en utilisant un ADC SAR.

Exemple

Ci contre deux exemples concret sur l'overview de l'ADC chez STMElectronic (STM32F401RE) et Silicons Labs (EFR32XG12) On peut voir dans les 2 exemples que l'ADC peut être piloté par différentes sources d'horloges. Chez ST par des Timers, Chez Silabs par des clocks interne.

Chez ST on voit que la tension de référence est comprise entre VRef- et Vref+ : Ces deux entrées corresponde à des entrées du micro ou bien à une référence interne. Les références internes sont calibrés à l'usinage du processeur et ne peuvent être changés. Chez Silabs on peut aussi choisir plusieurs entrées possibles pour la tension de référence.

A noter qu'on peut aussi remonter des interruptions ou lever des watchdogs si on monitor la valeur de l'ADC. Par exemple un usage courant est de monitorer la valeur d'un capteur, comme un capteur de température. Et remonter une alarme si un certain seul est dépassé.

image

Échantillonnage et maintien

image

Le sample-and-hold amplifier (SHA) comprend un condensateur commuté et un amplificateur opérationnel, qui sont utilisés pour échantillonner la tension d'entrée analogique $V_{in}$ et maintenir la valeur pendant un certain temps pour un traitement CAN ultérieur. Le circuit d'échantillonnage et de maintien est un simple circuit résistance-condensateur.

Lorsque l'interrupteur est fermé, la tension aux bornes du condensateur $V_c$ augmente de façon exponentielle, comme le montre l'équation suivante :

$$V_C(t) = V_{in} \times ( 1 - \exp{\frac{-t}{T_C}})$$

Ou $T_C = (R_{in} + R_{adc}) \times C_{adc}$. Cela montre que la tension d'entrée $V_{in}$ ne peut pas être échantillonnée instantanément. Par exemple, lorsque l'interrupteur est fermé pendant une durée de 3Tc, la tension aux bornes du condensateur $V_C$ ne représente que 95 % de la tension d'entrée $V_{in}$.

image

Ainsi, pour obtenir une conversion analogique-numérique précise, le software doit laisser le commutateur de capture se fermer pendant suffisamment de temps. La durée pendant laquelle le commutateur de capture reste fermé est appelée durée d'échantillonnage.

Sur les processeurs STPM32L, l'ADC utilise HSI comme horloge par défaut, quelle que soit l'horloge utilisée par le processeur. L'ADC peut utiliser un diviseur d'horloge pour modifier la vitesse d'horloge de l'ADC. Le diviseur est 1 pour la pleine vitesse (16 MHz), 2 pour la vitesse moyenne (8 MHz) et 4 pour la faible vitesse (4 MHz). Chaque canal ADC peut sélectionner son propre temps d'échantillonnage, en définissant le bit SMP[2:0] des registres SMPRx correspondants (x=1,2 ou 3).

Le temps total de conversion ADC est le suivant. Notez que si l'ADC a une résolution de n bits, le temps de conversion d'approximations successives prend n cycles.

$T_{conversion} = Sampling Time + Channel Conversion Time$

Pour la conversion ADC 12 bits, si le temps d'échantillonnage est réglé sur 4 cycles et l'horloge ADC est réglée sur 16 MHz, alors on a :

$T_{conversion}=4+12=16 cycles = 1\micro s$

Une durée d'échantillonnage plus longue est recommandée si l'ADC répond aux exigences de vitesse de l'application. Comme indiqué précédemment, pour obtenir une conversion analogique-numérique précise, le commutateur de capture du composant SAR doit être fermé pendant une durée suffisante.

Erreur d'échantillonnage ADC

To be completed ...

Diagramme ADC

To be completed ...

Mode de conversion de l'ADC

Le module ADC effectue des conversions sur les canaux de conversion sélectionnés en mode de conversion single ou en mode de conversion continuous.

One Input Channel

Considérons d'abord une conversion single sur un canal d'entrée.

  • Pour un canal du groupe normal, le canal cible est déterminé par le bit SQ1[4:0] dans le registre SQR1. Le registre de données ADC 16 bits (ADC_DR) contient le résultat de la conversion. Après la conversion, l'indicateur de fin de conversion régulière (EOC) est défini dans le registre ISR. Le module ADC génère une demande d'interruption si le bit EOCIE est défini dans le registre d'activation d'interruption (IER).

  • Pour un canal du groupe injecté, les bits JSQ1[4:0] dans les registres JSQR sélectionnent le canal de conversion, le registre 16 bits ADC_JDR1 contient le résultat de la conversion. Après le canal de conversion. Le registre 16 bits ADC_JDR1 contient le résultat de la conversion. Après la conversion, l'indicateur de fin de conversion injectée (JEOC) est défini dans le registre ISR. Une interruption ADC sera générée si le bit JEOCIE est défini dans le registre d'activation d'interruption (IER).

Si le mode de conversion continue est utilisé sur un canal d'entrée, le module ADC démarre automatiquement une nouvelle conversion immédiatement après en avoir terminé une. Le résultat de la dernière conversion est sauvegardé dans le registre ADC_DR pour un canal normal et dans le registre ADC_JDR1 pour un canal injecté. Le bit CONT du registre CFGR active le mode continu.

Multiple Input Channels

Le module ADC peut effectuer un échantillonnage et des conversions sur un ensemble de canaux d'entrée prédéfinis de manière circulaire. Le schéma de conversion est appelé mode scan.

Pour un groupe régulier., ce mode analyse tous les canaux définis dans les registres ADC_SQR1, ADC_SQR2, ADC_SQR3 et ADC_SQR4. Pour un groupe injecté, les canaux à analyser sont sélectionnés via le registre ADC_JSQR. L'ADC convertit un canal du groupe puis continue successivement à convertir le canal suivant du groupe.

L'opération de conversion peut être configurée pour être effectuée une seule fois ou de manière répétée, en fonction du bit CONT dans le registre ADC_CFGR. Pour le groupe injecté, il existe un enregistreur de données pour chaque canal injecté. Cependant, pour un groupe normal, il n'existe qu'un seul registre de données partagé par tous les canaux de ce groupe. Ainsi, après chaque conversion dans un groupe régulier, le logiciel doit lire le registre de données entre les échantillonnages continus.

Après chaque conversion, le résultat de l'ADC doit être copié dans un tampon utilisateur car l'ADC peut écraser les registres de données de l'ADC (DR, JDR1, JDR2, JDR3 et JDR4). Une demande d'interruption ou une demande DMA peut être déclenchée à la fin de chaque conversion si elle est activée. Ainsi, pour réduire la surcharge logicielle, nous utilisons souvent le gestionnaire d'interruption ADC ou le contrôleur DMA pour copier les résultats ADC dans un tampon utilisateur.

image

Ref : https://wiki.st.com/stm32mcu/wiki/Getting_started_with_ADC

Alignement des données dans l'ADC

Le logiciel peut modifier la résolution ADC. La résolution peut être de 12,10, 8 ou 6 bits, déterminée par les bits RES[1:0] dans le registre de configuration ADC ADC_CFGR.

Cependant, chaque registre de données ADC (DR, JDR1...) possède 16 bits. Étant donné que le résultat de l'ADC comporte moins de bits que les registres de données de l'ADC, l'alignement doit être pris en compte lorsqu'un résultat de données est stocké dans un registre de données. La figure ci-dessous montre différents formats d'alignement de données. Les registres de données de sortie ADC peuvent être alignés à droite ou à gauche.

image

Les résultats ADC sont signés lorsqu'un décalage est appliqué à un canal. Si l'indicateur binaire OFFSET_EN est défini dans le registre de décalage ADC (OFR), les résultats ADC sont soustraits d'une constante définie dans le registre OFR avant d'être enregistrés dans le registre de données ADC. Si le bit OFFSET_EN est activé dans le registre OFR, l'extension du signe doit être effectuée pour l'alignement à droite et à gauche. Une opération d'extension de signe duplique le bit le plus à gauche d'un nombre signé (c'est-à-dire le bit de signe) sur tous les bits à gauche.

Toutes les données de sortie, à l'exception de celles de 6 bits, sont alignées sur la base de "halfwords" et leurs adresses mémoire sont un multiple de 2. Pour une sortie 6 bits, l'alignement de la partie de données est aligné sur la limite d'octets. Deux bits zéro sont ajoutés à la fin de la sortie 6 bits pour un canal normal, et un bit zéro est ajouté pour un canal injecté.