Mesure de la constante de temps d’un circuit RC avec l’entrée analogique
Montage

Charge d’un condensateur sous tension constante avec un Arduino UNO R3
La broche D8
, paramétrée en sortie digitale, charge (ou décharge) le condensateur à travers la résistance.
L’entrée analogique A0
mesure périodiquement la tension 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 :
Il est conseillé de choisir une résistance maximale à \(100~\rm k\Omega\) (la documentation technique précise \(10~\rm k\Omega\)).
Données :
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.
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 pinD8 = 8; // Broche D8
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(pinD8, OUTPUT); // Broche digitale en sortie
// DECHARGE COMPLETE
digitalWrite(pinD8,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(pinD8, 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 constante de temps d'un circuit RC
* David THERINCOURT - 2025
* Appuyer sur le RESET de l'Arduino pour lancer la mesure
*/
int pinD8 = 8; // Broche D8
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(pinD8, OUTPUT); // Broche digitale en sortie
// DECHARGE COMPLETE
digitalWrite(pinD8,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(pinD8, 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.