Je reviens avec un nouveau montage qui va me permettre de mesurer la capacité restantes de mes batteries NIMH de taille AA et AAA que j'ai a la maison.
J'ai pas encore fait de schéma , mais il est trés simple. une resistance de 10 ohm en serie avec une batterie AA et un transistor MOS pour couper dés que la pile arriver à 0.8V.
Le schéma est trés simple
Voila mon code test, pour le moment je suis sur une seule batterie et je suis avec un 18F2550.
Code : Tout sélectionner
program mesure_cap_NIMH1
' Declarations section
' Valeur de la resistance de decharge
const Res = 10.0
' Seuil bas de la tension d'une pile Ni-MH
const SEUIL_BAS_TENSION_PILE = 0.80
' Détection de seuil bas de la tension de la pile
dim seuilBasBatterieAtteint as bit
' Heure de début de la mesure
dim initTime as longword
' Quantité d'électricité générée par la pile lors
' de la dernière seconde
dim quantiteElectricite as float
' Quantité d'électricité totale générée par la pile
' depuis le lancement du programme
dim quantiteElectriciteTotale as float
dim quantiteElectriciteTotale_I as word
dim U0 as float
dim U0_I as word
dim U0_calc as float
dim U1 as float
dim tensionResistance as float
dim courant as float
dim courant_I as word
dim courant_calc as float
dim txt as string[6]
' Lcd module connections
dim
LCD_RS as sbit at RB4_bit
LCD_EN as sbit at RB5_bit
LCD_D7 as sbit at RB3_bit
LCD_D6 as sbit at RB2_bit
LCD_D5 as sbit at RB1_bit
LCD_D4 as sbit at RB0_bit
dim
LCD_RS_Direction as sbit at TRISB4_bit
LCD_EN_Direction as sbit at TRISB5_bit
LCD_D7_Direction as sbit at TRISB3_bit
LCD_D6_Direction as sbit at TRISB2_bit
LCD_D5_Direction as sbit at TRISB1_bit
LCD_D4_Direction as sbit at TRISB0_bit
' End Lcd module connections
dim U0_direction as sbit at TRISA0_bit
U1_direction as sbit at TRISA1_bit
Trans_direction as sbit at TRISC0_bit
Trans as sbit at Portc.0
sub procedure mesureQuantiteElectricite()
' Lit la tension aux bornes de la pile et aux bornes de la résistance
U0 = ADC_Read(0)*5/1024
U1 = ADC_Read(1)*5/1024
tensionResistance = U0-U1
' Verifie que la tension de la pile n'est
' pas inferieure à son seuil bas afin de ne pas
' l'endommager
if (U0 < SEUIL_BAS_TENSION_PILE) then
seuilBasBatterieAtteint = 1
end if
' Calcul du courant qui circule dans la résistance
courant = (U0-U1)/Res
' La quantité d'électricité est la quantité de charges électriques
' déplacées par les électrons. Elle est égale à l'intensité
' multipliée par le temps (1 seconde ici).
' Afin d'avoir la quantité d'électricité en mAh, il faut
' utiliser le facteur 1000/3600
quantiteElectricite = courant/3.6
' On additionne cette quantité d'électricité aux précédentes
' afin de connaître la quantité totale d'électricité
' à la fin de la mesure
quantiteElectriciteTotale = quantiteElectriciteTotale+quantiteElectricite
quantiteElectriciteTotale_I = quantiteElectriciteTotale
' Affichage sur l'afficheur OLED de la tension de la pile,
' du courant débité ainsi que de la quantité d'électricité débitée
' par la pile depuis le lancement du programme
Lcd_Out(1,1,"Test mesure")
FloatToStr(U0, txt)
Lcd_Out(2,1,"U=")
Lcd_Out(2,3,txt)
Lcd_Out(2,15,"V")
FloatToStr(courant, txt)
Lcd_Out(3,1,"A=")
Lcd_Out(3,3,txt)
Lcd_Out(3,15,"A")
' FloatToStr(quantiteElectriciteTotale, txt)
IntToStr(quantiteElectriciteTotale_I, txt)
Lcd_Out(4,1,"Q=")
Lcd_Out(4,3,txt)
Lcd_Out(4,12,"mAh")
end sub
main:
' Main program
OSCCON = $7F
ADCON1 = $0D
ADCON2 = $21
' RA0 Entrée ANA, RA1 Entrée ANA
' RCO Sortie commande transistor, RC1 entrée TOR BP marche
Trans_direction = 0
' Port B commande afficheur
ADC_Init ()
Lcd_Init()
seuilBasBatterieAtteint = 0
quantiteElectriciteTotale=0
Trans = 1
While (TRUE)
' Mesure de la quantité d'électricité débitée toutes les
' secondes jusqu'à ce que la tension de la pile soit inférieure
' à son seuil bas afin de ne pas l'endommager.
if (seuilBasBatterieAtteint = 0) then
mesureQuantiteElectricite()
Delay_ms(1000)
else
' Une fois que le seule bas de la pile est atteint,
' on positionne le transistor en mode bloqué afin
' d'arrêter la décharge de la pile
Trans = 0
Lcd_Out(1,1," ")
Lcd_Out(2,1," ")
Lcd_Out(3,1," ")
Lcd_Out(4,1," ")
Lcd_Out(1,1,"Fin Decharge")
Lcd_Out(2,1,"Capacite pile=")
IntToStr(quantiteElectriciteTotale_I, txt)
Lcd_Out(3,3,txt)
Lcd_Out(4,1," mAh")
Delay_ms(1000)
end if
Wend
end.
Voila le resultat sur afficheur LCD
Par contre je bloque une une chose, je souhaiterais n'avoir que 2 chiffre aprés la virgule pour la tension (1.21V) et 3 chiffre aprés la virgule pour le courant (0.125mA) mais je ne sais pas comment mi prendre
J'ai tenté de passer par des changement de format mais sans grand résulat.
Auriez vous une idée pour reduire le nombre de chiffres aprés la virgules?
Le but final est une carte avec 5 batteries avec la possibilité de mettre des AA et des AAA et le pic final sera un 18F46J50.
Voila pour le moment
bonne soiré à tous

