Vous êtes sur la page 1sur 8

LE CONVERTISSEUR ANALOGIQUE NUMÉRIQUE

INTRODUCTION
Nombreux sont les microcontrôleurs qui ont affaire à des signaux analogiques ; De par l'infinité de
valeurs qu'ils ont, Les microcontrôleurs ne peuvent pas les traiter. La discrétisation de ces signaux ou leur
conversion analogique numérique apporte une solution à ce problème.

La plupart des microcontrôleurs intègrent des convertisseurs analogiques numérique (ADC).

V.1- RÔLE DES CONVERTISSEURS ANALOGIQUES NUMÉRIQUES

Un convertisseur analogique numérique est un dispositif électronique capable de convertir des tensions
analogiques, comprises entre deux tensions de références Vref+ et Vref-, en une valeur numérique N sur
n bit, N sera comprise entre 0 et 2n-1.

V.2- ÉTAPES D'UNE CONVERSION ANALOGIQUE NUMÉRIQUE

La conversion se fait sur quatre étapes :

 L'échantillonnage : c'est l'action de lire le signal analogique à des périodes fixes respectant le
théorème de Shannon (la fréquence d'échantillonnage doit être, au moins, égale à deux fois la
bande passante du signal à échantillonner). L'échantillonnage est souvent réalisé par des
interrupteurs électroniques commandés.

 Le blocage : il consiste à maintenir constante la valeur lue par échantillonnage pendant une durée
suffisante pour laisser le temps à l'ADC pour finir la conversion. Le maintien de ces tensions se fait
en utilisant des condensateurs associés à des amplificateurs à grandes impédances d'entrées.

 La quantification : c'est le fait d'attribuer au signal échantillonné et bloqué (ayant théoriquement


une infinité de valeurs), un ensemble fini de valeurs avec un écart fixe entre chaque deux valeur
adjacente cet écart est le quantum (cas de la quantification linéaire).

 Le codage : à chaque niveau de quantification correspond un code qui est un mot binaire de
longueur n. un mot de longueur n peut coder 2n niveaux.

1
Figure 1 : principes de la conversion analogique/numérique.

Exemple de conversion : Signal analogique codé sur 2 bits


L'exemple de la figure 2 montre un signal analogique codé sur 2 bit, chaque bit pouvant prendre deux
valeurs (« 0 » ou « 1 »), 22 valeurs seront stockées soit un pas de quantification de 1,25 V (5/4).

Figure 2 : Signal analogique codé sur 2 bits.


Dans cet exemple, le signal a une amplitude de 5 volts :

 0 à 1,25 V, le code sera « 00 »

 1,25 V à 2,5 V, le code sera « 01 »

 2,5 V à 3,75 V, le code sera « 10 »

 3,75 V à 5 V, le code sera « 11 »

Plus le nombre de bits sera important et meilleure sera la précision, mais plus le signal occupera de mémoire !

2
V.3- LE MODULE DE CONVERSION A/N

Ce module est constitué d'un convertisseur Analogique Numérique 10 bits dont l'entrée analogique peut être
connectée sur l'une des 8 (5 pour 16F876) entrées analogiques externes.

Les entrées analogiques doivent être configurées en entrée à l'aide des registres TRISA et/ou TRISE.

L’échantillonneur bloqueur est intégré, il est constitué d’un interrupteur d’échantillonnage et d’une capacité
de blocage de 25 pF.

Figure 3 : L’échantillonneur bloqueur du PIC.

Les tensions de références permettant de fixer la dynamique du convertisseur. Elles peuvent être choisies
parmi Vdd, Vss, Vref+ ou Vref-.

Figure 4 : module CAN du pic 16F877.

3
Le control du module se fait par les deux registres ADCON0 et ADCON1.

ADCS1:ADCS0 : Choix de l'horloge de conversion donc du temps de conversion

00 : Fosc/2

01 : Fosc/8

10 : Fosc/32

11 : Oscillateur RC dédié au CAN

CHS2:CHS0 : choix de l'entrée analogique

000 = channel 0, (RA0)

001 = channel 1, (RA1)

010 = channel 2, (RA2)

011 = channel 3, (RA3)

100 = channel 4, (RA5)

101 = channel 5, (RE0)

110 = channel 6, (RE1)

111 = channel 7, (RE2)

GO/DONE : Une conversion démarre quand on place ce bit à 1. A la fin de la conversion, il est remis
automatiquement à zéro. Ce bit peut aussi être positionné automatiquement par le module
CCP2.

ADON : Ce bit permet de mettre le module AN en service

ADFM : justification à droite ou à gauche du résultat dans les registre ADRESH et ADRESL

ADRESH ADRESL

1 : justifié à droite 0 0 0 0 0 0 XX XXXXXXXX

0 : justifié à gauche XXXXXXXX XX 0 0 0 0 0 0

PCFG3:PCFG0 : configuration des E/S et des tensions de références.

Les 5 broches de PORTA et les 3 de PORTE peuvent être configurés soit en E/S digitales, soit en entrées
analogiques. RA2 et RA3 peuvent aussi être configurées en entrée de référence.

4
Tableau 1 : tableau de configuration des E/S et des tensions de référence du pic 16F877

Pour les utiliser en E/S numériques, il faut écrire '00000110' dans le registre ADCON1.

V.4- PROGRAMMATION DU CONVERTISSEUR ANALOGIQUE NUMÉRIQUE

V.4.a- Étapes:
 Initialisation des paramètres du convertisseur

 Sélection du canal à convertir

 Lancement de la conversion

 Attente fin de conversion (si pas d'interruption)

 Lecture de la donnée convertie

V.4.b- Étape 1 : initialisation

 Activation du convertisseur (ADON = 1)


 Choix des tensions de références (internes ou externes)
 Configuration des entrées analogiques (PCFG0 :PCFG3)
 Choix du temps d'acquisition et de la fréquence de conversion (ADCON2)
 Choix de type de justification (ADFM)

V.4.c- Étape 2 : choix du canal à convertir

Bits CHS0 à CHS2duregistreADCON0

V.4.d- Étape 3 : lancement de la conversion


Bit GODONE du registreADCON0
5
V.4.e- Étape 4 : Attente fin de conversion
Dépend de la technique de programmation, si on n'exploite pas l'interruption, il attendre la fin de
conversion en testant l'un des bits : GODONE (attendre si GODONE passe à 0) ou ADIF (attendre si
ADIF passe à 1). Si on utilise l'interruption, l'ADC interrompt la CPU à la fin de la conversion.

V.4.f- Étape 5 : Lecture de la donnée convertie


La donnée convertie est déposée dans les deux registres ADRESL et ADRESH suivant l'état du bit
ADFM (justifié à droite si ADFM=0, justifié à gauche si ADFM=1). Les registres ADRESL et ADRESH
doivent être lus avant que l'ADC fini une autre conversion.

V.5- UTILISATION DE LA LIBRAIRIE CSS STANDARD

Les options ci-dessous permettent à l'utilisateur de configurer et d’utiliser le module du convertisseur

analogique numérique. Ils ne sont disponibles que sur les circuits avec les ADC. Les options pour les

fonctions et les directives varient en fonction de circuit et sont répertoriés dans le fichier d'en-tête. Sur

certains microcontrôleurs, il y a deux modules ADC indépendants, pour ces circuits le second module est

configuré en utilisant les fonctions de configuration ADC secondaire (Ex. Setup_ADC2).

Fonctions :

setup_adc(mode) Définit le mode A / D comme éteint, l'horloge de l'adc etc.

setup_adc_ports(value) Définit la disposition des PIN de l’ADC, soient analogiques ou numériques.

set_adc_channel(channel) Indique le canal à être utilisé pour l’ADC.

Démarre la conversion et lit la valeur. Le mode peut également contrôler la


read_adc(mode)
fonctionnalité.

adc_done() Retourne 1 si le module ADC a terminé sa conversion.

Préprocesseur :

Configure la taille de retour de read_adc. Par exemple, en utilisant un PIC avec


#DEVICEADC=xx un 10 bits A / D, vous pouvez utiliser 8 ou 10 pour xx- 8 sera de retour l'octet le
plus significatif, 10 sera de retour la lecture complète A / D de 10 bits.

Interruptions:

INT_AD Interruption se déclenche quand une conversion A / D est effectuée

INT_ADOF Interruption se déclenche quand une conversion A / D a expiré

6
Exemple:
Voici un exemple de programme avec des explications en utilisant CCS C pour lire les échantillons de
l’ADC via RS232 :
///////////////////////////////////////////////////////////////////////
/// Commentaires qui explique ce que fait le programme, ///
/// Ce programme affiche le min et max de 30 échantillons ///
/// à partir de ADC sur l'interface RS-232. ///
/////////////////////////////////////////////////////////////// ////////
#include <16F877.h>

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000)

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

// directive de préprocesseur qui inclut les bibliothèques de RS232

void main() {

int i, value, min, max; // déclaration de variable locale

printf("Sampling:"); // fonction printf inclus dans

// la bibliothèque RS232

setup_port_a( ALL_ANALOG ); // Configuration A / D fonctions- intégré

setup_adc( ADC_CLOCK_INTERNAL ); // Horloge interne fonctionne toujours

set_adc_channel( 0 ); // Réglez canal AN0

do { // do forever statement

min=255;

max=0;

for(i=0; i<=30; ++i) { // Prenez 30 échantillons

delay_ms(100); // Attendez un dixième de

// seconde

value = Read_ADC(); // A/D Lire fonctions

if(value<min) // Trouver le plus petit échantillon

min=value;

if(value>max) // Trouver le plus grand échantillon

max=value;

printf("\n\rMin: %2X Max: %2X\n\r",min,max);

} while (TRUE);

7
Exercice : Acquisition des données via le capteur de température LM35

Présentation du capteur : Le LM35 fait partie des capteurs de température électroniques de précision en
structure intégrée.

Figure 5 : Capteur de température LM35.

D’après la fiche technique : chaque 10mV correspond à 1Co.

Autrement un volt correspond à 100 degrés Celsius.

La lecture analogique d’un signal de 0 à 5V étant codée de 0 à 1023, on a la formule :

Temp = V olt *(5/1023) * 100; Volt entre (0 et 1023)


Travail demandé :
1- Réaliser le montage ci-dessous ;
2- Développer un programme qui affiche la température sur l’afficheur LCD. Si la température dépasse
40C°alors une diode rouge qui sera connectée à la PIN RD0 s’allume.
3- Ajouter la fonctionnalité de l’envoie de la température sur le port RS232.

Figure 6 : Acquisition de la température.