Bonjour à tous,
Je souhaite réaliser un "capacimètre" capable d'estimer le nombre d'ampères-heures restant dans une batterie au plomb (En fait c'est une tache plus complexe qu'il n'y parait).
Ma cible: 1 batterie 12V 105Ah / C20h Gel Dryfit tension de fin de charge 14V5 (cycle use) (je n'en sais pas plus...)
Elle est chargé par un panneau solaire (Imax 10A) et branchée sur des circuits utilisation consommant entre 2 et 11 A) + un chargeur pour les longues soirées d'hiver... Sinon 105 Ah ne suifferaient pas.)
Il n'est pas possible de déconnecter la batterie du circuit utilisation (pour mesurer sa tension à vide par ex).
Je souhaite vous présenter l'état d'avancement de mon projet (notamment des portions algorithmique pour utiliser sur un microcontrôleur), si cela peux aider, et peut être pourrez-vous combler certaines de mes interrogations.
Bon pour faire simple en gros l'idée c'est de fabriquer un truc ressemblant à ça :
http://www.xantrex.com/power-product...y-monitor.aspx
ou ça :
http://www.smartgauge.co.uk/smartgauge.html
Pourquoi ne pas l'acheter me direz-vous ?
Parce-que :
- C'est cher
- J'intègre le truc dans un montage plus complexe
- J'adore comprendre par moi-même et réaliser les choses
- Je ne recherche pas la précision absolue
Il y a plein de truc intéressant sur le site http://www.smartgauge.co.uk/sgvahrs.html
Je mesure :
- I_batt : Le courant entrant et sortant de la batterie
- U_batt : sa tension (a charge, car on ne va pas débrancher la batterie de son circuit!! donc pas le choix).
Mes constantes connues :
- La capacité de la batterie lorsqu'elle est neuve, exprimée en Ampères-heures :
constante CAPA_TOT_BATT_NEUVE 105
- Le coefficient de Peukert donné par le fournisseur de batterie, qui spécifie selon une formule (non linéaire) que la capacité apparente de la batterie diminue d'autant plus que le courant débité par la batterie est important :
constante PEUKERT_COEF 1.25
- La durée de décharge annoncée par le constructeur pour C (écrit sur la batterie, exprimée en heures, généralement 10h ou 20h):
constante BATT_TAUX_DECHARGE 20
Mes variable globales :
- La capacité de la batterie à l'heure actuelle, exprimée en Ampères-heures : Par ex 51 Ah => Elle à perdue 50 % de CAPA_TOT_BATT_NEUVE:
CAPA_TOT_BATT_REEL
- La capacité restante dans la batterie, exprimée en Ampères-heures. nombre positif:
C_batt
- Le courant débité / entrant dans la batterie, exprimée en Ampères. Débité => I < 0 :
I_batt
- La tension aux bornes de la batterie, exprimée en Volts:
U_batt
Au début, j'assume (pourquoi pas ? ) que ma batterie est neuve et pleine, donc :
Code:CAPA_TOT_BATT_REEL = CAPA_TOT_BATT_NEUVE; C_batt = CAPA_TOT_BATT_REEL;
Je décompose le truc en 4 parties :
1) La charge (I_batt > 0)
2) La décharge (I_batt < 0)
3) La détection de batterie pleine
4) La détection de batterie vide
Bien sur Ces paramètres dépendent du type de batterie et de sa santé...
1) La charge
Ici j'ai un "doute". J'ai lu que le rendement lors de la charge de la batterie est de 90 % => 0.9 :
D'où(1800...? car je fais ce calcul et une mesure de I_batt tout les 2 secondes)Code:si (I_batt > 0) C_batt = C_batt + (I_batt * 0.9) / 1800;
Ce rendement est t'il correct ? t'il ? Vu que le courant de charge est fournit par un panneau solaire (donc au maxi 10 A pour une batterie de 105 Ah) faut t'il s'en inquiéter ? y a t'il un effet Peukert lors du chargement à prendre en compte ?
2) La décharge
La je maitrise mieux
Remarques :Code:// Estime les Ampères-heures entrant et sortant des batteries // Notez que j'inverse le signe du courant car à la décharge il est négatif, or si je fait une puissance 1,25 d'un nombre négatif, c'est impossible (racine d'un nombre négatif). temp1 temp2 temp3 sont des variables temporaires pour décomposer le calcul (ce sont des flottants) La formule vien d'ici: http://www.smartgauge.co.uk/peukert_depth.html si (I_batt < 0) { temp1 = pow(-I_batt, PEUKERT_COEF); temp2 = pow((CAPA_TOT_BATT_REEL / BATT_TAUX_DECHARGE), (PEUKERT_COEF - 1)); temp1 = temp1 / temp2; C_batt = batt - (temp1 / 1800); }
pow(X, Y) réalise l'opération : X puissance Y, encore noté parfois X^Y.
(1800...? car je fais ce calcul et une mesure de I_batt tout les 2 secondes)
Ça ça marche bien...
3) La détection de batterie pleine
Humm,
Si la batterie atteins 14V5, elle a rejoins sa capa maximale..
Le Xantrex, lui (cf son mode d'emplois en français) prends en compte en plus le courant de fin de charge, mais je ne vois pas l'intéret car si la batterie débite un peu en même temps qu'elle est quasi chargée, ce courant ne veut rien dire ?Code:si (U_batt >= 14.5) C_batt = CAPA_TOT_BATT_REEL;
4) La détection de batterie vide
Là c'est plus sioux... car comment définir (sans pèse acide, la batterie est au gel ha ha !) qu'une batterie est vide ?
J'ai trouvé un compromis en appliquant en façon empirique une tension de fin de décharge en fonction du courant débité...
En gros :
Si i_batt est nul, on dis que l'on est a plat à 11v5
Si l'on tire 10A, il faut que la batterie descende à 10V5 pour dire que l'on est à plat, etc..
remarque *Code:si((I_batt <= 0) ET (U_batt <= (11.5 + I_batt * 0.1))) // Détermine si on à atteint la décharge complète:modo: { CAPA_TOT_BATT_REEL = CAPA_TOT_BATT_REEL - C_batt; // (remarque *) C_batt = 0; }
Ici je me rends (éventuellement) compte qu'il est censé me rester des Ampères heures en réserve dans la batterie (si C_batt > 0)
Si c'est le cas, on considère que la capacité d'origine de la batterie est amoindrie (elle vieillit la pauvre) et donc on ajuste CAPA_TOT_BATT_REEL pour tout les prochains calculs !
=> Ce qui permet d'obtenir un état de santé de la batterie en faisant :
Voila bien sur le code n'est pas complet mais ça donne une bonne source d'inspirationCode:variable Sante_batt = CAPA_TOT_BATT_REEL * 100.0 / CAPA_TOT_BATT_NEUVE;
Le calcul de la résistance interne de la batterie peut t'il aider également dans l'une ou plusieurs des 4 étapes, sachant que si le courant varie, la tension également, donc on peu estimer à quelques instants intervalle la résistance interne....
En espérant aider certains et Merci pour vos lumières,
Matthieu
-----