Calcul de la tension sur une batterie

Bonjour,

J'ai trouvé un petit tuto sur le net permettant de calculer la tension d'une batterie à l'aide de 2 résistances

Le schéma :

Le programme :

int analogInputArduino = 0.0; //Correspond au pin A0 de la carte Arduino
float vout = 0.0;
float vin = 0.0;
float R1 = 98100.0; // Résistance de R1 (100K)
float R2 = 9870.0; // Résistance de R2 (10K)
int TensionBatterie = 0.0;

void setup() {
   Serial.begin(9600);
}

void loop() {
  delay(2000); // attente de 2 secondes avant lecture
  
  // BATTERIE -- Lecture de la tension de la batterie sur le Pin A0
   TensionBatterie = analogRead(analogInputArduino);
   vout = (TensionBatterie * 4.99) / 1024.0;
   vin = vout / (R2/(R1+R2)); 
   if (vin<0.09) {
      vin=0.0;//Déclaration pour annuler la lecture indésirable !
   }

  Serial.println(vin);

}

Mon problème :

l'analyse des résultats affichés oscille ! Le moniteur affiche ces valeurs (extrait)

12.95
12.90
12.85
12.90
12.95
12.90
12.90
12.95
12.90
12.90
12.90
12.85
12.85
12.90
12.90
12.90
12.85
12.85
12.90
12.85
12.90

Ma question est :
Pourquoi la valeur n'est pas stable !? Comme faire pour qu'elle le soit ?

Précision complémentaire importante : La température est constante et par conséquent ne peut pas être l'origine de cette variation.

Merci par avance pour votre aide.

Tout simplement un probleme de précision de mesure, toute mesure digitale sera a 1 points près.

La résolution du convertisseur A/D est de 1024 points, comme tu utilise la reference par défaut de 5v cela te fait 5/1024 une mesure de précision a 4.9mv près.

Comme ton affichage une multiplication par 10 cela fait ton battement de 50mv

Pour augmenter ta précision de mesure :

  • Utiliser une source de reference stable, les 5v d'alim ce n'est pas le plus top. Les references internes a peine mieux, une zener programmable type TL430/431 par ex sera l'ideal.

  • Faire en sorte que la tension mesurée soit le plus proche possible du maximum, tes 12v divisé par 10 alors que le max est a 5v n'est pas le plus adapté. Tu pourrai utiliser par ex la source interne 1.1v avec la commande analogReference(INTERNAL) ou analogReference(INTERNAL1V1) selon le type de ta carte et un diviseur par 14 qui te permettrai de mesurer jusqu’à 15v4.

Si tu veux vraiment etre plus precis tu peux utiliser une zener mise en serie avec la batterie la tension mesurée sera alors de (Ubat-Uzener) / diviseur.

Autre solution faire un arrondi de ta mesure analogread en le divisant par 2 .... ce qui limite encore la precision.

As tu essayé de placer un condensateur de filtrage entre l'entrée analogique et la masse.
Il se peut que ce soit ton fil entre le pont et l'entrée du micro qui soit bruité.
Mieux qu'un condensateur : un réseau RC avec une résistance d'environ 100 à 1000 ohms en série avec l'entrée analogique.
---------------////-----------------------Entrée micro

100 à 1000 ohms
---- 100 nF à 10 µF
Masse

Sans rien retirer aux propos de jpdsfr j'ajoute que la conception des cartes arduino est assez pourrie du point de vue mesure analogique.

  1. Non respect des préconisations Atmel : il n'y a pas d'inductance de filtrage entre le Vcc (numérique) le AVcc (analogique).

  2. Emplacement absurde de l'entrée Aref sur le connecteur de carte.
    La piste qui relie Aref (bord de carte) à Aref (pin du boîtier) est immensément longue, elle parcoure la carte en diagonale et se bruite sur la carte.
    Or Aref communique directement avec le cœur du convertisseur analogique digital, donc si Aref est bruité le convertisseur l'est aussi et la mesure aussi.

A ce sujet la carte Nano est mieux conçue que la UNO et la Mega mais ce n'est pas arduino qui a fait la nano, c'est la société Gravitech ce qui explique cela.

Si tu as une UNO il est possible d'améliorer la mesure en soudant un condensateur de 100 nF (ou valeur approchante) au dos de la carte et directement sur les pins du support du micro (pins Aref et Gnd).
Sur le micro la pin Aref est située immédiatement à coté d'une pin de masse. Atmel à choisi ce brochage pour justement filtrer correctement la pin AREF, Arduino n'a rien compris.

Merci à vous pour ces explications précise. Je vais commencer par me rapprocher de la solution de jpdsfr afin de ne pas avoir à cramer ma carte (uno) et une mauvaise soudure de ma part :grinning:

hello j'avais vu une autre façon de faire pour mesurer la tension d'une batterie j'ai le régul mais pas testé :

http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ProjetBatterieMesureTension