Moin,
hier kommt ein kleines Projekt, das ich wegen akuter Notwendigkeit
gerade durchgezogen habe. Es ist ein Kapazitätstester für Li-Ionen
Akkus. Bei Akkus von ebay oder Pollin weiß man oft nicht genau, ob die
die Specs einhalten. Deswegen wollte ich ein kleines Gerät, das einen
Akku kontrolliert entladen und die Entladung auch protokollieren kann.
Der Einfachheit halber entlade ich mit einem konstanten Lastwiderstand
und messe nur die Spannung (der Strom ergibt sich dann ja). Das lokale
LC-Display zeigt die letzten Meßwerte an, während über RS-232 die
komplette Historie geloggt wird.
Die Hardware ist sehr simpel. Ein Arduino nano (China Klon) befeuert ein
16x2 LCD. Ein Pin schaltet den Lastwiderstand über einen LL-MOSFET zu.
Und schließlich mißt ein ADC-Pin die Spannung am Akku. Der ganze Krempel
steckt derzeit auf einem Steckbrett. Den Leistungsteil habe ich auf ein
Stück Lochraster verfrachtet.
Der Lastwiderstand kann mit zwei Jumpern zwischen 15R, 7.5R und 5R
umgeschaltet werden. Die Akkuspannung wird mit einem Spannungsteiler
47K:15K heruntergesetzt um zur internen 1.1V Referenzspannung zu passen.
Der MOSFET stammt von einem alten Mainboard und muß lediglich für
U_gs=4.5V einen spezifizierten (niedrigen) R_ds_on haben. Der SPD28N03L
ist mit 28mR weit auf der guten Seite.
Da der Strom nicht gemessen wird, muß man der Software den verwendeten
Lastwiderstand mitteilen. Auch der Spannungsteiler + Referenzspannung
muß kalibriert werden. Das geht direkt über die RS-232 Verbindung. Die
Kalibrierdaten werden im EEPROM gespeichert.
Eine Session sieht per RS-232 ungefähr so aus:
1 | $picocom /dev/ttyUSB0
|
2 | ...
|
3 | Terminal ready
|
4 | Li-Ion Akku Tester 1.0 - XL 2016/03/02
|
5 | Press 'c' to calibrate
|
6 | Press 'd' to start discharge
|
7 | Press 's' to show status
|
8 | > s
|
9 | U=4.168V, R=5.00Ohm
|
10 | > c
|
11 | calibration. U=4.165V
|
12 | Your value (V): 4.17
|
13 | recalibrated. U=4.168V
|
14 | Load resistor (Ohm): 5
|
15 | R=5.00Ohm
|
16 | calibration done
|
17 | > d
|
18 | discharge requested
|
19 | discharge started - stop with CTRL+C or 'q'
|
20 |
|
21 | seconds volt ampere Ah Wh
|
22 | 10 3.977 0.795 0.0022 0.0088
|
23 | 20 3.973 0.795 0.0044 0.0176
|
24 | qdischarging stopped
|
25 | > s
|
26 | U=4.158V, R=5.00Ohm
|
27 | > (CTRL+A, CTRL+Q)
|
28 | Thanks for using picocom
|
Wenn man die Daten mitloggt, kann man sie anschließend in ein
Spreadsheet importieren und auswerten wie im angehängten Screenshot.
Die Software compiliert hier auf einem Ubuntu mit installierten
arduino und arduino-mk Paketen. Upload auf den Arduino am USB geht
wie üblich mit make upload.
Was ich daran noch tun will:
- lokale Tasten für Status und Discharge für den Betrieb ohne PC
- eventuell automatischer Start wenn ein Akku angesteckt wird
- Display auf 4-Bit Betrieb abspecken und Pinbelegung so ändern, daß
auch ein mega168 oder mega328 im DIP28 reicht