Translate

19 Mai 2011

Energiezähler "RELOADED"

Jetzt wirds ernst mit dem Energiezähler..........

Nachdem ich in den letzten Tagen und Wochen nicht
nur am Layout gefeilt habe, sondern auch noch nebenbei
den ersten "Vor-Prototyp" auf "Herz und Nieren" getestet
habe, und da noch ein paar kleinere Bugs gefunden und
beseitigt habe würde ich mal sagen, es ist an der Zeit,
das Ding mal wieder in der Praxis zu testen.
( Michael, halte Dich bereit ;-) )

Ich fasse mal kurz zusammen, was alles "Stand der Dinge" ist

Die Messung des Stromes funktioniert schon von Anfang an
Die Umsetzung auf 33Hz je 100A ebenfalls
Eine Temperaturmessung ist drin, aber die fliegt wohl raus ???

große Probleme bereitete die Umsetzung der Restenergieanzeige
auf die Tankuhr des Beetle. Zunächst versuchte ich,
per PWM einen Widerstand zu simulieren, was grundsätzlich sogar
sehr gut klappte. 300 bis 30 Ohm waren zu simulieren.
also nahm ich einen 270Ohm Widerstand und einen mit
ca.30 Ohm (50Ohm Trimmpoti) in Reihe.
Den 270Ohm Widerstand taktete ich, indem ich parallel dazu
per PWM einen Mosfet schalten liess. Mit sämtlichen
Multimetern und Messgeräten schien das wunderbar zu
funktionieren, nur nicht in der Praxis...............
Weil die Tankuhr selber taktet, also nur dann Strom schickt
wenn gemessen wird war der Elko den ich zum Glätten
parallel geschaltet hatte immer leer und so kam keine
brauchbare Anzeige zustande. Mit jeder altherkömmlichen
Tankuhr mit Gleichstrom-Versorgung hätte es wohl geklappt.
egal...... jetzt ist umgestellt auf einen Spannungsausgang,
das muss funktionieren! im Menue ist das Ganze jetzt
sehr luxuriös einstellbar, ganz gleichgültig, wie herum
das Signal des Tankgebers läuft. Auch kann man den Mittelpunkt
also 50% eigens einstellen, um "krumme Kennlinien"
auszugleichen.

Nehmen wir das Ding doch einfach mal in Betrieb!

Folgende Leitungen sind anzuklemmen:
GND
12V Dauerplus
12V "Zündung"
5V Versorgung des LEM
Signal des LEM
GND des LEM
Signal zum Drehzahlmesser
Signal zur Tankuhr
Reset (z.B.vom Ladegerät, +12V = Reset)
Temp-Fühler +
Temp-Fühler GND
Warnausgang (Relaiskontakt, schaltet nach GND)

Den Stromwandler simuliert man zunächst einfach mit
einem Poti

Jetzt kommen die ganzen Grundeinstellungen............
Ins Setup-Menue kommt man, indem man bei
gedrückter Enter-Taste einen Reset auslöst.

Dann erscheint eine Meldung:
"Starte Setup
Taste loslassen"
das sollte man befolgen ;-)

Es gibt zum Einstellen aller Werte nur vier Tasten
Rauf, Runter, Weiter(=Enter) und Reset
Ich werde diese Tasten aber durch einen Drehimpulsgeber
mit integrierter Taste ersetzen, dann gibts nur noch
einen einzigen Knopf. (schon getestet....das geht prima!)
links = runter ; rechts = hoch ; kurz drücken = Enter
und lange drücken = reset
Die Auswertung muss nur noch ins Programm integriert werden.




















Menue Seite 1
Das erste Menue ist zum Einstellen der Akkukapazität.
Wert einstellen mit Rauf oder Runter
Bestätigen mit Enter oder vorher abbrechen mit Reset
Enter speichert den eingestellten Wert und man landet
in der nächsten Menue-Seite.



















Menue Seite 2 , 3, und 4 :
Hier wird der Reihe nach die Ausgangsspannung zur
Tankuhr für 100% 50% und 0% (=leer) eingestellt.
Während man im Menue ist wird die gerade eingestellte
Spannung bereits ausgegeben, so dass man das Ergebnis gleich
kontrollieren kann.
Der im Display angezeigte Richtwert stimmt nicht ganz, müsste etwa
Faktor 0,027 statt o,o2 sein, aber das hilft auch niemandem weiter....
also nach der Tankanzeige richten, darauf kommts ja an!
























Menue Seite 5:
Einstellen des Nullpunktes des Stromwandlers
hier ist der Wert auf den angezeigten Istwert einzustellen.
Das könnte man automatisieren, aber dann hat man auch
keine Kontrolle mehr......deshalb von Hand!




















Menue Seite 6:
Messung beim Laden Ein oder Aus
Aus: In die Akkus zurüchfliessender Strom wird nicht gemessen
Ein: Es wird sowohl Entnahme als auch Nachladen gemessen.
Bei einer Auflösung von ca. 3A (1,56 wären auch möglich, aber dann
wirds zu unruhig) kann man bei kleinen Strömen keine Wunder
an Genauigkeit erwarten....... obs Sinn macht wird sich zeigen.






















Bei eingehendem Strom wird dann auch "Ladevorgang" angezeigt





















Menue Seite 7:
Schwelle des Relais
hier kann man einstellen unterhalb welcher Grenze das
Melderelais anzieht (Schaltet nach GND)
Bezogen auf % an Restenergie. Der Restenergiezähler
zählt übrigens bis -25% weiter, das hilft beim Rantasten an den
korrekten Wert.




















Menue Seite 8:
Hier kann man die Anzeige des Drehzahlmessers abgleichen
in 1%-Schritten. 80% -120% Std= 100%
Im derzeitigen Programm zwar noch nicht
vorgesehen, aber bei einem erweiterten Verstellbereich
könnte man so auch auf Sechs- und Achtzylinder-Drehzahlmesser
abgleichen. 100% = 4zyl 150% = 6zyl 200% = 8zyl.
Mal erkundigen, wo die Frequenzen bei Diesel-DZM liegen
Ich habe gerade keíne Lust, nochmal umzuprogrammieren.
Das kommt dann in der nächsten Version.

nochmal Enter gedrückt, und die Box sollte laufen!




















Durch die mögliche Berücksichtigung des Nachladens
gabs noch ein ganz neues Problem........
Ich schicke den Prozessor derzeit noch nicht "schlafen"
Das Gerät braucht ohne Beleuchtung und Sensoren
gerade mal 20mA ......was solls? Alle Verbraucher
und auch die Ausgangstreiber für DZM und Tankuhr
laufen über "Zündung", der Rest immer.
Wenn also nun der Stromwandler nicht mehr versorgt
ist, ebenso der Temperaturfühler, dann wurden
plötzlich 800A Nachladen angezeigt und -270°C........
Das war nicht schön, deshalb wird dann jetzt
Standby/OFF angezeigt und 0A. Es dauert zwar beim
Ausschalten der "Zündung" ein paar Sekunden, aber
das soll nicht weiter stören. (Das krieg ich auch noch hin!)





















Falls noch jemand gute Ideen hat, was noch verbessert werden
soll.....bitte melden!!!!

Mein Plan für die Zukunft sieht so aus, dass ich in der zweiten
oder in der zweiten und ev. dritten Zeile die Funktionen meines BMS
unterbringen möchte. Also zumindest die Anzeige der Zellen mit
der höchsten und der niedrigsten Spannung.
Noch besser die aktuell gemessene Zelle und die Gesamtspannung,
schliesslich wären mir KWh lieber als Ah -Anzeige,
aber das ist noch Zukunftsmusik, aber machbar!

Die Anzeige der bereits entnommenen Energie und der Gesamtkapazität
ist nicht so wichtig bzw lässt sich z.T. in die 4.Zeile quetschen
Rest 90.1/100Ah=90% ......oder so ähnlich......max 20 Zeichen je Zeile!!
Die Temperatur braucht wohl keiner und die Hz die der DZM kriegt
sind noch eine "Altlast" aus der Anfangsphase.
jetzt muss erst mal die Tankuhr was vernünftiges anzeigen.
Ich kann das leider nicht selber testen, weil ich andere Autos habe.
(und da hätte das bisherige System auch funktioniert!)
........und der Drehgeber statt der Tasten muss rein! (kein Problem!)

mfG
Franz

............kleiner Nachtrag........ich habe mal versuchsweise einen Atmega168
genommen und das Energiezähler-Programm draufgeladen. Das lief, klar doch!!
dann habe ich das Programm des BMS-Master aus der Versenkung geholt
und beide Programme zusammengemischt. gar nicht so einfach, da
kollidierten so manche Dinge, aber erst mal alle Variablen umbenannt
auch für etwas Überblick meinerseits......um unterscheiden zu können
was denn nun für Energiezähler und was für BMS gedacht ist.
nach ein paar kleinen Fehlermeldungen-irgendwas übersieht man doch immer...
liefen tatsächlich beide Programme  zugleich auf dem selben Prozessor.
 derzeit noch nacheinander, und das Display schaltet immer komplett um,
aber darum gings auch gar nicht, aber zumindest ist klar, dass zum Einen der
Platz reicht (derzeit 71%, noch nichts optimiert, vieles doppelt) und dass wirklich die
BMS-Master Geschichte auch noch nebenbei im Energiezähler laufen kann.
(alles im Hauptprogramm, da ist nichts Zeitkritisches drin, die Energiezählung und die
DZM-Umsetzung laufen in Interrupt-gesteuerten Unterprogrammen, wobei
Unterprogramm nicht gut ausdrückt, dass die Unterprogramme eigentlich
absoluten Vorrang haben..)

Da ist noch einiges zu tun bis das wirklich passt ohne irgendwo zu kollidieren,
AD-Wandler sind doppelt belegt, unterschiedliche Menue-Strukturen
aus Platzgründen stillgelegte Funktionen etc.
ich muss mich da erst wieder so richtig reinversetzen in alles,
das ist nun schon wieder eine Weile her,
aber es ist alles problemlos kombinierbar, soviel steht schon mal fest,.
und es ist noch immer Platz für zusätzliche Features!
(insbesondere Menuepunkte zum Konfigurieren)
Die Preisgestaltung bei den Atmegas ist auch ein wenig seltsam.......
Der Atmega 48 ist in letzter Zeit teurer geworden, aber die größeren
werden eher billiger und der Preisunterschied zwischen dem Atmega88
und dem Atmega 168 mit doppelt so viel Flash-Speicher beträgt gerade
mal 5 Cent!!!. den genauen Betrag habe ich grad nicht im Kopf, aber es sind
keine vier Euro. ....eigentlich geschenkt angesichts der ganzen Funktionen!

Das größte Problem wird letztlich sein, all die gesammelten Infos auf dem
EA-DIP 204 mit 4 x 20 Zeichen lesbar und übersichtlich darzustellen.

Ich habs einfach mal so angeordnet:

















Da ich keine Messwandler dran habe, ist der Spannungswert jetzt nur simuliert.
Zelle 07 wurde gerade erfasst mit 4,05V.  Die 12V Bord"batterie" hat 12,15V
Höchste Zelle: Zelle01 mit 4,05V  Niedrigste Zelle: Zelle01 mit 4,05V
Stromstärke 792A  , 1Minute ist seit letztem Reset vergangen
rechts davon ist noch etwas Platz für Statusmeldungen.........
Die könnten ja z.B. auch die Zeitanzeige überdecken.
Restenergie = 114,2 von 128Ah = 89%

Ein bisschen hab ichs nochmal umgestaltet,
und die Statusmeldung nach links versetzt,
( Entn.  ;    Laden    ;    Standby   ;    Alarm  ;    ?????  )
so ist das besser lesbar.
Noch ein wenig mit der Formatierung spielen,
(Stunden und Minuten mind.2-stellig , die %-Angabe unten immer ganz rechts etc.)
dann sollte das so allmählich passen!


















Mehr geht wohl nicht, ohne unlesbar zu werden.

Nachtrag 25.05.2011:
Die Formatierung ist optimiert, ich habe beschlossen, dass das jetzt einfach mal so passt!
Das Problemchen mit zu langem Text bei negativen %-Werten ist behoben.
jetzt wird bei über 100% und unter 0% ein anderer Text gezeigt.
z.B.: " Voll! 107.7Ah =107% " bzw "Leer!  -27.3Ah    = -27%"
Bei negativen Zahlen kommt das Vorzeichen zusätzlich dazu.
Das Vorzeichen müsste ich entweder dauernd zeigen, das gefällt mit aber nicht,
oder man legt für negative Werte eine andere Formatierung fest...
ich habe mich für letzteres entschieden.
Beim Laden steht ein - vor der Amperezahl, das ist irgendwie"doppelt gemoppelt",
aber das lasse ich vorerst mal so da müsste ich sonst eine neue Variable festlegen
und den Betrag des Wertes anzeigen.... das ist mir zu viel Aufwand
nur für die Optik. Eigentlich ist es ja auch so korrekt, wenn ich die Entnahme
als positiven Wert anzeige.

Heute Abend habe ich den Drehimpulsgeber in Betrieb genommen und ins
Programm integriert. Puuuuhhh....... war nicht ganz so einfach.........
Der "Encoder"-Befehl in Bascom ist offenbar ziemlich unbrauchbar, sobald das
Programm etwas größer ist, oder wenn da sogar wie in diesem Fall
"wait" Befehle drin sind.(in der Zeit passiert halt NICHTS !)
Die Impulse kommen einfach zu schnell hintereinander,und mein
Programm ist incl. Kommentaren und Leerzeilen doch mittlerweile
auf über 1300 Zeilen angewachsen.........
Im Testprogramm gings noch halbwegs, aber im doch schon recht umfangreichen
Energiezähler + BMS-Programm wurde ich nicht mehr froh damit.
Eigentlich wollte ich keinen der "wertvollen" Interrupt-Eingänge mit Eingabetasten
belegen, aber das reagierte alles zu langsam, daher nahm ich doch zumindest einen
Interrupt-Eingang für den Encoder. Damit funktioniert die Eingabe auch, wenn man
etwas schneller am Knopf dreht.In diesem Fall ist das eigentlich völlig egal, die
Kontakte hängen sowieso an den Interrupt-Pins, aber man denkt ja weiter......
Manchmal braucht man diese Eingänge ganz einfach für was Anderes.
Den Drehimpulsgeber finde ich halt ganz besonders praktisch,
weil er 3 - 4 Tasten ersetzen kann und die komplette Bedienung ermöglicht
Ich werte nur die negative Flanke einer Taktspur per Interrupt aus und
vergleiche dann im Unterprogramm den Zustand der zweiten Spur
um Drehrichtung und Takt zu erkennen. Es ginge auch feiner aufgelöst, aber das möchte
ich gar nicht feiner haben. Ich werde ev. noch versuchen, die Flanke mit dem
"debounce"-Befehl und kürzerer Zeiteinstellung auszuwerten......mal sehen obs was bringt.
Der "Encoder"-Befehl war mir einfach zu langsam. Ich habe einiges versucht, die
Entprellung anzupassen, aber das war zwecklos!
Das war auch nicht die Ursache der Probleme!
Vielleicht sollte noch erwähnt werden, dass die aktuelle Programmversion die
Ports und Pins benutzt, die ich auf meiner "Universalplatine" vorgesehen habe.
Da ist fast jeder Port anders belegt, als im "Vor-Prototyp" aber so macht das einfach
noch mehr Sinn, insbesondere weil man so mehrere PWM-Ausgänge, die serielle Schnittstelle,
die Interrupt-Eingänge und die AD-Wandler gleichzeitig nutzen kann.
Das sollte schon so passen!Bisher funktionierts wie erhofft. Ich hoffe, die Platinen
noch am Freitag zu bekommen, dann gibts vielleicht da schon einen ersten Test.
wird aber wohl Montag werden.

Jetzt gehts eh drum, wie ich am Besten weiter mache.
Wenn die Tankuhr- Ansteuerung klappt, dann wäre zumindest die Energiezähler-
Variante einsatzfähig. Die BMS-Master-Funktionen könnte ich ev. abschaltbar machen.
oder einfach entfernen bis ich benutzbare Messwertaufnehmer habe.
da gibts noch viel zu tun, und ich bin mir immer noch nicht sicher, wie ich es denn
aufbauen soll. Die Variante, mit einem Baustein gleich vier Zellen zu messen
wäre mir die liebste aber der unterschiedliche Strom in den Eingangsspannungsteilern
gefällt mir nicht. Das kann man aber anpassen.
Ein Attiny je Zelle wäre diesbezüglich besser, aber dann brauche ich auch je eine
galv. getrennte Schnittstelle pro Zelle.
Die Messung an sich funktioniert schon lange.

Die Energiezähler-Einheit läuft so weit wie gewünscht, da fehlt nur noch der
Praxistest...........Insbesondere die Tankanzeige bereitete Probleme!
Eine kleine Änderung habe ich doch noch gemacht:
So wie bisher schon bei Tiefentladung von mehr als 25% gibt es jetzt
auch eine Meldung bei Laden auf mehr als 125%.
Der Wert ist einfach mal willkürlich gewählt, könnte man auch noch ins
Menue mit reinpacken.......???????

Beim BMS gibt es auch wieder ein paar neue Features.
Neben den Einstellmöglichkeiten für oberen und unteren Grenzwert sowie
der Zellenanzahl per Menue ist nun auch die Geschwindigkeit des Weiterspringens
zur nächsten Zelle im Menue einstellbar (Programmlaufzeit + 10 - 2550 ms)
Ausserdem fehlte noch die Möglichkeit einzelne Zellen gezielt zu messen.
Das ist jetzt auch möglich. Ein kurzer Druck auf den Knopf schaltet um auf
Einzelmessung (Min-Max Anzeige ist in diesem Modus nicht aktiv)
Drehen am Knopf wählt die nächsten Zellen.
ein weiterer kurzer Druck schaltet wieder zurück auf automatischen Durchlauf.
Im Normalbetrieb ist die Drehung des Knopfes ohne Funktionalität.

Kurzer Druck schaltet um auf Einzelmessung und wieder zurück.
ein langer Druck (ca 7s) setzt die Messwerte zurück ("Warmstart")
und ein noch längerer Druck bzw gehaltene Taste nach Reset startet das
Setup-Menue. Die BMS-Menuepunkte kommen nach den Zähler-Einstellungen.

Derzeit:
Ah voller Akku
Tankuhr 100%
Tankuhr 50%
Tankuhr 0%
Nullpunkt LEM-Wandler
Messung beim Laden
Schwelle Relais
Abgleich Drehzahlmesser
--------------------------BMS
Alarm unten (Spannung einer Zelle)
Alarm oben (Spannung einer Zelle)
Zellenzahl
Geschwindigkeit

Eventuell noch zusätzlich einstellbar geplant:
Schwelle für Alarm "Ueberladen" (mehr als ....%)
Schwelle für Alarm "Tiefentladen"(mehr als ....%)
Warnschwelle oben (Vorwarnung ohne Alarm)
Warnschwelle unten (Vorwarnung ohne Alarm)
Anziehen des Melderelais bei BMS-Alarm
Alarm bei Fehler Bordbatterie

Na ja, irgendwann ist Schluss.......Das reicht doch, oder??
wenn das so weitergeht dann muss ich im Menue noch
verzweigen......... Letzter Stand an Programmumfang:
derzeit sind 69% Flash belegt, da geht noch vieles......
aber anzeigen wird immer schwieriger!
Die Warnmeldungen kommen derzeit in der untersten Zeile.
eigentlich könnte man meinen, sie wären in der dritten Zeile besser aufgehoben,
aber da ich die %-Werte mit Erscheinen der Meldung festlege
würde sich der Wert dann ohnehin nicht mehr ändern.
Es würde also gar keinen Sinn machen, SOC weiter anzuzeigen.
Man bekommt die Meldungen nur per Reset wieder weg.
Eigentlich ist das durch Zufall entstanden, weil "früher" nur die
Tiefentlade-Meldung existierte und ein Nachladen nicht vorgesehen war,
aber das ist ganz gut so! Das bleibt so!

Nachtrag 30.5.2011:
Eigentlich hätten die Platinen heute ankommen sollen...na ja dann halt morgen...
An dieser Stelle ist gerade Zeit, ein wenig über die Messmodule nachzudenken.
Da gibt es einige noch nicht wirklich gelöste Problemchen, aber die sind
vom Ansatz her wichtig, also von direktem Einfluss aufs Gesamtkonzept.
Hier gehts um die Frage der Referenzspannung, der Versorgung und
der galv.Trennung der Datenübertragung und der Versorgung.
Alles hat Vor- und Nachteile perfekt ist keine Version.Und da ich die Daten
seriell übertragen will brauche ich auch noch einen Quarz je Messmodul.
Wie weiter oben schon erwähnt habe ich zwei "Favoriten"
Variante1 : Je ein attiny25 pro Zelle +Quarz + Optokoppler, der könnte
direkt aus der Zelle versorgt werden,wenn er mit interner Referenz von 1,1V
arbeitet. die 2,5V Referenz kann ich nicht nehmen, da die Zellenspannung
so weit abfallen kann.
Vorteil: Messauflösung, Stromverbrauch(?), Stromaufnahme alle gleich
Nachteil: Quarz und 2 Optokoppler je Zelle

Variante2: Je ein Atmega48 für je vier (bzw fünf(?)) Zellen
Spannung wird aus der Differenz von zwei Eingängen ermittelt. nur 1/8 der
Genauigkeit bzw Auflösung, aber das genügt gerade noch.
Immer vier Zellen als Einheit uberwacht, Versorgung aus den Zellen,
oder auch per "ADUM"-Wandler. Hierzu fehlen noch Versuche, was letztlich Sinnvoller ist.
Die "Adum" brauchen ziemlich viel Leistung, und die Ausgangsspannung ist nicht
geregelt und 5,2V am Ausgang ist ein "doofer" Wert. also entweder direkt
den Atmega damit betreiben und die interne Referenz von 1,1V nutzen oder
auf 3,3V ausweichen. Die Qualität der internen Referenz ist hier entscheidend.
Dazu fehlen noch Versuchsergebnisse.Bei einem "ADUM" für vier Zellen
ist die Optokoppler-Frage auch gleich gelöst.Mit "ADUMWürden die Wandler
vom 12V-System versorgt und an den Akkus wären "nur" noch die Eingangsspannungsteiler.
Die sind aber nicht zu vernachlässigen, und da jeweils gegen ein und die selbe Masse
gemessen wird sind die Stromstärken nicht identisch.
Das müsste man auf gleiches Niveau erhöhen und das möchte ich nicht.....
Aus den 14V könnte man den Atmega aber auch versorgen , dann aber nicht abschalten,
aber geht das überhaupt? über die Schutzdioden würde der Mikroprozessor
auch mit Spannung versorgt werden. das muss ich auch noch testen!
trotzdem ist mir diese Variante lieber, zumal da auch noch vier PWM-Ausgänge da wären
um eine Balanzier-einrichtung anzusteuern. (gar nicht ganz einfach, wegen der
spannungspotenziale bis 14V und der Betriebsspannung des Atmega von 5V)

Ich werde vorrangig versuchen die Version "1 Atmega für vier Zellen" in eine
praxistaugliche Form umzusetzen und vielleicht kann ich sogar auf die Optokoppler
bzw "ADUM" verzichten....mal sehen.....da war mal was....
siehe   Seiko S-8209BAA bei denen werden die Daten über eine Kette von
Mosfet durchgereicht (Daisychain) aber ich sehe da Probleme beim Anklemmen.
Siehe hierzu:

http://vehikelfranz.blogspot.com/2009/09/jawohl-der-ladereglerbalancer.html

....das Projekt zieht sich in die Länge....

Damals hatte ich auch schon den LTC6802 im Visier.....abgesehen von der nicht ganz
einfachen Auswertung habe ich auch schon negative Meinungen zu dem Chip gehört.
Es soll angeblich Betriebszustände bzw Defkte geben, bei denen der Spannungswert einer
Zelle "einfriert" und weiter ausgegeben wird ohne sich noch zu ändern.
(Ich konnte das nicht selbst nachprüfen, das ist also keineswegs belegt, eigenntlich wäre der
Baustein sehr gut geeignet für das, was ich vorhabe!!)
siehe dazu auch:
http://www.linear.com/demo/DC1393B


mfG
Franz











Keine Kommentare:

Kommentar veröffentlichen