Translate

09 Dezember 2009

Serielle Datenausgabe klappt besser als erwartet!

Nachdem ich die serielle Ausgabe der Messwerte
mit Assembler anfangs nicht so recht auf die Reihe brachte,
(Das Auslesen des ADC-Wertes funktionierte schon gut,
aber Umrechnen auf "Klartext"lief noch nicht )
ich steh halt noch am Anfang,
und da Multiplikationen in Assembler
alles Andere als einfach sind, von der Umwandlung
in lesbaren Text ganz zu schweigen,
hab ich es nun mit BASCOM versucht.
Da ist so was wesentlich einfacher zu lösen.
Zwar macht das Programm manchmal
seltsame Sachen, aber für einfache Projekte
scheint es sehr brauchbar zu sein.
Vor allem für Anfänger leichter verständlich.
Man findet auch viele Programmbeispiele.
Allerdings ist der erhaltene Programmcode etwas
länger und das könnte noch problematisch
werden.

Im Netz habe ich ein fertiges Programm gefunden,
das eigentlich für ein per PC regelbares
Netzteil gedacht ist, in dem aber eine komplette
Spannungsmessung mit dabei ist.
Hier wird die Ausgabe komplett umgerechnet und
gewissermaßen im Klartext ausgegeben.
Die PWM-Augabe brauche ich nicht,
Die kann man ganz einfach weglassen.

http://www.elo-web.de/elo/mikrocontroller-und-programmierung/bascom-avr/einstellbares-netzgeraet

Ich kann damit sowohl die Zellennummer als
auch die Spannung direkt lesbar ausgeben.
Das ist mehr,als ich je zu hoffen wagte!!!!!!!!!!

...und der zweite ADC ist auch noch frei!!!!

So bräuchte ich ja nicht einmal einen
"Auswerte-Rechner"!

Wenn jeder Attiny erst sendet, wenn er eine
Sendeanforderung kriegt, dann ein bisschen wartet
und dann die Ausgabe des nächsten startet,
dann braucht man nur noch ein kleines Display,
das serielle Daten direkt darstellen kann und
einen Startknopf zum Starten des Auslesens.

Da bin ich jetzt selbst mal wieder überrascht,
wie einfach das geht!

Aktueller Stand vom 9.12.09:
ATtiny13 betrieben mit 5V
(Versorgung 5,01V, auch Referenz)
liest direkt ein, (kein Spannungsteiler)
rechnet um und schickt
die Daten seriell mit 9600Baud raus, sobald
am seriellen Eingang irgend ein Signal
ankommt.

Die Genauigkeit ist überraschend gut,
aber direkt von der Qualität der Referenz
abhängig. Ich habe derzeit 5,01V anliegen.
Daher die exakte Messung!
Die interne 1,1V-Referenz
ist mit +- 10% angegeben, aber im Normalfall
wesentlich!!!! genauer.
Es könnte aber durchaus nötig sein,
da noch etwas abgleichen zu müssen,
also den Umrechnungsfaktor an den jeweiligen
ATtiny anzupassen.
Das wird sich noch zeigen!

Eine Codierung, so dass nur auf einen bestimmten
Befehl geantwortet wird gibt es noch immer nicht.
Das ist wohl zunächst auch gar nicht mehr nötig,
da die Werte gar nicht mehr umgerechnet
werden müssen.Es würde so schon reichen,
wenn die Ausgabe automatisch schön der
Reihe nach erfolgen würde.
Eventuell nach Drücken eines Knopfes,
ansonsten könnte der erste ATtiny, der ja
an Masse hängt immer die Gesamtspannung
messen und anzeigen.
Der zweite AD-Wandler wird ja bisher
noch nicht genutzt!

Das wär doch schon was!
Anzeige zeigt Gesamtspannung, und wenn ein
Knopf gedrückt wird werden im
Sekundentakt die einzelnen Zellen angezeigt.

Etwaige Störmeldungen kommen völlig
unabhängig davon, wenns angebracht ist.

....Und das alles ohne Steuerrechner!!!!!!!

"TO DO":
Testen, ob die Qualität der internen Referenz
ausreicht. (erledigt! reicht völlig aus! ca 1% Fehler)

Multiplikator an 1,1V Referenz und Teiler 4:1 anpassen.
(schon erledigt, siehe Anmerkung ganz unten)

Das Ganze per ADUM5241 galvanisch
getrennt versorgen und auslesen
(Das geht sicher!)

Die Seriellen Ausgänge zusammenfassen.
(I²C ?? Single-Wire ?? ev nur Dioden und Pull-Down
Widerstände ?? Hmmmmmm...............)

einfache Kopplung für den Auslese-Befehl an den
nächsten ATtiny austüfteln.
(das geht auch ohne galv.Trennung weils immer nur
der nächste ist, ev. reicht schon ein Kondensator)
ansonsten halt per Optokoppler

Anzeige mit seriellem Eingang besorgen.
Die gibt es für ca 50-100€ je nach Größe
Zahl der Zeichen und Zahl der Zeilen.
(Da tuts vorerst noch ein PC mit Terminal-Programm)

Auch wenn ich mich wiederhole,
Mir ist es sehr wichtig, dass die eigentliche
Balancerschaltung aus dem jeweiligen Akku
versorgt wird, und völlig eigenständig läuft.
Auch die Störmeldungen brauchen keinerlei
zusätzlichen Rechner. Die werden von
der Balancereinheit ausgegeben.
Alles was mit Spannungsanzeige zu tun hat
ist eine zusätzliche unabhängige Schaltung.
Ich sehe die Spannungsanzeige als Option,
welche allerdings sehr sinnvoll ist.
Da aber Über- und Unterspannung schon
überwacht werden, ist es eigentlich nur bei
einer Fehlersuche nötig, die Akkuspannungen
abzufragen.Oder wenn man nur neugierig ist.
Das liesse sich auch komfortabler gestalten,
aber meine Anlage soll unbedingt
übersichtlich und verständlich bleiben.
Deshalb werde ich auch auf einen
Steuerrechner verzichten, wenn das
tatsächlich geht.( kann ja später noch
kommen, jetzt aber noch nicht)



Hier ein Video vom 9.12.09:















bis demnächst!

Franz

P.S.:

Nachtrag 10.12.09 und 11.12.09:

Das mit dem Umrechnen hat ganz schöne
Stolperfallen............
Da die Variablen als Integer definiert
sind darf +- 32768 nicht überschritten
werden.Das gilt auch für irgendwelche
Zwischenergebnisse!
Gerechnet werden kann nur mit
ganzen Zahlen, Nachkommastellen
werden einfach ignoriert.
Führende Nullen ebenso!
Das machts ganz schön kompliziert!
Eine kleine Genugtuung ist die Tatsache,
dass auch der Autor des Basisprogramms
darüber gestolpert ist.
(Statt 0,01 wurde o,1 angezeigt,
der Fehler ist mittlerweile behoben)
Da ich jetzt mit 10Bit messe ist der ADC Wert
im Bereich 0-1023 (1023 = 1,1V am ADC bei
interner Referenz von 1,1V soweit passts)
Da man nur mit ganzen Zahlen rechnen kann,
muss z.B eine Multiplikation mit 1.1
durchgeführt werden indem man erst *11
und dann /10 rechnet. Bei krummen werten
kommt man da schnell in Bedrängnis!
(32768 = 1024 * 32)

Immerhin kriege ich jetzt schon mal
die mV am ADC mit interner Referenz
von 1,1V richtig in mV angezeigt.

Aber!!!!......
dieser Wert müsste noch mit 4,03
multipliziert werden
*4,03 ist gar nicht so einfach!

(Anm.Spannungsteiler
1K + 330R entspr. 4,03:1)

1100 mV * 403 = 443300, geht also nicht!

110 *403 = 44330 immer noch zu viel!

55 *403 = 22165 Ja!

22165 / 5 = 4433

also: Vollausschlag mit Spannungsteiler
1 : 4,03 liefert am ADC 1023

entspricht 4433mV tatsächlicher Spg.

wenn man das durch 1000 teilt
kommt 4 raus (Integer = ganze Zahl!)

um die Nachkommastellen zu kriegen:

4 * 1000 = 4000

4433 - 4000 = 433

Für die Werte vor dem Komma muss
eine eigene Variable definiert werden.

dann muss das vom gesamten
Subtrahiert werden .

Ausgabe erfolgt dann so:

erst Text z.B. Zelle 001
dann ganzzahliger Wert
dann das Komma (ist Text)
dann der Rest der Subtraktion.
Aber Vorsicht!

Die führenden Nullen werden ja ebenso
verworfen!Deshalb kann man nur eine
Stelle korrekt ausrechnen!

0,09 ist sonst plötzlich 0,9 !!!!

Für die zweite Nachkommastelle
bräuchte man dann nochmals
eine Variable, und das ist dann
dem kleinen ATtiny allmählich
zuviel..............

Da ist man versucht, das Ergebnis
doch nur in mV anzuzeigen! ;-)

Man sieht, so ist das alles noch nicht optimal
und man muss etwas anders ansetzen.
insbesondere sinds viel zu viele
Rechnungen.Hier kommt es zwar nicht
auf die Zeit an, aber da immer nur
ganze Zahlen verarbeitet werden
summieren sich die Rundungsfehler.

Die ganze Rechnerei muss also in eine Zeile
wenn das irgendwie geht.
MaximumADC = 1023 entspr. 4433mV

U(mV) = 1023 *4,33
Da maximal mit 32 multipliziert werden kann....
sollte man versuchen, diesen Rahmen so gut
es geht auszunutzen um möglichst genaue
Ergebnisse zu erhalten.
4,33 *6 = 25,98 etwa 26 das ist besser!

U(mV) = (1023 *26) /6 = 4433 mV
das ist ok! und nur eine Rechnung!

Es ist also abzuwägen, ob sich der
rechnerische Mehraufwand lohnt, nur
um einen Widerstand zu sparen.

Der Faktor 4,03 ergab sich aus der
Verwendung von 10k + 3k3
bzw 1k + 330R um Standardwerte
verwenden zu können.

Ca. 4:1 ist in diesem Fall wichtig,
da mit 0-4,4V der Messbereich
optimal wäre.(ATtiny 13)

mit (1k5 +1k5) + 1k käme 4:1 raus
und alles wäre viel einfacher,
Die ganzen Rechenfehlerchen gäbs
dann nicht mehr, aber die fallen
auch so kaum ins Gewicht.

Beim ATtiny 25 sieht die Sache
schon wieder etwas anders aus.

Der hätte auch noch eine ca.2,5V
Referenz drin, die aber
logischerweise nur mit 5V
Versorgung genutzt werden kann....

Ausserdem hat der 25er mehr Speicher.
Ich hoffe, er ist imstande, mit dem zweiten
AD-Wandler eventuell auch noch die
Gesamtspannung zu messen.

Die würde ich gerne anzeigen, wenn
grad nichts anderes zu tun ist.














Das sieht mittlerweile so aus!

Umrechnen klappt,Inklusive der Berechnung
des Eingangsspannungsteilers sowie
der Ausgabe der Spannung als Zahl mit zwei
Nachkommastellen.

Der zweite AD-Wandler arbeitet auch,
Die Gesamtspannung könnte also
problemlos als Standardanzeige
im Display stehen.

Aber jetzt ist die Grenze des ATtiny 13
erreicht, ich nutze 99% des Speichers!

Man könnte jetzt anfangen, zu Tricksen,
z.B. die Serielle Schnittstelle nur als
Ausgang nutzen etc oder doch nur
mV anzeigen etc. ........
oder einfach den ATtiny 25 nehmen.

Das hab ich eh vor!

Bei "größeren" Atmels könnte man die
Nachkommastellen einfacher ausrechnen,
wenn man die Variablen als SINGLE
definieren würde und die Multiplikatoren
als Konstante abgelegt wären.
Das wäre viel eleganter (Rundung etc.),aber
solche Fliesskommaberechnungen brauchen
sehr viel Speicher.
Beim kleinen ATtiny führt da kein Weg hin, weil
ganz einfach der Speicher zu klein ist.

Ich werds mal testen, wenn ich ein paar
ATtiny25 habe.

Ansonsten bin ich jetzt einfach mal mit
dem Erreichten mehr als zufrieden, und
der nächste Schritt wird sein, ein
Display mit seriellem Eingang zu bauen
bzw. zu besorgen.

Ich habe schon ein passendes Programm für
einen PIC 16F628 gefunden.
Das muss ich mir mal alles zusammenbasteln
und schauen, obs so geht.(wäre ja zu schön)
Diese Pics setzen wir in der Firma ein,
Programmiergeräte etc. sind vorhanden.

Leider fehlt mir ein passendes Display und
ein passender Quarz.
(Eigentlich sollte auch der interne
Oszillator funktionieren)

Ich bin aber noch etwas skeptisch,
ob das Programm auch mit meinen
Daten arbeitet.
Ich hab in der Beschreibung gelesen, dass
CR und LF ignoriert werden.... mal sehen!
Ansonsten gibt es auch fertige Module
zu kaufen.

z.B.:

http://www.coptonix.com/html/rs232_lcd_adapter.html
das wär genau das, was ich haben will!!!!


Nachtrag 21.02.2010:

Ich hatte noch keine Zeit, weiterzutesten.....
und bevor ich zu viel investiere möchte ich noch ein ganz
anderes mögliches Problem sicher ausschliessen:

Wie genau ist der interne Takt der ATtiny13 ??????

Da könnte es Probleme geben insbesondere
mit der Temperaturstabilität!
Na, wir werden sehen!



Franz













27 November 2009

Wie gehts weiter mit dem LIPO-Balancer

Ich konnte es dann doch nicht lassen
und hab mal wieder eine Nachtschicht
eingelegt um mal die serielle Ausgabe
der Spannungsmessung zu
programmieren.
Grundsätzlich geht das schon ganz gut,
aaaaaaaaaber...................
1. momentan wartet der ATtiny auf eine
Eingabe und erst dann wird weiter
balanziert das geht so nicht!
Der soll laufen, egal was an der
Schnittstelle los ist.
Ist sicher nur eine winzige Änderung,
aber ich habs noch nicht gefunden wies
geht- Geduld! wird schon noch!
Das ist mein erstes ATtiny Programm!!!
Da dauert manches halt etwas länger!
Vielleicht hat ja wer die Lösung!

mit:
rcall RdCOM
rcall RdADC
rcall WrCOM
(das sind Unterprogramme
des Microprozessor Lernpakets)

gehts halt nicht, weil das
Programm bei RdCOM
wartet, bis an der
Schnittstelle was passiert.
Bei einem eigenständigen
Spannungsmesser wäre
das aber egal !
Ich müsste das Verfahren dahingehend
ändern, dass der Zustand der Schnittstelle
nur abgefragt und irgendwo abgelegt wird.
Dann müsste entschieden werden wie
es weitergeht.Das Ganze ist aber ohnehin
kein Problem, wenn die Spannungsmessung
so wie ich es plane, völlig unabhängig
von der Balancereinheit laufen soll.

2. Das Ganze soll auch noch laufen wenn
der Akku leer ist also bis 2V und ev. darunter.
(der ATtiny 13v bzw. 25 laufen ab 1,8V stabil)
Eine Kopplung mit einer Art M-Bus kann ich
so nicht realisieren, zumindest nicht mehr
zuverlässig wegen der niedrigen Spannung
und CAN etc ist mir
derzeit noch viel zu kompliziert und braucht
auch zusätzliche Bausteine.
Eventuell wärs mit "Single-Wire" bzw I²C
sogar machbar, aber da fehlts bei mir
noch an Erfahrung.

Wie gehts weiter?
Ich denke, ich werde ADUM5241
Isolierübertrager mit integrierter 5V
DC-DC-Wandlung einsetzen,damit wär
schon mal die galvanische Trennung
der seriellen Schnittstelle
gelöst und mit den isolierten 5V kann
ich einen zweiten ATtiny betreiben
der am selben Spannungsteiler hängt
wie der Balancer. Damit könnte ich
jetzt schon die Spannung auslesen.

Falls ich es gelöst bekomme, die
Balancer- und die
Auslesefunktion zu entkoppeln
würde auch ein ATtiny reichen, aber
ich sollte ihn dann mit 5V versorgen.
Dann wäre der Balancer aber nicht
mehr eigenständig!
So ein ATtiny kostet nur ca 1 bis 1,50 €
was soll der Geiz.....??????
Bevors Probleme gibt, bau` ich halt
zwei drauf!
Das würde auch die Feinabstimmung
wieder vereinfachen.
Jeder Spannungsmesser braucht
eine spezifische Kennung für die
Adressierung.Die könnte dann
einfach so bleiben und zum Einstellen
der Balancerwerte könnte man
vorgefertigte HEX-files nehmen,
weil die ja so wieder unabhängig
von der Kennung der Zelle wären.
Ich bräuchte den Source-Code
nicht veröffentlichen und der
Anwender muss nicht
Programme compilieren,
sondern nur reinladen.
Oberer und unterer Grenzwert
ist eh fest und vom Akku-Typ
abhängig, also müsste nur die
Schwelle des Balancers eingestellt
werden. (in 0,0173V-Schritten)
Allein das spricht schon für
die Version mit zwei ATtinys.
Ausserdem wäre so die
serielle Schnittstelle des
Balancer-ATtiny frei,
also zwei weitere Ports frei
z.B. für "Unterspannungs-
Vorwarnung"
und
"Balancerschwelle
überschritten"
auf Balancer-Ebene,
also mit Schaltausgang
weil ich die serielle
Spannungsauslesung eher
als Option betrachte.
Ich will nicht von der
Funktion eines externen
Rechners abhängig sein!
Eigentlich sollte es reichen,
zu wissen, ob alles ok ist.
Ist der Wert wirklich so
wichtig????
Schön wärs auf alle Fälle,
den ablesen zu können,
das ist klar! Aber halt auch
Luxus!

Die Ausgabe der Meldungen
direkt aus dem Balancer werde ich
ohne galv.Trennung realisieren.
das geht gut mit einer Reihe von
kleinen P-Kanal Mosfet +Widerstand
in Reihenschaltung.
(je einer pro Modul und Meldung)
Wenn einer öffnet ist die Reihe
unterbrochen, ein Transistor an Masse
öffnet und ein Relais schaltet.
Braucht einen Draht je Meldung
durchgeschleift und geht ohne
zusätzliche CPU oder dergleichen.
Es soll ja möglichst einfach bleiben!

Wie ist das aber mit Jack Rickards
Ansichten vereinbar?

Ganz einfach!
So sehr widerspricht sich
das gar nicht!Man darf es nur
nicht zu verbissen sehen!
Letztendlich läuft doch alles
darauf hinaus, dass es nicht ohne
eine Unterspannungs-
Überwachung geht! Das ist es!
Ob nun oben oder unten
balanziert wird ist doch egal!
Der schwächste Akku wird immer
den größten Spannungshub haben,
ganz egal, wie mans macht!
Aber "unten" balanzieren
hat einen riesigen Vorteil!!!!!!!!
Da ja gar nicht mehr bis zum
"Ende" balanziert wird sondern
gewissermaßen mit dem Laden
aufgehört wird wenn die erste Zelle
voll ist, und letztendlich die
Balanzierspannung so angepasst
werden sollte, dass alle Zellen
zugleich leer!!!!! werden,kann
der Shunt-Widerstand viel
schwächer ausgelegt werden
und er braucht gar nicht den
Ladestrom niederzubügeln
sondern es genügt, jede
Zelle sanft in die richtige
Richtung zu schieben.
Somit ist auch das Problem
mit der Abwärme in den
Shunts kein Problem mehr.
Nach etlichen Ladezyklen
sollte alles passen.Ein wenig
Beobachten, den schwächsten
Zelle etwas mehr Ladung geben,
den stärksten etwas weniger
das wars dann schon!
Am Grundprinzip der
Schaltung ändert sich da nichts.
Und auch nicht an der
Tatsache, dass LIPOs allergisch
auf Über- und Unterspannung
reagieren! Nur die Sichtweise
auf die Problematik ist eine
etwas Andere.

Und Ich denke mal:
JACK HAT GRUNDSÄTZLICH RECHT!!!!
es hat ein bisschen gedauert,
bis ich alles verstanden habe,
was er meinte und ich will
auch nicht jede seiner
Meinungen gut heissen,
aber die Richtung stimmt!


Was wird so ein Balancer-Modul
letztlich kosten?????

ATtiny25(oder 13V) je ca 1,20€
1Mosfet für Shunt ca 1€
1Shunt 10R???? ca1€
1 kleiner p-Kanal-Mosfet
je Meldung ca 50cent
ein paar Widerstände,
Bandkabel+Stecker
+Kleinteile.....+Platine
also ca 10€ an Material
je Zelle denk ich mal,
an reinen Materialkosten.

Dafür gibts dann ein
wunderbar konfigurierbares
BMS-System der
Mittelklasse mit Über-
und unterspannungs-
Überwachung.
und eventuell
"Vorwarnung bei
Erreichen der Grenzen"

für serielle Spannungsauslesung
käme noch dazu:
ADUM5241 ca 3,50$
noch ein ATtiny......
also ca 5€

und ein Auslesegerät/Display
hmmmmm............
je nach Luxus..............
bzw was man sich da zurechtschnitzt,
und wie bunt??????
PC?
Handheld-PC ?

ev übers Navi??

LED-Display mit kleinem ATmega?
und Tasten zum durchklicken,
ev MAX-MIN-Anzeige
Das sollte so in der 50€-Region
realisierbar sein.

Wie schon erwähnt will ich
das "Übertragungsprotokoll"
aufs minimalste beschränken.
Derzeitiger Entwicklungsstand:
Zellennummer z.b. 008 wird
gesendet.
Zelle 8 erkennt nur diesen einen
Befehl und antwortet mit dem
AD-Wandler-Wert in 8-BIT
bezogen auf 1,1V Referenz
und ohne Umrechnung des
Eingangsspannungsteilers 1:4.

Zu Kompliziert! Klar!

8Bit bedeutet 255 Stufen,
Referenz am AD-Wandler 1,1V
1,1V / 255= 0,0043V
am Eingang je Einheit.

Spannungsteiler 10k / 3k3
= 4,03 : 1

also 1 Einheit = 0,0173V
(0,0043 x 4,03 = 0,0173)
am Akku

z.B.: 208= ca.3,6V (3,605)

Nochmal : Master schickt 008,
Zelle 008 antwortet 208
also hat Zelle8 gerade 3,6V

Das ist Überschaubar!

Die Umrechnung müsste
im Display erfolgen.

Aufgrund der winzigen Daten-
menge kann die Baudrate
sehr niedrig sein.

Der ATtiny könnte auch 10Bit
aber dann besteht die ausgegebene
Zahl aus 2 Byte; 2Bit + 8Bit
bei den 3,6V von vorhin wären
das dann 3 64
(00000011 01000000
also 3 x 256 + 64 = 832

Das gäbe dann zwar eine
Auflösung der Spannug
in 0,0043V Schritten
am Akku aber davon hat
niemand wirklich was.
Nur die Umrechnung wäre
komplizierter.
.....wenn mir mal
langweilig sein sollte...HA! HA!

Das kann man mit einem
primitiven Terminalprogramm
auslesen, das nur eine Reihe
von Nummern sendet und die
jeweilige Antwort anzeigt.
Vorerst muss man dann
zwar noch die Werte mit
0,0173V multiplizieren,
aber das ist auch noch lösbar,
.......später mal......

mfG Franz

23 November 2009

Die Thesen des Jack Rickard........

Was will uns Jack Rickard eigentlich sagen?

(für die, die der Englischen Sprache nicht
ganz so mächtig sind fasse ich das mal
kurz mit meinen Worten zusammen)


Jack fährt unter anderem eine Porsche
356-Replika mit Elektroantrieb und bei
diesem Auto verzichtet er praktisch auf
jegliches automatisiertes Batterie-
management (BMS).Er misst gelegentlich
mit dem Voltmeter nach und gleicht dann
die Unterschiede gewissermaßen von
Hand aus. Und es funktioniert
völlig problemlos, wogegen er bei
einem anderen Fahrzeug mit BMS mehrere
Akku-Defekte hatte. Ebenso bei
Versuchen mit diversen BMS-Systemen.

Letztendlich behauptet er sogar, dass
manche Systeme regelrechte LIPO-
Killer seien, und das obwohl doch
die landläufige Meinung ist, man dürfe
LIPOs keinesfalls ohne BMS betreiben.

Wieso also dieser Widerspruch von
Theorie und Praxis????????



Jack erklärt das sinngemäß so:
Die meisten Systeme balanzieren am
oberen Ende, was ja bei einer einzelnen
Zelle durchaus richtig ist. Aber hier
sind viele Zellen in Reihe geschaltet.
Diese Zellen sind nicht alle gleich.
Manche haben einfach etwas weniger
Kapazität und die sind dann halt als
erste leer.Weil aber die meisten noch
Energie haben bemerkt man das aber
nicht rechtzeitig, die Zelle wird tief-
entladen und das wars dann................

(An dieser Stelle muss ich einhaken:
ein ordentliches BMS hat
Einzelspannungsüberwachung
und Tiefentladeschutz,
sonst kann man
es sowieso nicht wirklich brauchen.
Darauf kann man nicht eimal bei
Bleiakkus verzichten!!!!
Wenn er also nicht bemerkt, dass
eine Zelle leer ist, dann liegt das
an der fehlenden Überwachung
und nicht daran dass zuvor
"oben" balanziert wurde!
Also: selber schuld, man betreibt
Akkus niemals!!!!!! ohne
Unterspannungsüberwachung,
das geht nie gut!)

Was macht also Jack, damit ihm das
nicht wieder passiert?

Er balanziert im unteren Bereich, also
am unteren Knick der Kennlinie
so bei 2,5 bis 3V je nach Akkutyp,
dann lädt er, bis der erste Akku
den oberen Knickpunkt der
Kennlinie erreicht.
Manche der Akkus könnten da
zwar noch was aufnehmen, aber
die Kette muss sich nach dem
schwächsten Glied richten.
So werden sie alle zugleich leer,
und man merkts auch ohne
kompliziertes BMS-System.
(wenn man die Gesamtspannung
beobachtet)

Wenn er es erklärt wird das
plötzlich ganz klar!
So habe ich das bisher nie
betrachtet, aber wo er recht
hat, da hat er recht.

Ich werde auf alle Fälle
mal Versuche in diese Richtung
machen. Mein Balancer
auf ATtiny-Basis ist ja sehr
fein abgleichbar.Ob ich auf
den Balancer-Widerstand
verzichten werde???
Nein! ganz gewiss nicht!
Aber ich werde versuchen,
jeder Zelle eine optimierte
Einstellung zu geben, so
dass die Balance im
entladenen Zustand optimal
ist.Ich muss ohnehin für
jede Zelle ein eignes Programm
laden, damit die Einzelspannungs-
abfrage funktioniert.
Jedes Modul hat einen eigenen
Befehlscode auf den es antwortet
wenn der "Master" nach Daten fragt.
So kann man die seriellen
Schnittstellen praktisch parallel
betreiben und den Schaltungs und
Programmaufwand minimieren.
Ich denke da so an eine Art M-Bus.
Can-Bus wäre auch machbar, aber
das ist mir noch zu kompliziert....
Da fehlt mir die Erfahrung.
Mal schauen.......

Ein Abgleich der Grenzwerte auf
die jeweilige Zelle ist also
auch nicht allzuviel Mehraufwand.

Ausserdem ist das "Die Lösung" des
Problems mit der in den Balanzier-
Widerständen verheizten Energie.
Die Widerstände brauchen ja gar
nicht fertigbalanzieren und sie
können auch viel schwächer aus-
gelegt werden, weil sie ja gar nicht
bis zum völligen Ausgleich arbeiten
müssen.Es reicht, wenn sie etwas
korrigieren und im Zusammenspiel
mit den Einstellungen die Werte
so zurechtrücken, dass letztendlich
alle Akkus zusammen leer werden.
Dann und nur dann ist das Akku-
paket perfekt balanziert.
(und wenns mehrere Lade-und
Entlade zyklen brauchen sollte
bis es passt, dann macht das auch
nicht viel aus)
Hauptsache, das System meldet
Über- und Unterspannungszustände
und warnt dann bzw. schaltet ab.

mfG
Franz

17 November 2009

Funktionstest des LIPO-Balancers mit ATtiny13

So, und heute gibts ein Video von meiner
Balancerschaltung mit ATtiny13!

(Später wird da entweder ein ATtiny13V oder 25
eingesetzt werden mal sehen.........)

Noch nicht ganz fertig, aber die Grundfunktion
läuft schon mal ganz gut!
Die Unterspannungsüberwachung konnte
zunächst nicht laufen, weil der Attiny in der
Konfiguration des Lernpakets bei 2,5V
abschaltet.
Das muss entsprechend umgestellt werden,
was aber mit dem Lernpaket nicht geht,
da mit der mitgelieferten Ausrüstung kein
Zugriff auf die "Fuses" möglich ist

(Nachtrag 19.11.2009,
Ich habe mir mittlerweile den AVR-ISP-Adapter
nachgebaut, damit ich z.B. mit Ponyprog
die "Fuses" umstellen kann.das geht mit dem
Adapter aus dem Lernpaket nicht.
Damit konnte ich die Abschaltung bei 2,8V
stillegen; jetzt geht auch die Meldung
bei Unterspannung.
Die Verwendung eines ATtiny13V oder 25
im Endzustand ist aber weiterhin nicht zu umgehen.
Zum Testen gehts aber auch mit dem
normalen 13er, halt ausserhalb seiner
spezifikation....)

Die Serielle Ausgabe des Spannungsmesswertes
muss noch reinprogrammiert werden.
Das sollte aber kein größeres Problem sein.
eher das Auswerten....wird schon noch........

Es braucht wirklich nicht viel!
ein ATtiny13V,(oder noch besser ein ATtiny25)
ein MOSFET (TTL-Typ N-Kanal)
ein Lastwiderstand
für die Funktion,
und zwei LED +Widerstand
für die Anzeige

mfG

Franz

Ich möchte an dieser Stelle auf den Blog
von Jack Rickard verweisen.

Einer der interessantesten Blogs, die ich in letzterZeit
gelesen habe.Auch wenn ich nicht alle seiner
Ansichten zu 100% teile, so hat er doch eine Menge
Erfahrung im Umgang mit diversen LIPOs und er hat
eine ganz wesentliche Tatsache festgestellt,welche
noch keiner bisher so gut erklären konnte wie er.
Es läuft sich zwar auch darauf hinaus, dass eine Unter-
spannungsüberwachung unverzichtbar ist,
Was eigentlich selbstverständlich sein sollte,
was sich offenbar noch nicht überallhin durchgesetzt hat
aber sein Vorschlag, die entladenen Akkus zu
balanzieren und dann gewissermaßen zu laden
bis der erste (schwächste) randvoll ist klingt
zunächst ungewöhnlich, aber hört ihn euch
einfach mal an! Macht Sinn!

http://jackrickard.blogspot.com/

http://web.me.com/mjrickard/

auf der Webseite gibts hervorragende
und ewig lange Videos zu allen möglichen
Themen. Stundenlang!







13 November 2009

ATtiny-Balancer-Programm läuft jetzt!!!!!!!

Es ist gerade 2Uhr55-Gäääääähhhhhhhhhhn!
seit ein paar Minuten macht der ATtiny13
endlich das, was ich will dass er es tun soll.......

(Dachte ich zumindest, aber ganz so wars dann
doch nicht, da war noch ein Fehlerchen drin, der ist
jetzt aber behoben und auch hier schon korrigiert.
Jetzt arbeitet Port B0 so wie er soll, die serielle
Schnittstelle ist wieder frei, aber noch nicht
programmiert....Immer mit der Ruhe!)
War irgendwie nicht ganz so einfach, wie ich ganz
am Anfang dachte.
In der Grundprogrammierung des
Lernpakets sind zwei der fünf Ports schon für
die Serielle Schnittstelle reserviert (PB1 und PB2)
ein weiterer (PB0) hängt mit an der Versorgung
den wollte ich eigentlich als Balancer-Ausgang
nehmen, aber irgendwie hats nicht geklappt,
obwohl es eigentlich gehen sollte.
(dem muss ich noch bei Gelegenheit
mal nachgehen, um die serielle Schnittstelle
zu erhalten,die könnte noch mal sehr
wertvoll werden)
(Anmerkung 16.11. Problem ist behoben!!!!!!!)
Da ist eine Art Boot-Programm drauf,
so dass man den ATtiny jederzeit neu
programmieren kann ohne lang
löschen und resetten zu müssen.
Ein sogenannter Boot-Loader halt, sowie
eben die Serielle Schnittstelle über die
man z.B. die Akkuspannung auslesen könnte.

Das wäre natürlich die Krönung des Ganzen!
Und Grundvoraussetzung für ein ordentliches
Display mit Spannungsanzeige etc.

Weil ich Port PB0 nicht zum Arbeiten überreden
konnte, nahm ich halt Port PB1 da gings.
Dafür geht jetzt die serielleSchnittstelle nicht,
aber das müsste auch noch zu schaffen sein.
Jetzt muss man halt klassisch neu
programmieren- was solls.......
Port PB0 ist wohl auch irgendwie vom
Boot-loader benutzt. Seltsam ist nur, dass
ich den Port per Impuls-Pausen-Steuerung
ohne Probleme nutzen kann,
aber nicht als Schaltausgang.
Andere takten den Balancer-Ausgang
ohnehin, aber ich sehe bei größeren
Akkus keine Notwendigkeit hierfür.
(um die 100Ah)
Ich denke, das Problem wird zu
lösen sein.Ich habe den Baustein jetzt
eh schon ohne Boot-loader
programmiert, vielleicht
wärs das schon gewesen,
aber das teste ich ein andermal.
(Anmerkung 16.11. Problem ist behoben!!!!!!!
es scheint wirklich der Boot-Loader
gewesen zu sein! da ist noch einiges
an Programm dabei für ein Interface,
und das benutzt den Port als
Puls-Pausen-Ausgang, drum war der
als solcher initialisiert und für nichts
anderes zu gebrauchen)


Derzeitiger Zustand:
ATtiny13 (muss noch ersetzt werden durch
einen ATtiny13V weil der auch für 1,8V
spezifiziert ist,ansonsten aber identisch)
Der Baustein ist als eigenständig
laufender Balancer konzipiert.
Versorgt aus der zu überwachenden Zelle.
Serielle Spannungsauslesung ist vorgesehen,
aber noch nicht realisiert.
Eine Status-LED bzw. Optokoppler
kann aber schon angesteuert werden.

Derzeitige Schaltgrenzen:
Alarm unter 2,5V bzw. über 3,6V (pin2 high)
Balancer schaltet ein bei 3,5V (pin5 high)
Diese Werte lassen sich in
0,0173V-Schritten verändern

Der PIC nutzt seine interne Referenz
von 1,1V mit 255-stufiger AD-Wandlung
macht 0,0043V-Schritte am ADC-Eingang.
Mit Spannungsteiler 4:1
(10k+3k3 bzw. 1k+330R 0,1%) ergeben
sich 0,0173V an der "Klemme"
bei einem Messbereich bis 4,43V max.

Hier der Quellcode:
(Anmerkung: korrigierte Version vom 16.11.09)

;Regler1.asm, Balancer 2,5V 3,5V 3,6V 1,1Ref;
;Werte für Eingangsteiler 4:1 10k/3k3 bzw 1k/330R 0,1%
;ADC an PIN3(PB4): Ref.:1,1V/255=0,00431V gibt 0,0174V je Einheit
;2,5V:0,62V:144 3,5V:0,87:201 3,6V:0,89:207
;Stoermeldung an PIN2(PB3)
;Balancer an PIN5(PB0)

.include "tn13def.inc"
.def A = r16 ;Messwert ADC
.def B = r17 ;GWu
.def C = r18 ;GWbal
.def D = r19 ;GWo
.def Delay = r20
.def Count = r21
rjmp Anfang
Anfang:
sbi ddrb,0 ;Datenrichtung PB0
sbi ddrb,3 ;Datenrichtung PB3
rcall AdcInit
Schleife1:
ldi A,2 ;ADC2 an PB4
rcall RdADC
ldi B,144 ;GWu: 0,62V/1,1V*255=144
ldi C,207 ;Bal: 0,89V/1,1V*255=207
ldi D,219 ;GWo: 0,94V/1,1V*255=219
cp A,B ;Vergleich GWu
brlo PB3ein
cp C,A ;Vergleich Balancerspg
brlo PB0ein
cp A,C ;Vergleich Balancerspg
brlo PB0aus
Schleife2:
cp D,A ;Vergleich GWo
brlo PB3ein
allesok:
cbi portb,3 ;port3 Stoerung aus
rjmp Schleife1 ;naechste Messung
PB3ein:
sbi portb,3 ;Stoerung ein
rjmp Schleife1 ;naechste Messung
PB0ein:
sbi portb,0 ;Balancer ein
rjmp Schleife2 ;zum Vergleich GWo
PB0aus:
cbi portb,0 ;Balancer aus
rjmp Schleife2 ;zum Vergleich GWo
AdcInit:
ldi A,3 ;Clock / 4
out ADCSRA,A
sbi ADCSRA,ADEN ;AD einschalten
ret
RdADC:
out ADMUX,A
sbi ADMUX,ADLAR ;Left adjust
sbi ADMUX,REFS0 ;1,1VRef benutzen
sbi ADCSRA,ADSC ;Wandlung starten
ADrdy:
sbic ADCSRA,ADSC
rjmp ADrdy
sbi ADCSRA,ADSC
ADrdyb:
sbic ADCSRA,ADSC
rjmp ADrdyb
in A,ADCH
ret



Das wars schon!


Das ist mein allererstes ATtiny-Programm!
Nachdem nun auch die schlimmsten Fehler
behoben sind und die Pins für die serielle
Schnittstelle jetzt wieder frei sind,
bin ich fürs erste schon sehr zufrieden damit.
Und das mit der seriellen Datenausgabe zur
Spannungsüberwachung krieg ich sicher auch noch
zum Laufen, aber nicht heute......
.....und vermutlich auch nicht in den nächsten paar
Tagen.....ich muss einige andere Dinge in Ordnung
bringen.... Vaterpflichten....Ämter.... Haus renovieren
Steuererklärung, Werkstatt aufräumen,
Winterreifen montieren, Müll entsorgen,
und so manch andere unangenehme
Tätigkeit... da hat sich ganz schön was angesammelt!

Ich werde mir wohl einen Adapter basteln,
wo ich alle Aus und Eingänge beobachten kann,
also fünf LED mit Vorwiderstand
und Schalter sowie ein Poti
zur Spannungsvorgabe,
dann geht der Test einfacher,
wohl auch gleich mit den Programmier
und Leseleitungen

Eine Programmieranleitung gibts
ein andermal.
Da müsst Ihr halt jemanden bitten,
ders schon kann. Oder selber schlau machen.
Ein bisschen googeln........

Auf der Homepage des Verfassers
des Lernpakets gibts
die nötigen Programme als Update zum
Downloaden!

www.b-kainka.de/lpmikros.htm

da ist auch der Schaltplan des Adapters
zu finden, sind nur ein paar teile!


Hier noch die HEX-Daten: (Stand 16.11.09)

:020000020000FC
:1000000000C0B89ABB9A15D002E017D010E92FECC7
:100010003BED011740F0201740F0021740F0301779
:1000200010F0C398F1CFC39AEFCFC09AF8CFC09821
:10003000F6CF03E006B9379A089507B93D9A3E9A7C
:10004000369A3699FECF369A3699FECF05B1089585
:00000001FF

als BMS.HEX abspeichern (nur Tex)
und auf den ATTiny übertragen.

viel Spass!
Das geht leider noch nicht bei 2,5v
weil der dann abschaltet


Zum ändern der Schaltgrenzen muss
der Quelltext angepasst und neu
compiliert werden.

Das Auslesen der Werte stelle ich mir
momentan so vor, dass es in einer Art
Master-Slave-Modus passiert.
Dazu müsste zwar jedes Modul einen
eigens programmierten PIC drin haben,
mit speziellem Befehl für die Antwort,
aber die Adressierung wäre dann einfacher.
Funktionierende Programme hierfür sind
im Lernpaket auch schon dabei,
solange das Problem mit Port 0 nicht
gelöst ist, könnte man mit zwei PIC arbeiten,
aber wie schon gesagt,das muss gehen,
und wenn ich den Balancer takten muss!

Ein Rechner (notfalls Terminal-Programm)
sendet die Nummer gleichzeitig an alle.
Der angesprochene antwortet mit seinem
ADC-Wert -fertig!
Die Umrechnung auf lesbare Werte
( Wert x 0,0173V) sollte eigentlich auch
noch im PIC erfolgen können,
zumindest als mV müsste direkt gehen.
So könnten alle parallel geschaltet sein,
und der Elektronik-Aufwand wäre gering.

Die Spannungen sollten eigentlich nur
interessieren wenn was nicht passt.
Den Alarm bei Über- und Unter-
Spannug habe ich zusammengefasst,
weil nicht beides gleichzeitig auftreten
kann, bzw sich der Fehler aus der
Situation erklärt.
Laden: Überspannung,bzw
Versagen eines Balancers.
Fahrt: kann nur Unterspannung sein.

Fürs erste könnte ein PC angeschlossen
werden, aber für die Zukunft sollte es
schon ein ordentliches Display sein.
(eine neue Aufgabe.............)

bis demnächst!

mfG
Franz