Académique Documents
Professionnel Documents
Culture Documents
Caractéristiques de l’ADC
Dans cette section nous explorons l’ADC en général. Tout d'abord, nous décrivons certains aspects
généraux de l'ADC lui-même, puis nous nous concentrons sur la fonctionnalité de certaines broches
importantes de l'ADC.
Les convertisseurs analogique-numérique sont parmi les appareils les plus largement utilisés pour
l'acquisition de données. Les processeurs numériques utilisent des valeurs binaires (discrètes), mais
dans le monde physique, tout est analogique (continu). La température, la pression, l'humidité et la
vitesse sont quelques exemples de grandeurs physiques que nous traitons quotidiennement.
Une grandeur physique est convertie en signaux électriques (tension, courant) à l'aide d'un dispositif
appelé transducteur. Les transducteurs sont également appelés capteurs. Les capteurs de
température, de vitesse, de pression, de lumière et de nombreuses autres grandeurs naturelles
produisent une sortie qui est une tension (ou un courant). Par conséquent, nous avons besoin d'un
convertisseur analogique-numérique pour traduire les signaux analogiques en nombres numériques
afin que le microcontrôleur puisse les lire et les traiter.
1
Quelques principales caractéristiques de l'ADC
Résolution
L'ADC a une résolution de n bits, où n peut être égal à 8, 10, 12, 16 ou même 24 bits. Les ADC à plus
haute résolution fournissent une taille de pas plus petite, où la taille de pas est le plus petit
changement qui peut être discerné par un ADC. Certaines résolutions largement utilisées pour les ADC
sont présentées dans le tableau 3-1. Bien que la résolution d'un ADC soit décidée au moment de sa
conception et ne puisse pas être modifiée, nous pouvons contrôler la taille du pas à l'aide de ce qu'on
appelle Vref.
Temps de conversion
En plus de la résolution, le temps de conversion est un autre facteur majeur dans le choix d'un ADC. Le
temps de conversion est défini comme le temps nécessaire à l’ADC pour convertir l'entrée analogique
en un nombre numérique (binaire). Le temps de conversion est dicté par la source d'horloge connectée
à l'ADC en plus de la méthode utilisée pour la conversion des données et de la technologie utilisée telle
que la technologie MOS ou TTL.
Vref
Vref est une tension d'entrée utilisée pour la tension de référence. La tension connectée à cette
broche, ainsi que la résolution de l’ADC, donnent la taille du pas. Pour un ADC de 8 bits, la taille de pas
est Vref/256. Par exemple, si la plage d'entrée analogique doit être de 0 à 4 volts, Vref est connecté à
4 volts. Cela donne 4 V/256 =15,62 mV pour la taille de pas d'un ADC 8 bits.
Sortie numérique
Dans un ADC 8 bits, nous avons une sortie numérique 8 bits de D0-D7, tandis que dans l'ADC 10 bits,
la sortie numérique est D0-D9. Pour calculer la tension de sortie, nous utilisons la formule suivante :
𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑑𝑑′𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒é𝑒𝑒
𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑛𝑛𝑛𝑛𝑛𝑛é𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝐴𝐴𝐴𝐴𝐴𝐴 =
𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 𝑑𝑑𝑑𝑑 𝑝𝑝𝑝𝑝𝑝𝑝
Exemple
Etant donné un ADC 8 bits, avec Vref = 2,56 V. Calculez la sortie D0-D7 si l'entrée analogique est :
(a) 1,7 V et (b) 2,1 V.
Solution
Étant donné que la taille du pas est de 2,56/256 = 10 mV, nous avons ce qui suit :
(a) Sortie numérique = 1,7 V/10 mV= 170 en décimal, ce qui nous donne 10101010 en binaire pour
D0-D7.
(b) Sortie numérique = 2,1 V/10 mV = 210 en décimal, ce qui nous donne 11010010 en binaire
pour D0-D7.
2
ADC parallèle ou série
Les circuits ADC sont soit parallèles, soit série. Dans l'ADC parallèle, nous avons 8 broches ou plus
dédiées à la sortie des données binaires, mais dans l'ADC série, nous n'avons qu'une seule broche pour
la sortie des données. Cela signifie qu'à l'intérieur de l'ADC série, il y a un registre à décalage parallèle-
série chargé d'envoyer les données binaires un bit à la fois.
Les broches de données D0-D7 de l'ADC 8 bits fournissent un chemin de données parallèle 8 bits entre
la puce ADC et le CPU. Dans le cas de la puce ADC parallèle 16 bits, nous avons besoin de 16 broches
pour le chemin des données.
Afin d'économiser les broches, de nombreux ADC 12 et 16 bits utilisent les broches D0-D7 pour envoyer
les octets supérieurs et inférieurs des données binaires. Ces dernières années, pour de nombreuses
applications où l'espace est un problème critique, l'utilisation d'un si grand nombre de broches pour
les données n'est pas réalisable. Pour cette raison, les périphériques série tels que l'ADC série sont de
plus en plus utilisés. Alors que les ADC série utilisent moins de broches et que leurs boîtiers plus petits
occupent beaucoup moins d'espace sur la carte de circuit imprimé, il faut plus de temps CPU pour
obtenir les données converties de l'ADC car le CPU doit obtenir les données un bit à la fois, au lieu
d'une opération de lecture unique comme avec l'ADC parallèle. L'ADC848 est un exemple d'ADC
parallèle avec 8 broches pour la sortie de données, tandis que le MAX1112 est un exemple d'ADC série
avec une seule broche pour Dout.
Dans cette section, nous discutons de la fonction ADC de l'ATmega328p et montrons comment elle est
programmée en C.
3
(e) Nous avons trois options pour Vref : Vref peut être connecté à AVCC (Analog Vcc), à une
référence interne de 2,56 V ou à une broche AREF externe.
(f) Le temps de conversion est en fonction de la fréquence du cristal connecté au broches XTAL
(Fosc) et ADPS0:2 bits.
(g) Temps de conversion allant de 65 à 260μs.
(h) Interruption sur fin de conversion.
Exemple
Pour un ADC 10 bits, nous avons Vref = 2,56V. Calculez la sortie D0-D9 si l'entrée analogique est :
(a) 0,2 V et (b) 0 V. Quelle est la différence entre (a) et (b) ?
Étant donné que la taille du pas est de 2,56/1024 = 2,5 mV, nous avons ce qui suit :
(a) Sortie numérique = 0.2V/2.5mV = 80 en décimal, ce qui nous donne 1010000 en binaire.
(b) Sortie numérique = 0V/2.5mV = 0 en décimal, ce qui nous donne 0 en binaire.
La différence est de 1010000, soit 7 bits !
Nous pouvons utiliser de nombreuses techniques pour réduire l'impact de la tension d'alimentation
de l’ADC et de la variation de Vref sur la précision de la sortie du CAN.
Programmation en C
Dans le microcontrôleur AVR, cinq registres principaux sont associés à l'ADC. Ce sont ADCH (données
du poids fort), ADCL (données du poids faibles), ADCSRA et ADCSRB (registres de contrôle et d'état
ADC), ADMUX (registre de sélection de multiplexeur ADC) et DIDR0 (Registre de désactivation d'entrée
numérique).
4
bits 7:6 – REFS1:0 : Bits de sélection de référence
Ces bits sélectionnent la référence de tension pour l’ADC, comme indiqué dans le Tableau 3-2. Si ces
bits sont modifiés lors d'une conversion, la modification n'entrera en vigueur qu'une fois cette
conversion terminée (l'ADIF dans ADCSRA est mis à 1).
MUX3..0 Canal
0000 ADC0
0001 ADC1
0010 ADC2
0011 ADC3
0100 ADC4
0101 ADC5
5
bit 4 - ADIF : Indicateur d'interruption ADC
Ce bit est mis à 1 lorsqu'une conversion ADC est terminée et que les registres de données sont mis
à jour. Une interruption est exécutée si le bit ADIE et le bit I dans SREG sont activés. ADIF est mis à
0 par le matériel lors de l'exécution de la ISR de l’interruption correspondante. Alternativement,
ADIF est remis à 0 en écrivant un 1 logique.
bit 3 – ADIE : Activation de l'interruption ADC
Lorsque ce bit est mis à 1 et que le bit I dans SREG est mis à 1, l'interruption conversion terminée
est activée.
bits 2:0 – ADPS2:0 : Bits de sélection du prédiviseur ADC
Ces bits déterminent le facteur de division entre la fréquence d'horloge du système et l'horloge
d'entrée de l’ADC.
ADPS2 ADPS1 ADPS0 Facteur de division
0 0 0 2
0 0 1 2
0 1 0 4
0 1 1 8
1 0 0 16
1 0 1 32
1 1 0 64
1 1 1 128
Lorsqu'une conversion ADC est terminée, le résultat se retrouve dans ces deux registres.
Lorsque ADCL est lu, le registre de données ADC n'est pas mis à jour tant que ADCH n'est pas lu. Par
conséquent, si le résultat est laissé ajusté et pas plus d'une précision de 8 bits n'est requise, il suffit
de lire ADCH. Sinon, ADCL doit être lu en premier, puis ADCH.
Le bit ADLAR dans ADMUX et les bits MUXn dans ADMUX affectent la façon dont le résultat est lu
dans ces registres. Si ADLAR est mis à 1, le résultat est ajusté à gauche. Si ADLAR est désactivé (par
défaut), le résultat est ajusté à droite.
6
Si ADATE est mis à 0, les valeurs ADTS2:0 n'auront aucun effet. Si ADEN dans ADCSRA est mis à 1,
cela lancera une conversion.
7
Exemple de programmation
Dans cet exemple, nous allons convertir la tension présente sur le canal ADC0 et l’afficher sous forme
numérique sur les PORTs D et B. A cet effet deux fonctions adc_init() et adc_read(uint8_t
canal) ont été développées pour initialiser l’ADC et convertir le canal sur lequel la
tension analogique est appliquée.
void adc_init();
uint16_t adc_read(uint8_t ch);
int main()
{
uint16_t adc_result;
while(1)
{
adc_result = adc_read(0); // Lire la tension sur PC0/ADC0
PORTD = adc_result ;
PORTB = adc_result >> 8;
_delay_ms(500);
}
return 0;
}
void adc_init()
{
// AREF = AVcc
ADMUX = (1<<REFS0);
// Démarrer la conversion
ADCSRA |= (1<<ADSC);
return (ADC);
}
8
Une simulation sous Proteus est donnée sur la figure 3.2.