Die Idee ist recht einfach: Der (frisch geladene) Akku wird über einen Widerstand entladen, dabei bestimmt der Mikrocontroller die Spannung U und die Stromstärke I: Die Spannung U am Widerstand R wird mit dem ADC gemessen und daraus die Stromstärke über I = U/R berechnet. Die in Δt = 1 min geflossene Ladungsmenge ΔQ bestimmt der Mikrocontroller so: ΔQ = I ⋅ Δt. Der Mikrocontroller protokolliert dann für jedes Zeitintervall die Messwerte, indem er sie über ein Terminalprogramm ausgibt. Dabei addiert er fortwährend die einzelnen Ladungsmengen auf und gibt am Ende die gesamte Ladungsmenge aus. Damit die Akkuzelle dabei nicht tiefentladen wird, wird der Stromkreis der Akkuzelle automatisch über ein Relais unterbrochen, sobald die Spannung der (belasteten) Akkuzelle unter 0,8 V gesunken ist.
Mein Programm sieht so aus:
Code: Alles auswählen
$regfile = "m328pdef.dat" 'Dadurch wird auch das Pin-Layout bestimmt
$crystal = 16000000
$framesize = 32
$swstack = 32
$hwstack = 64
$baud = 9600
'**********************************************************
'******************* Deklarationen ************************
Dim Messergebnis As Word
Dim Volt As Single
Dim Ampere As Single
Dim Umin As Single
Dim Delta_ladungsmenge As Single
Dim Ladungsmenge As Single
Dim Minutenzaehler As Word
'**********************************************************
'****************** Initialisierung ***********************
Ddrd.2 = 1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Umin = 0.8
Minutenzaehler = 0
Ladungsmenge = 0
'**********************************************************
'******************** Hauptprogramm ***********************
Portd.2 = 0 'Akku einschalten; LED bei Relais geht an
Print "Entladung gestartet"
Print "----------------------"
Waitms 100
Do
Wait 60 '1 Minute
Minutenzaehler = Minutenzaehler + 1
Print "U und I nach " ; Minutenzaehler ; " Minuten"
Messergebnis = Getadc(3) 'Test: 14 -> interne Referenzsapnng (1,3 Volt Bandgap), sonst Kanalnummer von 0 bis 7
Volt = 0.004619 * Messergebnis 'Ergebnis jetzt in V (0.004619 <- 4,73/1024)
Print Volt ; " V"
Ampere = Volt / 6.0
Print Ampere ; " A"
Print "----------------------"
Delta_ladungsmenge = Ampere / 60 'in Ah
Ladungsmenge = Ladungsmenge + Delta_ladungsmenge
Loop Until Volt < Umin
Portd.2 = 1 'Akku ausschalten
Print "Spannung unter 0,8 V"
Print "Entladung abgebrochen"
Print "Zeit: " ; Minutenzaehler ; " min"
Print "Ladungsmenge: " ; Ladungsmenge ; " Ah"
End
Code: Alles auswählen
----------------------
U und I nach 4 Minuten
0.808324989 V
0.128305492 A
----------------------
U und I nach 5 Minuten
0.785229978 V
0.124639628 A
----------------------
Zeit: 5 min
Ladungsmenge: 0.011290843 Ah