======================================================================== Mesure de la constante de temps d'un circuit RC avec l'entrée analogique ======================================================================== Montage ======= .. figure:: images/tau_analogread/RC_Montage_Charge.png :width: 917 :height: 510 :scale: 50 % :alt: :align: center 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. .. warning:: - La durée de conversion, sur les entrées analogiques, est en moyenne de :math:`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 : .. math:: \tau_{min} \approx 100\times100\cdot10^{-6} \approx 10~{\rm ms} - Il est conseillé de choisir une **résistance maximale** à :math:`100~\rm k\Omega` (la documentation technique précise :math:`10~\rm k\Omega`). Données : .. math:: R = 100~{\rm k\Omega} \qquad C= 680~{\rm nF} Mesure de la constante de temps =============================== Le programme Arduino ci-dessous charge le condensateur sous la tension constante :math:`5~\rm V` et mesure les instants :code:`t0` (début de la charge) et :code:`t1` (63% de la charge) afin de calculer de la constante de temps :code:`tau`. Le programme mesure également les valeurs de la tension initiale :code:`Nmin` et de la tension finale :code:`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 ! .. code-block:: arduino /* 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 ! } .. figure:: images/tau_analogread/RC_analogRead_moniteur_serie_100k_tau.png :width: 1104 :height: 407 :scale: 70 % :alt: :align: center Mesures pour des capacités de :math:`470~\rm nF`, :math:`680~\rm nF` et :math:`1000~\rm nF \quad (\pm10\%)` Mesure de la capacité du condensateur ===================================== Sachant que le temps caractéristique est défini par la relation : .. math:: \tau = R \cdot C Le calcul de la capacité C du condensateur est : .. math:: C = \dfrac{\tau}{R} If suffit donc d'ajouter cette relation dans le code précédent ! .. code-block:: arduino /* 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 ! } .. figure:: images/tau_analogread/RC_analogRead_moniteur_serie_100k_tau_capacite.png :width: 1104 :height: 407 :scale: 70 % :alt: :align: center Mesures pour des capacités de :math:`470~\rm nF`, :math:`680~\rm nF` et :math:`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 fonction ``analogRead()`` détecte le seuil de 63% de la tension du condensateur.