Mesure de la constante de temps d’un circuit RC avec l’entrée analogique
Principe
Un condensateur est chargé à travers une résistance sous tension constante. Des mesures périodiques de la tension du condensateur permettent de détecter le seuil de 63% de la valeur finale. La constante de temps est alors égale à la durée mesurée entre l’instant initial et l’instant de la détection.
Montage

Schéma du montage avec un Arduino UNO R3
Données :
La broche
D11
, paramétrée en sortie digitale, charge (ou décharge) le condensateur à travers la résistance \(R\).L’entrée analogique
A0
mesure périodiquement la tension \(u_C\) aux bornes du condensateur.
Avertissement
La durée de conversion, sur les entrées analogiques, est en moyenne de \(100~\rm µs\). En conséquence, pour une bonne précision (ex. au moins 100 points de mesures sur la durée à mesurer), il faut choisir une constante de temps minimale telle que :
Avertissement
Il est conseillé de choisir une résistance maximale à \(100~\rm k\Omega\) (la documentation technique précise \(10~\rm k\Omega\)).
Mesure de la constante de temps
Le programme Arduino ci-dessous charge le condensateur sous la tension constante \(5~\rm V\) et mesure les instants t0
(début de la charge) et t1
(63% de la charge) afin de calculer de la constante de temps tau
.
Le programme mesure également les valeurs de la tension initiale Nmin
et de la tension finale Nmax
afin de vérifier si la charge du condensateur est conforme (entre 0
et 1023
).
Note
Il faut appuyer sur le bouton Reset de l’Arduino pour lancer la mesure. Il n’y a pas de boucle infinie !
/* Mesure de constante de temps d'un circuit RC
* David THERINCOURT - 2025
* Appuyer sur le bouton RESET de l'Arduino pour lancer la mesure
*/
int pinD11 = 11; // Broche D11
int Nmin, Nmax; // Valeurs minale et maximale
unsigned long t0; // Instant initiale
unsigned long t1; // Instant à 63% de Vcc
unsigned long tau; // Constante de temps
void setup() {
// PARAMETRAGE
Serial.begin(9600); // Initialisation du port série
pinMode(pinD11, OUTPUT); // Broche digitale en sortie
// DECHARGE COMPLETE
digitalWrite(pinD11,LOW); // D8 à 0V
delay(1000); // Temporisation pour décharge compléte
Nmin = analogRead(A0); // Tension de bébut de charge (10 bit)
// CHARGE COMPLETE
int N = 0; // Initialisation
digitalWrite(pinD11, HIGH); // D8 à 5V
t0 = micros(); // Mesure de l'instant initial
while (N<646) { // Boucle tant que la tension inférieure à seuil (0,632*1023=646)
N = analogRead(A0); // Lecture de la tension du condensateur
}
t1 = micros(); // Mesure de l'instant à 63% de la valeur finale
tau = t1 - t0; // Calcul de la constante de temps (µs)
delay(1000); // Temporisation pour charge complete
Nmax = analogRead(A0); // Tension de fin de charge (10 bit)
// AFFICHAGE
Serial.println("-------"); //
Serial.print("Nmin = "); //
Serial.println(Nmin); //
Serial.print("Nmax = "); //
Serial.println(Nmax); //
Serial.print("tau = "); //
Serial.print(tau/1000.0); //
Serial.println(" ms"); //
}
void loop() {
// Boucle sans fin pas utilisée ici !
}

Mesures pour des capacités de \(470~\rm nF\), \(680~\rm nF\) et \(1000~\rm nF \quad (\pm10\%)\)
Mesure de la capacité du condensateur
Sachant que le temps caractéristique est défini par la relation :
Le calcul de la capacité C du condensateur est :
If suffit donc d’ajouter cette relation dans le code précédent !
/* Mesure de la capacité d'un circuit RC
* David THERINCOURT - 2025
* Appuyer sur le RESET de l'Arduino pour lancer la mesure
*/
int pinD11 = 11; // Broche D11
int Nmin, Nmax; // Valeurs minale et maximale
unsigned long t0; // Instant initiale
unsigned long t1; // Instant à 63% de Vcc
unsigned long tau; // Constante de temps
float R = 100E3; // Valeur de la résistance
float C; // Valeur de la capacité à calculer
void setup() {
// PARAMETRAGE
Serial.begin(9600); // Initialisation du port série
pinMode(pinD11, OUTPUT); // Broche digitale en sortie
// DECHARGE COMPLETE
digitalWrite(pinD11,LOW); // D8 à 0V
delay(1000); // Temporisation pour décharge compléte
Nmin = analogRead(A0); // Tension de bébut de charge (10 bit)
// CHARGE COMPLETE
int N = 0; // Initialisation
digitalWrite(pinD11, HIGH); // D8 à 5V
t0 = micros(); // Mesure de l'instant initial
while (N<646) { // Boucle tant que la tension inférieure à seuil (0,632*1023=646)
N = analogRead(A0); // Lecture de la tension du condensateur
}
t1 = micros(); // Mesure de l'instant à 63% de la valeur finale
tau = t1 - t0; // Calcul de la constante de temps (µs)
C = tau/R*1E3; // Calcul de la capacité en nF
delay(1000); // Temporisation pour charge complete
Nmax = analogRead(A0); // Tension de fin de charge (10 bit)
// AFFICHAGE
Serial.println("-------"); //
Serial.print("Nmin = "); //
Serial.println(Nmin); //
Serial.print("Nmax = "); //
Serial.println(Nmax); //
Serial.print("tau = "); //
Serial.print(tau/1000.0); //
Serial.println(" ms"); //
Serial.print("C = "); //
Serial.print(C); //
Serial.println(" nF"); //
}
void loop() {
// Boucle sans fin pas utilisée ici !
}

Mesures pour des capacités de \(470~\rm nF\), \(680~\rm nF\) et \(1000~\rm nF \quad (\pm10\%)\)
A retenir
La fonction
micros()
renvoie la durée en µs (< 70 min) depuis que la carte Arduino a été mise sous tension. La résolution est de 4 µs !La boucle
while
(tant que) associée à la fonctionanalogRead()
détecte le seuil de 63% de la tension du condensateur.