Circuit RC - Mesurer la constante de temps à l'aide d'un microcontrôleur

Mesure de la constante de temps

MéthodePrincipe de la mesure et montage

Le montage est donné ci-contre. La carte Arduino est utilisée :

  • pour appliquer une tension de 5 volts aux bornes de l'assemblage résistance - condensateur en série grâce à une sortie numérique ;

  • pour mesurer la tension aux bornes du condensateur à l'aide d'une entrée analogique.

On peut placer un interrupteur poussoir en dérivation sur le condensateur pour permettre une décharge instantanée avant de mesurer la durée de la charge.

Une fois le condensateur déchargé, la sortie numérique n°2 de la carte passe à l'état haut, une tension \(U_0 = 5\ \mathrm V\) s'applique aux bornes du montage.

Lors de la charge, la tension aux bornes du condensateur est donnée par la relation suivante :

\(U_C = U_0 \times \left(1- e^{-\dfrac{t}{\tau}}\right)\)

On en déduit que pour \(t=\tau\) :

\(U_C = 0{,}632 \times U_0\)

En mesurant la tension aux bornes du condensateur à l'aide de la carte Arduino, on peut déterminer la date t à laquelle ce niveau est atteint, et donc connaître \(\tau\).

Courbe de charge d'un condensateur dans un circuit RCInformations[1]

RemarquePrécision des mesures

Pour obtenir des mesures suffisamment précises, il faut utiliser des composants conduisant à des constantes de temps longues : quelques centaines de millisecondes au minimum.

Deux associations ont donné des résultats satisfaisants :

  • \(C = 100\ \mathrm{\mu F}\) et \(R = 10\ \mathrm{k\Omega}\), soit \(\tau = 1\ \mathrm s\)

  • \(C = 100\ \mathrm{nF}\) et \(R = 10\ \mathrm{M\Omega}\), soit \(\tau = 1\ \mathrm s\)

MéthodeMontage

Le montage ci-dessous utilise un condensateur chimique : attention à la polarité.

L'interrupteur poussoir permet de court-circuiter le condensateur si la décharge est trop lente.

Mesure la constante de temps d'un circuit RC à l'aide d'une carte ArduinoInformations[2]

Le schéma est aussi téléchargeable au format Fritzing pour édition ou au format vectoriel.

MéthodeLe programme

Le programme renvoie les résultats sur le moniteur série. Il est possible de le modifier pour un affichage sur écran LCD, mais le gain est minime.

1
unsigned long temps0, temps1;  // Deux variables temps pour mesurer tau
2
float tau;  // Constante de temps (décimal)
3
int pinU = 2;  // Broche alimentant le circuit RC
4
5
void setup() {
6
  // put your setup code here, to run once:
7
  Serial.begin(9600) ;  // Initialisation de la communication série
8
  pinMode(pinU, OUTPUT);  // On définit la borne d'alimentation du circuit en Sortie
9
  digitalWrite(pinU, 0);  // On applique une tension nulle en entrée du circuit RC
10
}
11
12
void loop() {
13
  // put your main code here, to run repeatedly:
14
  digitalWrite(pinU, 0);
15
  Serial.println("Décharge du condensateur");
16
  Serial.println("Pressez l'interrupteur poussoir de court-circuit si décharge trop longue");
17
  while (analogRead(A0) > 0) {  // On s'assure que le condensateur se décharge
18
    Serial.println(analogRead(A0));  // On lit la tension aux bornes du condensateur (valeur entre 0 et 1023)
19
    delay(500);
20
  }
21
  Serial.println("La mesure va commencer dans 5 secondes");  // On va commencer la mesure
22
  Serial.println("Lachez l'interrupteur de court-circuit");
23
  delay(5000);
24
  Serial.println("Mesure en cours");
25
  temps0 = micros();  // On relève t0
26
  digitalWrite(pinU, 1);  // On applique 5V en entrée du circuit RC
27
  while (analogRead(A0) < 647) {  // Tant que le niveau lu est inférieur à 647 (63.2% de 1023)
28
    // on boucle sans rien faire
29
  }
30
  temps1 = micros();  // Une fois sorti de la boucle on mesure t1
31
  tau = (temps1 - temps0) * 1e-6;  // Calcul de tau, convertie en secondes
32
  Serial.print("Constante RC en s : ");
33
  Serial.println(tau, 3); // On affiche tau avec 3 chiffres après la virgule
34
  Serial.println("Nouvelle mesure dans 5 secondes");
35
  delay(5000);
36
}

ExempleExemples de mesures

Ci-contre la mesure réalisée avec les deux composants suivants (valeurs mesurées au multimètre) :

  • Condensateur \(C=98{,}2\ \mathrm{nF}\) ;

  • Résistance \(R=10{,}6\ \mathrm{M\Omega}\)

Dans ces conditions, la constante de temps calculée est \(\tau_{calc}=1{,}04\ \mathrm s\).

Avec le montage, on obtient par la mesure \(\tau_{mes} = 1{,}061\ \mathrm s\)

Affichage de la mesure de la constante de temps sur le moniteur sérieInformations[3]

Ci-contre la mesure réalisée avec les deux composants suivants (valeur mesurée au multimètre pour la résistance) :

  • Condensateur \(C=100\ \mathrm{\mu F}\) ;

  • Résistance \(R=9{,}81\ \mathrm{k\Omega}\)

Dans ces conditions, la constante de temps calculée est \(\tau_{calc}=0{,}981\ \mathrm s\).

Avec le montage, on obtient par la mesure \(\tau_{mes} = 1{,}044\ \mathrm s\)

Affichage de la mesure de la constante de temps sur le moniteur sérieInformations[4]

ComplémentProlongements possibles

À partir du même montage et en modifiant légèrement le programme, on peut l'utiliser pour déterminer la valeur d'une capacité inconnue si on fournit aux élèves la valeur de la résistance R.

Il peut être envisagé de leur faire modifier le programme en ce sens.

Variante - Étude statistique - Répétabilité de la mesure

Principe

Il s'agit d'effectuer une série d'un grand nombre de mesures consécutives afin d'effectuer une étude statistique (incertitude de type A ou répartition des résultats).

Les résultats sont envoyés sur le moniteur série et formatés de façon à générer un fichier csv.

Les mesures de la constante de temps τ peuvent être récupérée directement dans le moniteur série par un copier/coller ou envoyés dans un fichier par l'intermédiaire de l'application Coolterm par exemple.

MéthodeProgramme modifié permettant de mesurer consécutivement plusieurs mesures de la constante de temps

Le programme ci-dessous effectue 10000 mesures de la constante de temps. Toutes les instructions sont exécutées dans la boucle void setup, donc le programme s'arrête dès que le nombre de mesures choisi (modifiable dans le programme) est atteint.

1
/*Ce programme effectue 100 mesures de la constante de temps
2
   d'un circuit RC.
3
   Les résultats sont envoyés vers le moniteur série et peuvent
4
   être récupérés par un copier/coller ou capturés via un logiciel
5
   de type CoolTerm
6
*/
7
unsigned long temps0, temps1;  // Deux variables temps pour mesurer tau
8
float tau;  // Constante de temps (décimal)
9
int pinU = 2;  // Broche alimentant le circuit RC
10
int compt = 0; // Compteur de mesures
11
12
void setup() {
13
  // put your setup code here, to run once:
14
  Serial.begin(9600) ;  // Initialisation de la communication série
15
  Serial.print("Numero mesure");
16
  Serial.print(";");
17
  Serial.println("Tau");
18
  pinMode(pinU, OUTPUT);  // On définit la borne d'alimentation du circuit en Sortie
19
  digitalWrite(pinU, 0);  // On applique une tension nulle en entrée du circuit RC
20
  while (compt < 10000) {
21
    digitalWrite(pinU, 0);
22
    compt++;
23
    while (analogRead(A0) > 1) {  // On s'assure que le condensateur se décharge
24
      // On boucle sans rien faire
25
    }
26
    temps0 = micros();  // On relève t0
27
    digitalWrite(pinU, 1);  // On applique 5V en entrée du circuit RC
28
    while (analogRead(A0) < 647) {  // Tant que le niveau lu est inférieur à 647 (63.2% de 1023)
29
      temps1 = micros();
30
    }
31
    // Une fois sorti de la boucle on mesure t1
32
    tau = (temps1 - temps0) * 1e-6;  // Calcul de tau, convertie en secondes
33
    Serial.print(compt);
34
    Serial.print(";");
35
    Serial.println(tau, 8); // On affiche tau
36
  }
37
  Serial.println("Terminé");
38
}
39
void loop() {
40
41
}

ExempleExemples de résultats

On donne le bilan des 10000 mesures, dont leur répartition ci-contre.

La feuille de calcul avec l'analyse statistique des mesures est fournie en téléchargement.

Répartition des résultats des mesures de la constante de temps