interrogation sur des variations de valeurs lue instables

bonjour
es ce que le fait que mega traite plusieures fonctions , cela puisse rendre instale les valeur analogiques mesures.
dans mon cas la valeur de tension de baterie qui passe de facon aleatoire 14v a 5 v puis 12v et ainsi de suite alors que lors de sa decharge la valeur affichée devrait etre stable et progressif?

Salut.

Tu devrais modifier le titre, mettre un truc genre "lecture analogique pas stable".

Ensuite, un petit schéma de comment tu "lis" la tension batterie, et aussi au moins le bout de code que tu utilises.

J'avais remarqué que la tension sur Aref bouge pas mal (quelques millivolts, c'est suffisant) pour obtenir des mesures assez ondulatoires.

Depuis, je génère ma propre tension Aref (via une simple zener) et ça aide beaucoup. Attention tout de même dans ce cas, il faut coller un analogReference(EXTERNAL); dès le début de ton setup(), et uploader à vide une première fois (sans rien de connecté à Aref), sinon, c'est un coup à griller la partie analogique du µC... Etonnant que Arduino n'ait toujours pas géré ce piège...

Maintenant, à toi de nous donner quelques détails!

Cinci.

Pascal17740:
bonjour
es ce que le fait que mega traite plusieures fonctions , cela puisse rendre instale les valeur analogiques mesures.
dans mon cas la valeur de tension de baterie qui passe de facon aleatoire 14v a 5 v puis 12v et ainsi de suite alors que lors de sa decharge la valeur affichée devrait etre stable et progressif?

Bonjour,

La ce ne sont pas des mesures instables. C'est des mesures aléatoires.

C'est surement un problème hard ou bug soft.

Donnes plus de précisions sur ton hard et ton soft.

kamill:
Bonjour,

La ce ne sont pas des mesures instables. C'est des mesures aléatoires.

C'est surement un problème hard ou bug soft.

Donnes plus de précisions sur ton hard et ton soft.

materiel mega et pont diviseur de tension a resistances

void test_bat() {
  tensBat = analogRead(ANA2);
       vout = (tensBat * 5.0) / 1024; // see text
        vin = vout / (R2/(R1+R2));Serial.println(vin,2);client.print(vin,2);
   if ((vin <= 12.0))
  {
  batcharge=true;
  }
 if (vin>14)
  {
 batcharge=false;
  }
   if (batcharge || cmdBat)
   {
   digitalWrite(BATCHARGE,LOW); batcharge2=true;
   }
    else
   {
   digitalWrite(BATCHARGE,HIGH);batcharge2=false;
   }
  }
 /* void test_courant(){
  // Tension lue 500 fois pour moyenne 
// for(int i = 0; i< 500; i++) {
  // tension_capteur =(.0049 *( analogRead(ANA0)));   // (5 V / 1024 = 0.0049) which converter Measured analog input voltage to 5 V Range
   tension_capteur1 =(.0049 *( analogRead(ANA1)));   // (5 V / 1024 = 0.0049) which converter Measured analog input voltage to 5 V Range
    delay(1);
//ICconso = ((tension_capteur-2.5)/ 0.185); // Sensed voltage is converter to current(capteur 5 A)

ICcharge = ((tension_capteur1-2.5)/ 0.100); // Sensed voltage is converter to current (capteur 20A)

}

j ai desactive certaine pour faire mon test car le resultat etait pire cela fluctuer encore plus a chaque actualisation de la page web dynamiqe et terminal serie.

Super_Cinci:
Salut.

Tu devrais modifier le titre, mettre un truc genre "lecture analogique pas stable".

Ensuite, un petit schéma de comment tu "lis" la tension batterie, et aussi au moins le bout de code que tu utilises.

J'avais remarqué que la tension sur Aref bouge pas mal (quelques millivolts, c'est suffisant) pour obtenir des mesures assez ondulatoires.

Depuis, je génère ma propre tension Aref (via une simple zener) et ça aide beaucoup. Attention tout de même dans ce cas, il faut coller un analogReference(EXTERNAL); dès le début de ton setup(), et uploader à vide une première fois (sans rien de connecté à Aref), sinon, c'est un coup à griller la partie analogique du µC... Etonnant que Arduino n'ait toujours pas géré ce piège...

Maintenant, à toi de nous donner quelques détails!

Cinci.

je n utilise pas aref j ai un pont diviseur de tension a resistance placer sur la baterie et la tension est mesurer au point milieu des resistance en serie selon la formule vin = vout / (R2/(R1+R2))

Essayez , pour voir :

  • de mette une temporisation d'une centaine de millisecondes entre les mesures de tension et courant,
  • de ne faire que la mesure de la tension.
    Cordialement

Pierre

Bonjour,

A priori je ne vois pas de problème dans le bout de code que tu as envoyé mais:

  • Qu'est ce que fait digitalWrite(BATCHARGE, HIGH); ?
  • Quelles sont les valeurs de R1 R2
  • Quand est appelé test_bat() ?
  • Es ce qu'il est fait d'autres mesures analogiques ?

Dès qu'on change quoi que ce soit dans la chaîne de l'ADC (Multiplexeur analogique d'entrée --> A0 à Ax), ADC , référence de tension , etc ...) il ne faut JAMAIS garder la première mesure.

La raison est simple : au moment du changement il y avait peut-être une conversion en cours et le changement en rendra le résultat faux.

Cela s'applique aux mesures analogiques sur deux pins différentes, il faut jeter systématiquement la première mesure sur chaque pin. La tempo peut remplir le même effet si le temps de tempo est supérieur à celui d'une conversion.