Gestion et suivi du taux de charge d'une batterie

Bonjour à tous,
Voilà mon problème, je suis sur un projet Arduino alimenté sur batterie (Li 3,7V, 1S3P et environ 10Ah au total) et je doit connaître assez précisément le taux de charge de ma batterie (disons 1 à 2 pourcentages près), même lorsque celle ci est en charge.
La solution la plus simple d'estimation via la tension aux bornes de la batterie n'est donc pas possible. Le mieux semble être avec un compteur de coulomb mais je ne trouve pas de bms avec compteur intégré pouvant être relié à un Arduino (liaison I2C). Avec vous des références pour solution "maison" à me proposer, en comptant qu'il faut que la consomation du système sois la plus faible possible et qu'il supporte au moins 3A.

Merci d'avance,
N

Bonjour

Texas Instruments propose un famille de circuits intégrés sur bus I2C (ou SPI) permettant de suivre de près le courant (/![u]certains modèles sont unidirectionnels , d'autre bidirectionnels[/u]) .
A toi d'intégrer par le code ce courant mesuré périodiquement pour faire un coulomb-mètre sur mesure.

Il s'agit des INA216, INA219, INA226....On les trouve sous forme de modules prets à l'emploi, des bibliothèques existent pour les exploiter facilement. Nombreux tutos.

je viens de réceptionner, pas encore testé, un INA228 bidirectionnel (Data Sheet) qui a la particularité en plus de la tension, du courant et de la puissance comme les autres membres de la famille , de faire coulomb-metre et comptage d'énergie

on le trouve également sous forme de module, monté avec un shunt de 0,015 Ohm, OK pour 3A

Original chez Adafruit : :+1:

copie :

je doit connaître assez précisément le taux de charge de ma batterie (disons 1 à 2 pourcentages près)

Ceci implique d'avoir , à jour, une bonne connaissance de la capacité effective de la batterie, capacité qui diminue au fil du temps et en fonction du nombre de cycles de charge+décharge

Tu devras donc de temps en temps faire un cycle complet décharge+charge pour actualiser la valeur de
la capacité effective

Super merci de ta réponse très détaillée !

J'avais vu les INAxxx mais je ne suis pas très alaise avec l'emmener seul, je ne m'y connait pas assez pour l'intégrer dans un circuit (condensateurs de découplage et tout ).
Par contre les autres modules que tu a envoyé son top !

Du coups je viens de me rendre compte que j'ai oublié de préciser dans le post que pour des questions d'autonomie de la batterie je pense mettre l'arduino en deepsleep et le "réveiller" que toutes les 5min pour faire quelques mesuresmais par contre il faut que le compteur lui continus de suivre la batterie, sait tu s'il y a des modules qui on une mémoire interne et peuvent transmettre l'état de charge dans l'arduino le demande ?
Et autre question car un pavé peux en cacher un autre :wink: une fois le projet finit je ne pourrais pas avoir accès au code pour modifier la capacité de la batterie, il faudrait donc ce ça se fasse en interne. Peux être une estimation avec des données sur le vieillissement de la batterie ou des modules qui s'adaptent et suivent la perte de capacité avec la tension (un module qui avec la tension sais quand la batterie est effectivement chargée ou décharge et corrigé donc la capacité en memoire).

Petite question supplémentaire, ce que tu appelle "shunt" c'est la résistance qui sert à mesurer le courant par différentiel de tension ?

D'après ce que j'entrevois dans la doc l'INA229 fait lui même le suivi bidirectionnel des coulombs en effectuant les calculs nécessaires à partir des infos acquises en boucle par son ADC 20 bits.

-> Tu viens 'relever le compteur' quand tu veux dans le registre 'Charge' et/ou 'Energy'
l'INA228 qui se charge des 'cumuls' convient parait idéal dans un montage ou le micro-controlleur est parfois/souvent en veille.

(Interprétation à confirmer par des essais non encore effectués !)

Résistance shunt , oui c'est ce que tu as compris

un coup d'oeil à la bibliothèque proposée par Adafruit pour l'INA228 montre l'obtention à la demande du compteur d'énergie, valeur en Joules =, (qui tourne tout seul de son côté une fois initialisé et configuré l'INA228)
Diviser les joules par la tension pour avoir les coulombs si la bibliothèque ne propose pas de fonction getCharge(), ou créer la fonction getCharge()

Top, merci pour toutes ces infos !!!

Je vais essayer de tester ça assez rapidement et de donner des nouvelles du résultat !