Mesurer de la constante de temps d’un circuit RC avec le comparateur analogique

Principe

La méthode consiste à comparer la tension du condensateur \(u_C\) à une tension de référence (tension de seuil) égale à \(63\%\) de la valeur finale. Cette fonction est réalisée par un comparateur analogique (ALI en régime non-linéaire).

Schéma électrique de la comparaison analogique

La tension du condensateur est sur l’entrée inverseuse :

\[V^- = u_C\]

La tension de référence \(0,63\times V_{CC}\) est sur l’entrée non-inverseuse :

\[V^+ = 0,63 \times V_{CC}\]

Le fonctionnement du comparateur analogique présente alors deux situations :

  • si \(V^- < V^+\) alors \(v_{comp} = V_{CC} \quad\) (niveau logique 1)

  • si \(V^- > V^+\) alors \(v_{comp} = 0 \quad\) (niveau logique 0)

Evolution temporelle des tensions lors de la charge du condensateur

La détection de l’instant \(\tau\) se fait donc sur un front descendant (FALLING) de la sortie du comparateur.

Note

Cette méthode est plus précise que celle qui utilise l’entrée analogique de l’Arduino car :

  • l’impédance d’entrée du comparateur est bien meilleure que celle du CAN ;

  • la comparaison analogique prend beaucoup moins de temps qu’une conversion analogique numérique.

Il est donc possible de mesurer des capacités de l’ordre du nF !

Comparateur analogique de l’Arduino Uno R3

Le microcontrôleur ATMEGA328P de l’Arduino Uno intègre un comparateur analogique.

Schéma interne du comparateur analogique de l’Arduino Uno R3 (datasheet)

  • L’entrée non-inverseuse V+ peut-être connectée soit directement à la broche D6 (AIN0), soit à une tension de référence interne généralement de \(1,1~\rm V\).

  • L’entrée inverseuse V- peut-être connectée soit directement à la broche D7 (AIN1), soit à une des entrées analogiques de A0 à A5 (multiplexeur analogique).

Il est surtout possible de relier la sortie du comparateur à interruption suivant les trois modes de fonctionnement du tableau ci-dessous.

Mode

Origine du déclenchement de l’interruption logiciel

CHANGE

Lorsque la sortie du comparateur change d’état

RISING

Lorsque la sortie du comparateur passe de 0 à 1

FALLING

Lorsque la sortie du comparateur passe de 1 à 0

Montage

Schéma du montage

  • La tension de référence égale à 63% de VCC est appliquée sur la broche D6 (AIN0). Cette tension constante est réglée à l’aide d’un potentiomètre multi-tour.

  • La tension du condensateur est appliquée sur la broche D7 (AIN1).

  • Le circuit RC est chargé par la broche D12.

Le basculement (front descend) du comparateur analogique de l’Arduino se fait lorsque la tension du condensateur atteint la tension de référence (63% de la valeur finale).

Programme

Installer au préalable la bibliothèque analogComp par Leonardo Miliani.

Avertissement

Pour une meilleure précision :

  • Mesurer au voltmètre la tension \(V_{CC}\) ;

  • Régler au voltmètre la tension de seuil \(0,63\times V_{CC}\) ;

  • Mesurer également la valeur de la résistance \(R\).

/*
 * Mesure de la constante de temps d'un circuit RC
 * à l'aide du comparateur analogique d'un Arduino Uno R3
 * R = 10k    jusqu'à 1000 nF   (tau = 10 ms max)
 * R = 100k   jusqu'à 100 nF    (tau = 10 ms max)
 * R = 1M     jusqu'à 10 nF     (tau = 10 ms max)
 * David THERINCOURT - 2025
 */

#include "analogComp.h"

unsigned long t0;               // Instant initial (32 bit)
unsigned long t1;               // Instant détection (32 bit)
unsigned long tau;              // Constante de temps (32 bit)
float C;                        // Capacité du condensateur
float R = 10E3;                 // Résistance série

void setup() {
   Serial.begin(9600);          // Paramétrage moniteur série
   Serial.println("--------");  // Affichage début programme

   analogComparator.setOn(AIN0, AIN1);  // Paramétrage du comparateur (V+ = AIN0) et (V- = AIN1)
   analogComparator.enableInterrupt(changeStatus, FALLING); // Interruption déclenché sur un front descendant

   pinMode(12,OUTPUT);          // Broche digitale D12 en sortie

   // DECHARGE COMPLETE
   digitalWrite(12,LOW);        // Décharge du condensateur avant mesure
   delay(1000);                 // pendant 1 s

   // DEBUT CHARGE
   digitalWrite(12,HIGH);       // Début charge condensateur
   t0 = micros();               // Mesure instant initial
}

void loop() {                   // Pas de boucle
}

void changeStatus() {
   analogComparator.disableInterrupt();
   t1 = micros();               // Mesure instant du front descendant (FALLING)
   tau = t1 - t0;               // Calcul de tau en µs
   C = tau/R * 1E3;             // Calcul de la capacité en nF
   Serial.print("tau = ");      // Début affichage
   Serial.print(tau);           // ...
   Serial.print(" µs \t C = "); // ...
   Serial.print(C);             // ...
   Serial.println(" nF");       // ...
}

Mesures avec une boîte à décade de condensateurs.