Bonjour,
Je souhaite étudier la relation entre temps de demi-décharge d'un filtre RC et la tension d'alimentation : j'utilise un micro controleur pour faire varier la tension d'alimentation, prendre une série de mesures pour chaque tension puis les afficher.
Mon problème est que, là ou j'attendais une valeur identique pour chaque tension d'alimentation, la valeur du temps de demi-décharge diminue légèrement quand la tension d'alimentation diminue.
A titre d'exemple (avec un filtre RC tel que (valeur obtenue par étude de la charge), j'obtiens :
Tension d'alimentation (V) Temps de demi-décharge (s)
5.000 0.07409
4.510 0.07400
4.020 0.07397
3.529 0.07390
3.039 0.07382
2.549 0.07371
2.059 0.07345
1.569 0.07327
1.078 0.07296
la baisse n'est pas très grande (~1.5%) mais elle existe toujours (j'ai refait plusieurs fois la manip et toujours la même conclusion) ; les valeurs obtenues t~0.074 sont cohérentes avec la valeur de tau
Mon programme :
Code://déclaration des variables const unsigned long flux = 250000; //flux de la liaison série unsigned long temps0, temps1; // Deux variables temps pour mesurer tau float tau; // Constante de temps unsigned long cpt = 1; //compteur du nombre de boucles, saisi dans Python par l'utilisateur unsigned long nbrPoints; // saisi dans Python par l'utilisateur int topDepart = 0; //variable pour lancer l'acquisition String envoi; byte alimentation = 3; // Broche numérique alimentant le circuit RC byte mesure = 0; //broche analogique de mesure de la tension aux bornes de C const int nbCycle = 10; //nombre de cycles pour la moyenne de tau int delaidecharge = 10; //délai en ms dans la boucle pour décharger le condensateur int delaimesure = 1200 ; //délai en ms entre deux processus de mesure void setup() { Serial.begin(flux) ; // Initialisation de la communication série pinMode(alimentation, OUTPUT); // On définit la borne d'alimentation du circuit en Sortie digitalWrite(alimentation, LOW); // On décharge le condensateur en le mettant à 0V Serial.print("Tension d'alimentation (V)"); Serial.print("\t"); Serial.println("Temps de demi-décharge (s)"); int pwm = 255 ; while (pwm >= 50) { RC(pwm) ; pwm = pwm - 25 ; } Serial.flush(); } void loop() { } void RC(int valeur) { unsigned long T = 0; for (int i = 0; i < nbCycle; i++) { analogWrite(alimentation, valeur); delay(delaimesure); temps0 = micros(); // On relève t0 digitalWrite(alimentation, LOW); // On applique 0V en entrée du circuit RC pour commencer à décharger int valeurmax=analogRead(mesure)/2; while (analogRead(mesure) > valeurmax) { // Tant que le niveau lu est supérieur à la moitié de la tension d'alimentation) // on boucle sans rien faire } T = T + (micros() - temps0); // Une fois sorti de la boucle on mesure l'écart de temps que l'on ajoute à T pour faire la moyenne } tau = T/nbCycle*1e-6; float tension=valeur*5.0/255; Serial.print(tension,3); Serial.print("\t"); Serial.println(tau, 5); }
Est-ce dû à une erreur dans mon programme ?
Un problème matériel ?
merci d'avance
-----