dimanche 27 décembre 2015

convertisseur numérique/analogique

La majorité des microcontrôleurs possèdent au moins un périphérique de conversion analogique/numérique. Par contre les convertisseurs numérique/analogiques sont moins répandus. Dans cette article je fais une présentation des différentes méthodes utilisées pour convertir un signal numérique en signal analogique.

PWM

Comme presque tous les MCU possèdent au moins 1 périphérique PWM l'utilisation de celui pour convertir un signal numérique en analogique est très répandu. Son principe de fonctionnement est basé sur l'intégration du signal ou si vous préférez la moyenne. Voici une illustration.

On a donc un signal numérique qui varie entre Vcc et 0 volt à la sortie d'une broche du MCU. Cependant le rapport cyclique de ce signal varie selon l'amplitude du signal analogique qu'on veut reproduire. Le filtre passe-bas composé d'une résistance R et d'un condensateur C sert d'intégrateur. L'onde rectangulaire du PWM est envoyée à l'entrée du filtre et à la sortie on retrouve un voltage dont la valeur et directement proportionnelle au rapport cyclique. En effet lorsque le signal est à Vcc le condensateur se charge à travers la résistance et lorsque le signal et à 0 volt le condensateur se décharge à travers la résistance. Lorsque le rapport cyclique est de 50% le voltage moyen est de Vcc/2. En fait le voltage moyen à la sortie est


Vout=Vcc/Rcy*100
où Rcy est le rapport cyclique exprimé en pourcentage du cycle. Pour que ce convertisseur fonctionne bien il faut que la fréquence de coupure Fc calculée par la formule:

  Fc=1/2*PI*R*C
soit beaucoup plus basse que la fréquence du PWM. Avec un filtre simple pôle comme celui illustré ici Fc doit-être au moins un dixième la fréquence PWM. Par exemple si on veut convertir un signal audio avec une fréquence maximale de 10Khz la fréquence PWM doit-être au minimun 20Khz et le filtre devrait avoir une valeur Fc de 2Khz ou plus bas. En remplaçant ce filtre simple par un filtre actif multipôles la fréquence de coupure du filtre peut-être au maximum la moitié de la fréquence PWM. Par exemple un filtre 8 pôles avec une fréquence de coupure 10Khz atténue la fréquence PWM de 48db. Alors que le filtre passif 1 pôle ne l'atténue que de 6db.

Cette méthode de conversion est simple et économique. On peut obtenir un résultat satisfaisant avec un filtre passif à 2 pôles. C'est à dire 2 filtres bout à bout. Mais dans ce cas On calcul Fc du premier filtre au double de la valeur de 2ième filtre en tenant compte de la charge du second filtre. Une façon simple de procéder est d'utiliser la même valeur pour R mais d'utiliser 2*C pour le deuxième filtre. L'impédance de sortie doit-être d'au moins 10 fois l'impédance de sortie du filtre pour ne pas le charger. exemple:


  Fpwm=20khz
  Fc=10Khz  et 1Kohm
  C=1/2*PI*R*FC ->> C= 1/2*PI*1000*10000=159nF 
la valeur standard la plus proche est de 150nF

Avec ce filtre il faut utiliser une fréquence PWM d'au moins 20Khz pour de l'audio jusqu'à 10Khz.

Conversion delta-sigma

Le convertisseur delta-sigma fonctionne sur le même principe d'intégration d'une onde rectangulaire sauf qu'il ne n'agit pas d'une fréquence constante dont le rapport cyclique varie selon l'amplitude du signal analogique. Les échantillons numériques n'ont qu'un seul bit. Pour représenter un voltage plus élevé on fait suivre plusieurs bit à 1 et pour représenter un signal de faible amplitude on fait suivre plusieurs bit à zéro. Les bits se succèdent à une fréquence beaucoup plus rapide que pour le PWM. On peut utiliser un périphérique SPI pour sortir les bits.

Plus il y a de 1 qui se succèdent plus le voltage monte à la sortie du filtre. Plus il y a de zéro qui se succèdent plus le voltage descend vers zéro. Pour que ça fonctionne il faut que les échantillons représentent une densité d'impulsion plutôt qu'une amplitude.

Conversion par diviseur de tension

Il y a 2 méthodes.

Première méthode: utilisation de résistances croissantes.

Ce convertisseur à 4 bits et chaque bit doit donner en tension en sortie qui est le double de celle du bit de poids précédent. Lorsque tous les bits en sortie sont à 1 on doit avoir une tension en sortie de:

  Vout=15*Vin/16
Supposons que la valeur de la résistance Ro est de 1Kohm. On doit avoir en sortie

Vout=1*Vin/16=Rb0*Vin/(Rb0+Ro) 
Rb0 doit-être de 15Kohm.
Rb1 doit-être de 15Kohm/2=7,5Kohm
Rb2 doit-être de 15Kohm/4=3,75Kohm
Rb3 doit-être de 1Kohm/8=1,875Kohm
Ces valeurs ne sont valides que si on met les bits qui ne sont pas à 1 en haute impédance et non à zéro volt. Car si on met c'est bits à zéro volt ça modifie la valeur de la branche basse du diviseur de tension. exemple si b0-b2 sont à zéro alors que b3 est à Vcc la valeur équivalente de Ro1 est de:

Ro = 1/(1/Ro+1/Rb0+1/Rb1+1/Rb2)= 682 ohm
donc la tension en sortie serait de

Vout = 1,875*Vin/(1,875+0,682)
au lieu de

Vout=1,875*Vin/(1,875+1)

Cette méthode n'est pas pratique car elle donne des valeurs de résistances non standard et oblige à mettre les bits qui ne sont pas à Vcc en haute impédance.

méthode R/2R

Heureusement il y a une méthode beaucoup plus simple. Le diviseur de tension R/2R n'utilise que 2 valeurs de résistances dont l'une est le double de l'autre d'où son nom.

Cette arrangement de résistances fait en sorte que quel que soit la valeur des bits en sortie la branche basse du diviseur de tension vue par les bits de poids plus faible garde une valeur constante de R. De plus on peut choisir 2 valeurs standards ou une seule valeur standard en utilisant 2 résistances en série pour les 2R. Le seul inconvénient c'est que ça demande plus de résistances.


  1. La valeur équivalente de résistances en parallèle est l'inverse de la somme de leur conductance.