ZACmeter

Hallo,

ich bin jetzt etwas weitergekommen mit dem „ZACmeter“, einem Device zur Messung der Kapazität und zur Erstellung von Entladungskurven. Vorüberlegungen dazu gab es bereits in dem Thread https://discourse.test.opensourceecology.de/t/gehaeuse-fuer-den-controller-wilssen/57/1

Ich bin noch nicht mit allen Details restlos zufrieden oder noch unsicher, aber im Groben scheint es wohl halbwegs zu funktionieren.

Hier zu Testzwecken die Aufzeichnung der Messung einer Billig-Batterie, bis zur Tiefentladung:

Und hier dasselbe nochmal mit einem NiMH-Akku, bis zur Entlade-Endspannung von 0.95V:

Die Entladung hat hierbei noch nichtmal 1h (also entsprechend C1) gedauert sondern nur 48 Minuten, d.h., der Lastwiderstand von 1.5 Ohm ist wohl ziemlich heftig für den Akku, ev. sollte ich einen etwas größeren verwenden. C1-Entladung scheint ziemlich brutal zu sein :wink: ich will auch noch mal testen ob bei einer sanfteren Entladung vielleicht auch etwas höhere Kapazitätswerte erreicht werden. Andererseits ist „brutal“ zum testen aber auch nicht unbedingt verkehrt, im Sinne einer worst-case-Messung.

Alex schrieb (in dem Kathodentester-Thread):

Beachte, dass Vcc vom Controller möglichst konstant und präzise sein sollten, da der ADC Vcc als Referenzspannung nimmt. Der Messfehler vom MOSFET (Promille) ist bei dem Strom zu vernachlässigen im Gegensatz zu der Genauigkeit von der Versorgungsspannung (10 Prozent bei USB, am Ausgang des USB-Host muss die Spannung zwischen 4,65 V und 5,25 V liegen).

Im Messprogramm gibt es einen „Referenzspannungswert“ von 0.0048828125 (ergibt sich aus 5 / 1024), welcher mit dem am ADC gemessenen Wert multipliziert wird um die gemessene Spannung von 0 bis 5V auf einen Bit-Auflösungsbereich von 0 bis 1023 zu beziehen.

Ich hatte das zuerst falsch interpretiert und gedacht, damit wäre VCC gemeint, welche bei mir an meinem (originalen) Arduino-Mega, der über USB versorgt wird, zufällig genau 4.89V beträgt :wink: Bei meinem anderen, AVR-NetIo basierten Selfmade-Arduino, der über ein PC-Netzteil direkt versorgt wird, beträgt die Versorgungsspannung dagegen 5.16V.

D.h., in beiden Fällen sind es keine exakten 5V. Ich frage mich, ob es daher zwecks besserer Genauigkeit nicht angebracht wäre, als Referenzspannungswert je nach verwendetem Board auf 5.16/1024 oder halt 4.89/1024 zu setzen, oder ob irgendetwas dagegen spricht.

Das ist eines der Details wo ich mir noch etwas unklar bin.

Na, wieauchimmer, weitere Infos zum ZACmeter sind im Wiki zu finden unter
http://wiki.opensourceecology.de/ZACmeter

Sobald ich mir halbwegs sicher bin, das das Ding korrekt arbeitet, werde ich damit die Kathodentester-Zelle messen. Ich hab jetzt noch zwei weitere kommerzielle Luftkathoden von verschiedenen Herstellern am Start, also insgesamt 3. Es wird sicher sehr interessant, diese 3 in einer einheitlichen und genau definierten Zelle (eben dem Kathodentester) mit einem einheitlichen und genau definierten Mess-System zu messen und ich erachte dies als wichtige Grundlage für zukünftige Entwicklungs und Optimierungs-Arbeiten am Kathodentester bzw. den späteren Prototypen.

Gruss, Oliver

Wow super !!! Alle Achtung :slight_smile: TOP

Yay, gut gemacht!

Mach dir bitte bei GitHub ein repository damit man den Code verbessern kann.

Der NiMH Akku war noch nicht leer, er hat nur einen recht hohen Innenwiderstand - Deswegen sackt die Spannung ein. Wenn du mit weniger Leistung belastest, hat er natürlich eine höhere Kapazität, denn die ohmschen Verluste im Akku sind geringer → er wird weniger warm.
Nimmst du die Last vom Akku, steigt die Leerlaufspannung der Zelle wieder (Memoryeffekt).
Ich würde eine delta_I Auswertung machen wenn du so hohe Entladeströme bei Zellen mit hohem Innenwiderstand messen möchtest.

Hast du den Widerstand gemessen? Du solltest für kurze Zeit eine möglichst hohe Spannung an den Widerstand anlegen und dabei den Strom messen, damit du einen genauen Widerstandswert erhälst. Maximale Belastbarkeit beachten…

Wenn du in floats mit so niedrigen MSBs rechnest solltest du (wie generell wenn es keine out of bounds Gefahr gibt) erst multiplizieren, dann dividieren. Sonst shiftest du LSBs aus dem Wertebereich - Die Fließkommagenauigkeit ist endlich.

Die konstanten für Vcc zur Kalibrierung kannst du verwenden, aber die genannten Versorgungsspannungen sind keine Konstantspannungsquellen.
Deine Auflösung und Genauigkeit kannst du steigern, indem du z.B. einen 3,3V Linearregler mit hinreichender Genauigkeit an A_ref anschließt. Dein Wertebereich liegt dann z.B. bei 0…3,3V±2% mit 10bit und ist viel genauer als 0…Vcc = 0…5V±10%

Shure

Hi Alex,

danke für die Hinweise, bin froh über solche guten Hinweise und Möglichkeiten zur Optimierung!

Done! Siehe unter GitHub - case06/zacmeter: Software for metering and logging the capacity of an accu or battery or ZAC+-Device.

Code-Verbesserungen sind stets willkommen :wink:. Ev. könnte man auch eine nicht-avrnetio-spezifische Version für einen normalen Arduino (oder Wilssen) anbieten, im einfachsten Fall ohne I^2C-LCD-Display und ohne Eth0-Interface und ohne den Druckknopf zum starten des Messvorgangs. Letzteres, indem man die Leerlaufspannung einfach vorher für ein paar Zyklen lang misst und registriert und dann automatisch in den mess-Modus schaltet. Und die Daten könnten dann per seriellem Interface übertragen werden.

Ich würde eine delta_I Auswertung machen wenn du so hohe Entladeströme bei Zellen mit hohem Innenwiderstand messen möchtest.

Delta_I sagt mir gerade nichts bzw. hab ich nichts zu gefunden, es ist immer nur von Delta_U oder Delta_peak die rede und dabei gehts um ein Kriterium zur Ermittlung des geeigneten Abschalt-Zeitpunktes, ich vermute also, Du meinst hier etwas anderes ?

Hast du den Widerstand gemessen? Du solltest für kurze Zeit eine möglichst hohe Spannung an den Widerstand anlegen und dabei den Strom messen, damit du einen genauen Widerstandswert erhälst. Maximale Belastbarkeit beachten…

Jau, gute Idee, mit einer genauen Widerstandsbestimmung hatte ich damals bei meinem Spannungsteiler schon gute Erfahrungen gemacht, hab ich hierbei aber glatt vergessen. Jetzt hab ichs gemacht, der Widerstand hat 1.6032 anstatt 1.5 Ohm - das ist zwar im Rahmen der aufgedruckten 10% Toleranz aber macht schon einen deutlichen Unterschied in der Messgenauigkeit.

Wenn du in floats mit so niedrigen MSBs rechnest solltest du (wie generell wenn es keine out of bounds Gefahr gibt) erst multiplizieren, dann dividieren. Sonst shiftest du LSBs aus dem Wertebereich - Die Fließkommagenauigkeit ist endlich.

Ah, ok. Hab das jetzt im Code geändert.

Die konstanten für Vcc zur Kalibrierung kannst du verwenden, aber die genannten Versorgungsspannungen sind keine Konstantspannungsquellen.
Deine Auflösung und Genauigkeit kannst du steigern, indem du z.B. einen 3,3V Linearregler mit hinreichender Genauigkeit an A_ref anschließt. Dein Wertebereich liegt dann z.B. bei 0…3,3V±2% mit 10bit und ist viel genauer als 0…Vcc = 0…5V±10%

Ja, verstehe, wenn ich einen kleineren Spannungsbereich auf einer Skala bis 1024 abbilde, dann ist die Auflösung höher. Als Linearregler hätte ich zum einen einen LM317, der ist beim normalen AVR-NetIO sogar mit onboard, weil er die Versorgungsspannung für den ENC2860 generiert.

Bei dem Board das ich momentan verwende ists etwas anders, weil hier das Add-On-Board mit dabei ist und das Mainboard mit 3.3V mitversorgt, so dass dort der LM317 nicht bestückt ist. Beim Addon-Board wiederum werden die 3.3V mittels eines MC34063 erzeugt, meinst Du der geht auch bzw. hat hinreichende Genauigkeit ? Ich hab unter MC34063 – Mikrocontroller.net etwas dazu gefunden aber bin nicht wirklich daraus schlau geworden :frowning:

Jedenfalls hab ich noch einen LM317 übrig, den ich auch hier zum Einsatz bringen könnte.

Gruss, Oliver

Hallo,

nachdem die Makerfaire nun vorbei ist, habe ich es jetzt endlich auch geschafft, die noch ausstehende Kapazitätsmessung des Kathodentesters unter gleichen Bedingungen wie bei den kommerziellen Batterie und dem NiMH-Akku durchzuführen. Das Ergebnis kann sich wirklich sehen lassen, wie ich finde :wink: :

siehe dazu auch

http://wiki.opensourceecology.de/ZACmeter#Vergleichs-Test_mit_dem_Kathodentester

Gruss, Oliver

Hi,

ich hab grad noch ein Diagramm von einer nachgeschobenen Messung ins Wiki gesetzt.

Dabei handelt es sich um einen nachgeschobenen Lauf, d.h., im Anschluss an den vorangegangenen Testlauf wurde die Elektryolyt-Flüssigkeit entfernt, dann gut gespült mit Wasser und dann frischer Elektrolyt nachgefüllt. Anfangs lag die Spannung bei rund 0.99V, was befürchten liess das dieser Lauf nicht lange dauern würde, aber dann stieg die Spannung wieder etwas auf knapp über 1V und blieb dort längere Zeit stabil für rund 1h 48min. In dieser Zeit konnten dann nochmals weitere 1184mWh an Leistung der Zelle entnommen werden.

Nochmal wiederholen liess isch das aber nicht, denn nach der dritten Spülung und Nachfüllung blieb die Spannung bei unter 0.95V, wodurch sofort der automatische Abschaltmechanismus getriggert wurde.

Insgesamt wurden der Zelle somit in zwei Testläufen 4055 mWh entnommen. Dabei wurde ein Zinkmenge von rund 10g „verbrannnt“.

Hochgerechnet auf 1Kg Zink ergäbe sich somit eine Energieausbeute von 400 Wh/Kg. Das ist ein sehr guter Wert für unsere Verhältnisse. In der Literatur findet man Angaben von etwa 200 Wh/Kg bei älteren Papers bis zu etwa 600 Wh/Kg aus aktuellen, kommerziellen Projekten. Wir liegen damit immerhin gut im Mittelfeld und dieses Ergebnis übertrifft meine (kühnsten) Erwartungen um das Doppelte :wink:

Gruss, Oliver

Für die einfachste Variante: Nimm irgendeinen Linearregler (780x, LM31x), den Ausgang mit 10k gegen GND und dann bei Betriebstemperatur die Spannung messen, das im Code dann als Konstante angeben. Mit einem Spannungsteiler kannst du aus einem dedizierten 7805 z.B. 2V machen für a_ref, so kannst du dann auch wirklich 10bit messen.

Ich würde nicht den Regler nehmen, der den ENC28J60 versorgt, denn der muss die meiste Arbeit leisten. Allein von den Lastwechseln vom ENC28J60 gibt’s so großen V_drop auf Vcc, das du das dann im Graph siehst :neutral_face:

~0,65 Ohm Innenwiderstand hört sich gut an!

Hi Alex,

Ja, danke für den Hinweis und die Tipps. 7805er hab ich auch standardmässig da, damit werd ich das mal probieren.

Gruss, Oliver