Principe de la conversion Analogique / Numérique par approximations successives.

Mise en oeuvre sur microcontrôleur tel le PIC16F84.

Cette technique de conversion est simple à implémenter sur un microcontrôleur. Le montage proposé comprend
1. le microcontrôleur dans lequel s'exécutera un programme suivant l 'algorithme exposé ci-dessous
2. Un convertisseur Numérique / Analogique très simple ( constitué par quelques résistances)
3. Un circuit comparateur de tensions (analogiques) à sortie logique, tel le LM139.

L'ensemble de ces 3 éléments est câblé de façon à former une boucle de feed-back :
1. Un port de sortie logique à 8 bits du microcontrôleur attaque le convertisseur N/A à résistances.
2. La valeur analogique obtenu en sortie de ce réseau est comparée à la valeur analogique que nous souhaitons convertir en sa représentation logique binaire sur 1 octet.
3. La sortie du comparateur est reliée à un port en entrée du microcontrôleur, le résultat de la comparaison est donc utilisable dans l'algorithme.



PREMIERE METHODE DE CONVERSION : COMPARAISON A TOUTES LES VALEURS POSSIBLES

Cette méthode vous aidera à comprendre la suite.

La méthode consiste à faire générer sur la sortie logique du microcontrôleur successivement des valeurs croissantes de l'octet 0..1..2..3...n...n+1, ( on appelle cela "incrémenter" ) ce qui produit une rampe de tension croissante à la sortie du réseau de résistances ( convertisseur Numérique / Analogique ). Il suffit d'arrêter le processus dès que le comparateur détecte que la tension obtenue atteint la valeur de la tension à convertir. ( en scrutant à chaque incrémentation de l'octet proposé l'état logique en retour renvoyé au port en entrée du microcontrôleur). L'octet à cet instant représente le résultat de la conversion Analogique / Numérique, et peut être mémorisé par le programme pour utilisation ultérieure.

Défaut de la méthode : le temps de conversion peut devenir relativement long lors de la conversion de valeur de tensions élevées, puisqu'il peut atteindre (dans le cas d'une conversion sur 8 bits) 256 passages dans la boucle du programme. De plus ce temps croit exponentiellement avec ce nb de bits, en 2 ^ n soit 16384 passages dans la boucle pour 16 bits de résolution.

DEUXIEME METHODE DE CONVERSION : CONVERSION PAR APPROXIMATIONS SUCCESSIVES

C'est la méthode des devinettes : on va deviner chaque bit une fois pour toutes ce qui va limiter le nombre de passages dans la boucle à n pour n bits de résolution.

Analyse pour une résolution de 8 bits (numérotés de 0 à 7 ), soit 256 valeurs possibles pour la tension.

1er passage dans la boucle :
On divise l'échelle des 256 valeurs possibles en 2 parties de 128 valeurs, et on se propose de deviner dans quelle partie (haute ou basse) se situe la valeur à convertir. Pour cela, le microcontrôleur propose 128 comme valeur. La sortie du comparateur indique alors dans quelle moitié de l'échelle se situe le résultat. Remarquons que cela consiste à positionner (mettre à 1 logique) le bit de poids fort ( le bit 7) de l'octet.

* Soit la valeur à convertir est inférieure à cette valeur médiane et la sortie du comparateur indiquera un zéro logique : il faut alors considérer que le positionnement à 1 logique du bit 7 conduit à une valeur trop élevée pour l'octet. On doit donc le remettre à zéro pour la suite des opérations. Mais l'opération à permis de connaître la valeur du bit 7. (=0).
* Soit la valeur à convertir est supérieure à cette valeur médiane et la sortie du comparateur indiquera un UN logique : il faut alors considérer que le positionnement à 1 logique du bit 7 conduit à une valeur trop petite pour l'octet. On doit donc le laisser à UN pour la suite des opérations et augmenter d'avantage la valeur de l'octet en positionnant d'autres bits. Toutefois l'opération à permis de connaître la valeur du bit 7 (=1).
Nous avons donc obtenu la valeur d'un des 8 bits de l'octet en un seul passage dans la boucle. Il va en être de même pour les 7 autres.

2eme passage dans la boucle :
On divise la 1/2 échelle des 128 valeurs restantes possibles en 2 parties de 64 valeurs, et on se propose de deviner dans quelle partie (haute ou basse) se situe la valeur à convertir. Pour cela, le microcontrôleur propose soit 64 soit 128+64 = 192 comme valeur, ce qui revient à se placer au 1/4 ou ou 3/4 de l'échelle entière des 256 valeurs, soit encore à la moitié de la 1/2 échelle basse ou à la moitié de la 1/2 échelle haute. En fait cela revient à positionner à positionner (mettre à 1 logique) le bit 6 de l'octet, en conservant la valeur trouvée précédemment pour le bit 7. Donc cela se fait en une opération unique.

* Soit la valeur à convertir est inférieure à cette nouvelle valeur proposée et la sortie du comparateur indiquera un zéro logique : il faut alors considérer que le positionnement à 1 logique du bit 6 conduit à une valeur trop élevée pour l'octet. On doit donc le remettre à zéro pour la suite des opérations. Mais l'opération à permis de connaître la valeur du bit 6. (=0).
* Soit la valeur à convertir est supérieure à cette nouvelle valeur et la sortie du comparateur indiquera un UN logique : il faut alors considérer que le positionnement à 1 logique du bit 6 conduit à une valeur trop petite pour l'octet. On doit donc le laisser à UN pour la suite des opérations et augmenter d'avantage la valeur de l'octet en positionnant d'autres bits. Toutefois l'opération a permis de connaître la valeur du bit 6 (=1).

Nous avons donc de nouveau obtenu la valeur d'un des 8 bits de l'octet en un seul passage dans la boucle. Il va en être de même pour les 6 autres.

Je vous laisse réitérer le raisonnement pour les bits suivants, le principe restant identique. Après seulement 8 passages dans la boucle nous obtenons la conversion numérique de la valeur analogique.

Exercice : je vous propose de dessiner vous-même un joli algorithme avec des losanges et des " oui " et aussi des " non " et à colorier toutes ces choses à votre goût...
Quant à la mise en pratique, vous pouvez analyser mon montage " CODEUR PPM à PIC16F84 POUR RADIOCOMMANDE ".

VOICI LA PROCEDURE CORRESPONDANTE ECRITE POUR LE PIC16F84

voir le programme complet dans "CODEUR PPM à PIC16F84 POUR RADIOCOMMANDE"

;converson A/N par aproximations successives
convAN
clrf PORTB
clrf valeur
clrf ebitn

bsf STATUS,0 ;pour la 1ere passe seulement

cnv2 ;ENTREE BOUCLE
rrf ebitn,f ;décale le "1" dans le bit à tester ( 1--> )
btfsc STATUS,0
goto cnv4 ;fin de conversion après 8 pas ( 1-->c )

movf ebitn,w
iorwf valeur,f ;ajout du bit

movf valeur,w
movwf PORTB ;sortie sur le réseau de R-2R (conv N/A)
nop ;deux nop pour tempo (IMPORTANT !! tp stab de U)
nop

btfsc PORTA,4 ;test sortie du comparateur LM339; on teste le bit
goto cnv3

movf ebitn,w
subwf valeur,f ;on retranche le bit si dépassement
goto cnv3

cnv3
bcf STATUS,0 ;raz bit de carry
goto cnv2 ; BOUCLE


cnv4
return

 

Silicium628