Mesurer une tension (CAN)

Principe

La mesure d’une tension par un microcontrôleur est réalisée en interne par un Convertisseur Analogique-Numérique (CNA).

Ce type de conversion est importante en sciences physique. Par exemple, elle permet d’obtenir la mesure d’une grandeur physique provenant d’un capteur sous la forme d’une tension électrique.

Entrées analogiques de l’Arduino Uno R3

Le microcontrôleur de l’Arduino UNO intègre 6 entrées analogiques disponibles sur les broches A0 à A5. En réalité, ces entrées analogiques sont multiplexées sur un seul CNA.

La tension analogique d’entrée doit-être comprise entre \(0\rm~V\) et \(V_{REF}\) (tension de référence égale à \(5\rm~V\) par défaut).

Le conversion analogique numérique renvoie un nombre \(N\) sous la forme d’un entier naturel sur 10 bits tel que :

\[0 \leq N \leq 1023\]

La résolution analogique (quantum) est donc :

\[q = \dfrac{V_{REF}}{N_{max}} = \dfrac{5}{1023} \approx 4,89\,mV\]

Avertissement

  • La tension appliquée sur les entrées analogiques doivent être strictement comprise entre \(0\rm~V\) et \(5\rm~V\) sous peine de détruire le microcontrôleur.

  • Le temps de conversion, de l’ordre de \(100\rm~\mu s\), ne peut être négligé dans certaines applications.

Montage

Montage potentiométrique sur l’entrée analogique A0

Un potentiomètre (pont diviseur de tension) est branché entre la broche d’alimentation 5V et la broche de masse GND. Il délivre donc une tension réglable en \(0\rm~V\) et \(5\rm~V\) sur la broche A0.

Programme Arduino

Le programme ci-dessous réalise une lecture de l’entrée A0 puis affiche la valeur la tension correspondante (en volt) dans le moniteur série.

/*
 * Lecture d'une tension sur l'entrée analogique A0
 * Affichage sur le port série.
 * David THERINCOURT - 2025
 */

int N;                          // Entier lu sur A0 entre 0 et 1023 (10 bit)
float Vcc = 5;                  // Tension d'alimentation (tension de référence)
float tension;                  // La tension calculée à partir de N

void setup() {
   Serial.begin(9600);          // Paramétrage port série
}

void loop() {
   N = analogRead(A0);          // Lecture valeur sur A0
   tension = N*Vcc/1023.0;      // Calcul de la tension en volts
   Serial.println("------");    // Debut affichage
   Serial.print("N = ");        // ...
   Serial.println(N);           // ...
   Serial.print("Tension = ");  // ...
   Serial.println(tension);     // ...
   delay(1000);                 // temporisation de 1 s
}

Résultats dans le moniteur série

Quelques explications :

  • La fonction analogRead(A0) retourne un entier N sur 10 bits compris entre 0 (pour \(0\rm~V\)) et 1023 (pour \(5\rm~V\)).

  • L’expression N*Vcc/1023.0 donne la valeur de la tension en volt.

  • L’écriture 1023.0, sous la forme d’un flottant, est importante afin d’éviter une division entière !

Note

Pour une meilleure précision, il serait judicieux de mesurer au voltmètre la valeur réelle de tension de référence sur les broches 5V, IOREF ou AREF. Puis de reporter cette valeur dans le programme.

Applications

  • Interface avec un capteur analogique.

  • Un potentiomètre est un capteur de position.