PrécédentLes boutons-poussoirs6 / 24SuivantLes capteurs
3. Les microcontrôleurs

La conversion des grandeurs

La conversion des grandeurs

Les Convertisseurs Analogiques-Numériques

Les Convertisseur Analogiques-Numériques, plus familièrement appelés CAN ou ADC, permettent de faire la jonction entre le monde physique qui est essentiellement analogique (température, pression...) et le monde des microcontrôleurs qui fonctionne en numérique.

💡

Pour rappel, un signal numérique est un signal qui prend un nombre fini de valeur (0 et 1 typiquement) alors qu'un signal analogique est définie dans un intervalle avec une infinité de valeur entre les bornes.

Un ADC va donc devoir échantillonner, c’est à dire prélever une valeur de la grandeur  [1] à un instant $t$ puis numériser la valeur analogique.

La figure suivante représente les échantillons des deux signaux.

Résolution de l'ADC

Pour notre signal analogique, bien que les valeurs de tension soient infinies, la valeur en sortie de l'ADC est finie et la précision de la valeur lue dépend de la résolution de l'ADC. Cela correspond au nombre de bits sur lequel la valeur est enregistrée.

La précision dépendra de la plage de tension de l'ADC.
Si nous souhaitons obtenir un ADC précis, il faut minimiser l'étendue de la plage de tension et augmenter le nombre de bits de résolution.

Il existe différents types d'ADC, tels que l'ADC à rampe, l'ADC à approximation successive ou encore l'ADC à sigma-delta. Chaque type d'ADC a ses propres caractéristiques et avantages en fonction de l'application pour laquelle il est utilisé.

Considérons un ADC avec une résolution de 8 bits. Cet ADC est alimenté en 5V dans notre exemple.

Avec une résolution de 8 bits, le nombre en sortie de l'ADC est compris entre 0 et 255 ($2^8-1$).
Ainsi, l'ADC avec N bits de résolution aura une résolution de tension $\Delta V$ valant :

$$ \Delta V = \frac{V{ref}}{2^N-1} = \frac{5}{2^{8}-1} = 19.6~mV $$

Typiquement, une tension de 19 $mV$ en entrée de l'ADC sera interprétée avec la valeur 0 car c'est le premier intervalle de tension mesurable. Le tableau suivant représente les valeurs de l'ADC en fonction de la tension en entrée :

Tension (mV)

Valeur ADC

0

0

...

...

18

0

...

...

21

1

...

...

100

5

...

...

5000

255

...

...

6000

255

Tableau ADC

💡

On constate que pour les tension en dehors des intervalles de tension de l'ADC, la sortie sera égale à la valeur minimale ou maximale de l'ADC.

Fréquence d'échantillonnage

Sur cette autre figure, nous voyons les différents niveau de tension lus par l'ADC. La période entre deux échantillons permet de déterminer la fréquence d'échantillonnage, exprimée en $Hz$.

Dans ce cas, la fréquence vaut $\frac{1}{T} = \frac{1}{0.002} = 500~Hz$

💡

Lors de l'échantillonnage de signaux, il convient de respecter un théorème bien connu : le théorème de Shannon.
Ce théorème stipule que la fréquence d'échantillonnage d'un signal doit être égale à au moins deux fois la fréquence maximale du signal.
Ce rapport de 2 entre les 2 fréquences permet de restituer le signal par la suite.

Ainsi, si nous souhaitons échantillonner un signal audio de 15 kHz, il nous faudra faire un échantillonnage d'au moins 30 kHz. La figure suivante représente un signal sous-échantillonné :

Un sous-échantillonnage
Un sous-échantillonnage

Si nous abaissons la fréquence d'échantillonnage, le nouveau signal reconstruit (rouge) ne représente pas le signal d'origine.

Les cartes Arduino UNO intègrent un CAN avec 6 canaux, c'est à dire que l'on peut mesurer jusqu'à 6 signaux différents.
Les broches utilisées par le CAN sont numérotées de à .

Cependant, sur d'autres cartes, comme les ESP12 NodeMCU, il n'y a qu'un CAN avec un seul canal.
Si nous souhaitons lire les valeurs de 3 signaux, nous ne pouvons pas le faire.

Mise en pratique avec la carte CREPP.io

La carte CREPP.io intègre un potentiomètre relié à l'entrée analogique de la carte [2]

Le potentiomètre de la carte
Le potentiomètre de la carte
💡

Un potentiomètre est un composant à trois broches qui permet de récupérer une tension en fonction de la position d'un curseur mécanique.

Le schéma d'un potentiomètre
Le schéma d'un potentiomètre
⚠️

Ne pas oublier de mettre le jumper sur l'entrée .

Code

Code pour le potentiomètre

La section suivante présente quelques solutions pour lire des signaux.

Le multiplexage

Il est possible de créer virtuellement des ADC en faisant du multiplexage, c'est à dire en redirigeant physiquement les signaux.

Un multiplexeur est vu comme un aiguilleur de train : en fonction d'une commande, une seule des entrée est redirigée vers la broche commune :

Un multiplexeur
Un multiplexeur

L'entrée qui doit ête redirigée est choisie en fonction des valeurs sur l'entrée E1 et E2 :

E1

E2

S

0

0

A

0

1

B

1

0

C

1

1

D

Sélection des entrées du multiplexeur

⚠️

La sélection des entrée en fonction du code sur E1 et E2 n'est pas absolue et dépend du composant choisi. Il a été mis en place pour illustrer le principe du multiplexage.

Avec deux broches numériques, nous pouvons lire quatre signaux avec un seul ADC. Il existe également des multiplexeurs avec $2^N$ entrées avec $N$ broches de commande.

Un multiplexeur avec un ADC
Un multiplexeur avec un ADC

Les ADC externes

Il est également possible d'utiliser des ADC externes à notre carte (ESP, Arduino). Ils existent en circuits dédiés et permettent de lire les signaux en utilisant un protocole de communication standard, généralement de l'I2C ou du SPI.

Un ADC assez répandu est l'ADS1115. Ce module est présent sur la carte CREPP.io et permet d'étendre le nombre d'entrées analogiques sur la carte.

Un ADC ADS1115
Un ADC ADS1115

Cet ADC possède 4 canaux et sa résolution est de 16 bits, ce qui permet de lire des signaux avec des variations de 0.05 $mV$ [3]

Protection des ADC

Lors de la lecture des signaux, nous souhaitons que la valeur maximale de notre signal soit inférieure à la valeur maximale de l'ADC.

Supposons que la tension maximale de notre ADC soit de 5V (Typiquement un ADC sur les cartes Arduino). Et que nous souhaitons lire un signal dont la valeur maximale est de 7V.
Une protection bien adaptée impose une tension de 5V quand la tension d'entrée est de 7V. Il va falloir faire une adaptation de tension avec un pont diviseur de tension.

(0,0) to[short, o-] (1,0) to [R, l_=$R_2$] (1,2) to [R, l_=$R_1$] (1,4) to[short, -o] (0,4); (2,0) to[open, v>=$Vs$] (2,2); (0,0) to[open, v>=$Ve$] (0,4);

Soit le pont diviseur de tension formé par les deux résistances $R_1$ et $R_2$.
Le pont est alimenté avec la tension $Ve$.
La tension de sortie $V_s$ va en entrée de l'ADC d'une carte Arduino (pour notre exemple)

La tension en sortie d'un pont diviseur de tension vaut :

$$ V_s = V_{e} \cdot \frac{R_2}{R_1+R_2} $$

Nous allons donc calculer $R1$ après avoir fixé $R2$ valant 100 $k\Omega$ :

$$ R1 = \frac{R2 \cdot(Ve-Vs)}{Vs} = \frac{100\cdot(7-5)}{5} = 40 k\Omega$$

La valeur normalisée la plus proche est $39 k\Omega$.
Ainsi, en prenant $R1=40k\Omega$ et $R2=100k\Omega$ et une tension $Ve=7V$ , nous avons une tension en sortie de pont valant $5V$.

Notes

  1. Dans notre cas une tension.

  2. En configuration de base il n'y a qu'une seule entrée. La carte CREPP.io en possède 5, cf Section multiplexage.

  3. Alimenté sous MATH10

  4. Résistance en entrée de l'ADC

Questionnaire

[ADCQuizz]

Un ADC permet de :
[a]4 0 Générer une tension analogique 1 Lire une tension et la convertir en un nombre fini 0 Filtrer un signal numérique

A quelle fréquence devons-nous au minimum échantillonner un signal de 25 kHz ? [b]4 0 12.5 $kHz$ 0 25 $kHz$ 1 50 $kHz$ 0 100 $kHz$ 0 250 $kHz$

La résolution d'un ADC dépend de : [c]4 0 La fréquence d'échantillonnage 1 Du nombre de bits de l'ADC 1 La plage de tension de l'ADC 0 La consommation électrique de l'ADC

Quelle structure permet de protéger les ADC: [diff]4 0 Un pont de Graëtz 1 Un pont diviseur de tension 0 Un pont de Wien

PrécédentLes boutons-poussoirs6 / 24SuivantLes capteurs