Translate

10 März 2010

Serielle Anzeige selbst programmiert (fast)

Tja............
die fertigen Programme haben nicht ganz so
funktioniert, wie ich das haben wollte..........
Ich musste mich also selber hinsetzen!
Das ist sowieso die befriedigendere Lösung.

Was wollte ich haben?
1. ATtiny als Basis wg. Bascom-Programmierung
2. Quarz, damit die serielle Schnittstelle läuft.
3. Baustein mit echter serieller Schnittstelle
4. ein selbstgeschriebenes Programm

Was soll das Ding letztendlich können?
....wieder mal Änderungen im Konzept....

1.Ich will ein LCD-Display für diverse Anzeigen
2.Am Display soll es mehrere Tasten geben
3.Die Funktionen sind auf mehrere ATinys verteilt
4.Die ATtinys kommunizieren seriell (vorerst(?),weil einfach!)

Was müssen die Programme können?
1. Das Display muss seriell empfangene Daten darstellen
2.Der Rechner im Display soll Befehle schicken können
3.Die Messeinheiten sollen einzelne Befehle erkennen

Was soll ablaufen?
in der "Grundstellung" werden Gesamtspannung und
"Bordnetzspannung" gemessen und angezeigt.
Ganz nebenbei werden die einzelnen Zellen der
Reihe nach abgefragt und bei Fehlern soll Alarm
ausgelöst werden.
Als Bemessungsgrundlage soll die durchschnittliche
Zellenspannung dienen! Ein Alarm bei einer bestimmten
Spannungsuntergrenze ist natürlich ebenso vorgesehen.
Ein gezieltes Abfragen einer Zelle ist auch vorgesehen.

....ganz so weit bin ich aber noch nicht......
Die Messfunktionen und Umrechnungen in "Klartext"
habe ich schon mit dem ATtiny13 getestet, das sollte
nicht mehr allzu problematisch sein, und die Funktionen
sind auf andere ATtinys bzw. Atmegas übertragbar.

Deshalb habe ich mich jetzt erst mal den Steuerfunktionen
gewidmet.
Dafür habe ich ein Testprogramm geschrieben,
das möglichst viele Steuerfunktionen abarbeitet.
Im Display / Bedieneinheit will ich einen ATtiny2313
einsetzen. (Anm. es wird wohl eher ein Atmega48,
aber für andere Zwecke würde der 2313 durchaus reichen)
Dem habe ich jetzt folgendes beigebracht:
Reaktion auf ganz bestimmte (Hex) Befehle/Bytes
1 (49h), 2 (50h), 3 (51h) und r (114h) werden erkannt
und als Reaktion darauf wird sowohl im Display
angezeigt als auch seriell als Text gesendet,dass diese
Befehle erkannt wurden (und auch welcher es war)
Undefinierte Befehle werden ebenso gemeldet und
weitergeleitet.(Hex-Wert wird angezeigt
Hex-Wert und Buchstabe im Klartextwerden sowie
eine Textmeldung werden ans Terminalprogramm
geschickt)
Die Ausgabe der Hex-Zahl als Buchstabe in der
LCD-Anzeige klappt momentan noch nicht,
aber das ist auch gar nicht nötig
und das wäre sicher noch lösbar.
Als "Klartext" geschickte Meldungen werden
derzeit einfach ignoriert, das ist gut so.
Da muss ich noch ein bisschen grübeln,
wo ich überhaupt die Meldungen generiere.
(Werte nur als Zahl (Byte, ev.Integer)übertragen und
in der Anzeige umrechnen, oder schon in den Messtellen
als Klartext generieren und im Display nur
noch anzeigen (String,16Zeichen)...mal sehen...
das wird noch interessant........)

Am ATtiny2313 sind noch vier Portpins frei,
da kommen Taster dran.Damit die Ausgabe je eines
Befehls auszulösen ist kein Problem.
Die Auswertung der Befehle funktioniert jetzt,
und wie die Messung geht ,das hat schon der ATiny13
eindrucksvoll gezeigt.Da erwarte ich keine großen
Probleme mehr, aber da brauche ich andere Bausteine.
(ATtiny24 bzw. ATtiny26 scheinen geeignet,
Leider haben die keinen UART...... der 2313 hat
UART aber keine AD-Wandler.... warum gibts keinen
ATtiny mit UART und ca. 4 AD-Wandlern?????????).
All die Funktionen, die mir Kopfzerbrechen
bereiteten laufen jetzt im Testprogramm
gleichzeitig in einem ATtiny2313 der zur Zeit
ca 55% an möglichem Code drauf hat.
Da geht noch einiges................
z.B. eine kleine Menueführung für die
Funktionen













Nachtrag 12.März 2010:


Ein Menue für die Bedienung läuft

mittlerweile auch schon mal in den
Grundzügen.


Ich kann zwischen mehreren Ebenen

(in denen dann völlig unterschiedliche
Programme ablaufen können)
hin und herspringen.


1.Ebene, gleich nach dem Einschalten.

Systemtests etc. ev. anschliessend
umschalten in die zweite Ebene
2.Ebene für ??????????
Ich denke an Überwachen von
durchschnittlicher, höchster und
niedrigster Spannung aller Zellen
sowie Anzeige der Bordbatterie (12V)
und überwachung fester Grenzen.
3.Ebene, Automatisches Messen
aller Zellen der Reihe nach
mit Einzelspannungsanzeige.
4.Ebene, manuelle Anwahl der Zellen


Das alles ist noch nicht endgültig, die
Programme sollen auch als Basis für
vollkommen andere Anwendungen
brauchbar sein.

(wer weiß, was noch kommt).

Recht unerwartete Probleme gibts beim
Einlesen von Text (ASCII)
und größerer Zahlen (mehrere Byte)
über die serielle Schnittstelle, aber das
ist ganz sicher zu schaffen. Im Prizip
geht das schon, aber da ich empfangenen
Text nicht so ohne Weiteres im Display
darstellen kann und auch der Empfang
nicht ganz einfach ist, insbesondere,
wenn mal irgend welche Fehler
auftreten sollten und deshalb die
Übertragung irgendwo stockt.
Das wird noch interessant!!!


Eigentlich wollte ich die"Rechenaufgaben"
in die Messstellen
auslagern, und das Display nur als
Anzeige, Bedieneinheit

und Zellennummerngenerator
nutzen (derzeit 65% Speicher voll)
Prinzip: Zellennummer gesendet,
die entsprechende Messstelle antwortet
in "Klartext" (Zelle 23: 3,27V)
Wenn ich jetzt die Umsetzung in
"Klartext" auch noch da reinpacken
soll, wirds hier wieder mal eng.....
..und die Messstellen langweilen sich!
Da das aber ohnehin Voraussetzung ist,
um alle Spannungen zentral zu
"bewerten" und nach Pegel und der
zugehörigen Zellennummer zu
sortieren ist das wohl nicht allzu
Problematisch.

Übrigens: 1 Byte entspricht bei
5V Messbereich ca 0,02V Auflösung.
(5V / 256 = 0,01953125)

Eine Genauigkeit von ca +- 0,1V sollte
demnach zu schaffen sein.Das müsste
eigentlich locker reichen.

Nachtrag 16.03.2010:

Das Display macht jetzt schon ganz tolle
Sachen:





















Die aktuell gemessene Zelle wird angezeigt.
(z.B.: Z060)
(Die " Messwerte", je ein Byte kommen bereits über
die serielle Schnittstelle an, aber noch aus einem
Simulierten Messumformer, einem ATtiny2313,
der auf Anfrage vorgegebene Werte von 0-255 sendet)
die "mV" sind nur "Text für die Optik")
Das Anfragen der Messwerte und die Sendung
der passenden Antwort funktioniert problemlos
und absolut zuverlässig.
Die Auswertung und Anzeige der Zellen mit
der höchsten und niedrigsten Spannung
funktioniert auch schon.

Allerdings zeichnet sich schon jetzt ab,
dass der ATtiny 2313 doch überfordert ist.
(eigentlich wollte ich die Messstellen rechnen
lassen und das Display sollte nur den Text darstellen)
Die 2k Speicher sind fast voll,weil die
Formatierung der Zahlen z.B. führende
Nullen bei Bascom den Speicher geradezu "frisst"
(Das Problem hatte ich schon beim 13er)
Daran solls aber gewiss nicht scheitern!
Die 4k der Freien Bascom-Version reichen
allemal, ich muss nur noch die Messwerte
in Klartext umrechnen etc. das ist nicht
allzu tragisch.
Einen passenden Prozessor finde ich sicher!
(Atmega 48 à 1,30 € )

Das Programm gefällt mir schon ganz gut.
Ich führe die Berechnungen nun doch
im Steuerrechner des Displays durch,
weil ich so viel problemloser die
Min- und Max-Werte
ausrechnen und anzeigen kann.
Das wurde doch wieder mal ganz anders
als ursprünglich geplant!
So macht das einfach mehr Sinn!

Prinzip der Maximalwertanzeige:
Kommt ein höherer oder niedrigerer Wert
als die angezeigten Grenzwerte, werden die Werte
(Zellennummer und Spannug) ins Display
geschrieben, und auch als Referenz abgelegt.
Kommt die entsprechende Zelle erneut an die
Reihe, so wird der neue Messwert übernommen.
So bleibt die Anzeige immer aktuell und eventuelle
Fehlmessungen werden wieder entfernt.
Das lief auf Anhieb perfekt.



Nachtrag 17.03.2010:

Ich habs nun doch noch geschafft, alle
wichtigen Teilfunktionen in den 2313
rein zu programmieren!!!!
Vor Allem die Formatierung der Zahlen.

Anzeige von Zellennummer Spannung;
Anzeige von MAX. und MIN.

sowie eine Störmeldung bei Unterspannung
einer einzelnen Zelle. (fester Wert)

Die Meldung bei Unterschreitung des
Durchschnittswertes aller Zellen ist
kein Problem mehr, aber das macht
erst Sinn, wenn ich entsprechende
Messwerte aufnehmen kann.

Ich habe den "Dummy-Geber", der einfach
fest vorgegebene Werte lieferte
(je nach Anfrage, zum Test der Decodierung)
durch einen ATtiny 13 ersetzt,
der auf jede Anfrage reagiert, aber dafür
tatsächlich misst.
Das Ergebnis ist beeindruckend!

Da die Berechnungen im Display-Rechner
stattfinden, werden sich die Messstellen
eher langweilen.........

Was hab ich da vor?

Ich will je fünf (4 ????) Zellen zugleich
messen. das geht mit einem Baustein
über die Zwischenwerte der Reihenschaltung
von 4 x 5V ; 0-5V-10V-15V-20V.
Die Auflösung beträgt da immer noch
ca. 0,025V bei fünf Zellen bzw.
0,02V bei vier Zellen.
Die AD-Wandler arbeiten mit 10Bit (1024)
Der Wert müsste also ohnehin durch 4 geteilt
werden damit es ein Byte pro Wert wird.
Das ist nicht die Messgenauigkeit!
aber die sollte dann immer noch bei ca +- 0,1V
oder besser liegen

Es drängt sich geradezu auf, die Balancer-
Funktion auch in die Messstellen zu packen!

.....mal durchkalkulieren, obs Sinn macht.

Ich spare ATtinys à 1€ je Zelle ein, brauche dafür
aber je einen Optokoppler .....und der Abgleich
wird schwieriger....und der Balancer bräuchte
eine eigene Spannungsversorgung...............

Hmmmmmmmm...............

Nachtrag 06.April 2010

.......und wieder einen Riesenschritt weiter!!!!!

Das Display läuft schon mal gut genug für erste Tests.
Da ist noch einiges zu tun, aber das eilt jetzt nicht.
Die Befehle gehen richtig raus und die Rückmeldungen
werden korrekt angezeigt. Das reicht vorerst.
Der Prozessor wird sicher noch ein anderer.
Vermutlich ein Atmega 48!
Der hat als einzigen "echten" Nachteil sehr viele Pins (28).
Mit 1,30€ eine Super-Sache.
Wenn der nur nicht so riesig wäre.........
Beim Display ist das kein Problem, aber bei den
Mess-Modulen muss ich Platz sparen.Da sind die
14Pins des ATtiny24 schon angenehmer.

Ich habe in der Zwischenzeit ein wenig an den
Messstellen weitergearbeitet.

Mittlerweile messen vier ATtiny24 jeweils vier
Spannungen.Leider haben die 24er wie auch die
26er keine wirklich echte serielle Schnittstelle.
Deshalb laufen die mit "Software-UART"
Zumindest aber mit Quarz und so funktioniert
das schon ganz zufriedenstellend.
Womöglich werde ich hier auch auf den
Atmega 48 umstellen - mal sehen.......
Der wäre völlig "unterfordert", aber die
Datenübertragung wäre dank UART besser.

Die Kommunikation läuft noch nicht galvanisch
getrennt, aber immerhin klappt die Kopplung.
Alle Messstellen kriegen das selbe serielle Signal.
(bei wesentlich mehr Messstellen ist hier natürlich
noch eine Treiberstufe für viele Optokoppler nötig)


Die Rückmeldung wird per Dioden und Pull-Up auf
eine Leitung zusammengeführt.
Da alles nach dem Master-Slave-Prinzip arbeitet
gibt es hierbei bisher keine Probleme.
(jede Messstelle sendet nur, wenn sie vorher
aufgefordert wurde, so gibt es kein Durcheinander)

Wie gehts weiter?
Nächstes "Etappenziel" ist die galvanische Trennung
der seriellen Kommunikation.Insbesondere die
Treiberstufe für bis zu 50 Optokoppler.Ich will
Versuche mit Treiberbausteinen für Mosfet machen.
Die Dinger setzen die 5V-Signale auf 12V oder 24V
um und sind sehr schnell und preiswert.Bei 12V
könnten schon mal je vier Optokoppler in Reihe
betrieben werden.Wieviele dieser Gruppen an einem
Ausgang betrieben werden können muss noch
getestet werden.Schon der kleine TC4431/32
kann 1,5A Peak und mindestens 100mA
Dauerstrom bei 24V schalten, was an 12V
für mindestens 24 Optokoppler reichen sollte.

2 * 24 * 4 = 192 Da sollten mit zwei TC4432
192 Spannungen keine Utopie sein!
(Das gilt es aber noch zu bestätigen)
Ansonsten gibt es ja auch richtige Treiber-ICs.
Um einen Frequenzumrichter für
380V-Motoren an Gleichspannung zu betreiben
sind ca 160-170 Zellen nötig.

Da ich ohne großes Protokoll nur ein Byte sende
und pro Meßstelle vier Zellen messe möchte ich die
Werte 201 - 250 für Statusabfragen freihalten.

mit 251 (?) bis 254 könnten dann z.B.die
Bordbatterie und die Gesamtspannung erfasst
werden.

Bei den Rückmeldungen mache ich mir weniger
Sorgen.Ein ATtiny oder Atmega kann locker
einen Optokoppler ansteuern.
Dass ich wohl nicht die Ausgänge von fast 50
Optokopplern einfach parallelschalten sollte
ist auch klar, aber das muss ich ja ohnehin
grüppchenweise machen. Die Anlage soll ja
aus Standardbaugruppen bestehen,
Display = Master und Slaves je nach
Anzahl der überwachten Zellen
Eventuell wird die Kommunikation auch
mit etwas mehr als 5V erfolgen.
Da fällt mir schon noch was ein!

I²C oder ein ähnliches Bussystem stünde auch noch
im Raum, aber das ist auch nicht so viel besser,
vor Allem wenns galvanisch getrennt sein soll
wird der Aufwand schnell größer.
Ich werde deshalb wohl bei meiner primitiven
seriellen Kommunikation bleiben, wenngleich
da wohl an mancher Stelle mit 12V gearbeitet
werden wird.
Mir reichen übrigens sogar 300Baud wenns denn
sein müsste, derzeit läufts mit 1200Bd.
(9600Bd machten aber auch keine Probleme)

Noch ein ganz wichtiger Punkt auf der
"To Do -Liste": die Variablen wie
Zellenanzahl, oberer und unterer Grenzwert
etc....... sollen unbedingt im Menue einstellbar
werden; momentan sind sie noch fest
im Programm abgelegt; aber wozu haben
die ATtinys und Atmegas schliesslich
ihr EEprom........ Die paar Variablen
lassen sich sicher noch wo unterbringen!
Im 2313 fehlt allerdings der nötige Platz.



Update 9.April 2010:

noch ein paar Verbesserungen:




grundsätzlich ist das System schon fast verwendbar!

es fehlen noch folgende Funktionen:
Galvanische Trennung der Meßstellen
Messen mehrerer Zellen in Reihe
Einstellen der Parameter im Menue

ferner:
gezieltes Anzeigen bestimmter Zellen
(aus Platzgründen derzeit entfernt)

Steuerung eines Ladegerätes bzw.
Integration eines Ladegerätes ins System.
(Das wird wohl etwas schwieriger!)
Voraussetzung hierfür ist eine Rückmeldung der
Balancer-Funktion bzw eine Steuerung der Balancer
vom Display aus.Sobald eine Zelle mehr als
z.B. 50% der Balancerleistung braucht,
muss die Ladestromstärke reduziert werden.

Ob jetzt "oben" oder "unten" balanziert wird
(Jack Rickard...) ist doch letztendlich egal!
Die schwächste Zelle macht immer den vollen
Spannungshub. "Oben" balanzieren ist
wesentlich einfacher, da für jede Zelle die selben
Werte gelten.
Dafür ist eine Spannungsüberwachung
jeder einzelnen Zelle Voraussetzung.
Wird "unten" balanziert, dann sieht man an
der Gesamtspannung wann Schluss ist.
Ein Balanziervorgang kann aber nur bei
fast völlig leeren Akkus stattfinden.
Aufgrund ihrer flachen Kennlinie sagt die
Spannung bei LIPOs fast nichts über den
Ladezustand aus.
Ich wills mal so sagen:
Werden LIPOs ohne Batteriemanagement
betrieben, dann ist "unten" die bessere
Lösung bzw sogar die einzige Möglichkeit.
Hat man aber ein Monitoring oder
Management, so sollte eher "oben" balanziert
werden.Die Steuerung des Ladevorganges ist so viel
einfacher zu beherrschen.
Man sollte sich aber im Klaren sein, dass die
praktikabelste Lösung wohl eine Art
Mittelweg sein wird. Es ist nicht nötig alle
Zellen randvoll zu laden und eine Menge
Energie in den Balancern zu verheizen.
Sobald die schwächste Zelle zuerst voll ist
und auch zuerst leer wird ist die Balanzierung
in Ordnung, ganz egal, auf welche Spannung sich die
Zellen letztendlich einpegeln.
Die Shunt -Widerstände brauchen daher gar nicht so
stark ausgelegt sein wie üblich.
Es reicht also, wenn sie nur korrigiernd eingreifen.
(Das setzt aber eine Rückmeldung voraus)
Eigentlich kann mit dem Laden aufgehört werden
sobald die erste Zelle ihre volle
Spannung erreicht hat.
genauso muss aber erkannt werden wann die erste
Zelle leer ist. (es sollte dann aber die selbe sein,
die als Erste voll war!!!!)
Ein "fertigbalanzieren bis 4,2V" bringt jedenfalls
überhaupt nichts.

mfG
Franz

25 Februar 2010

Serielles Display für BMS mit PIC 16F628A

Hallo Allerseits.......

Es gibt tatsächlich mal wieder was neues....
Ein serielles Display für mein
Batteriemanagement läuft so halbwegs !

Aus einer alten Anzeige und einem
PIC 16F628A habe ich ein seriell
ansteuerbares Display gebastelt.

Das Programm für den PIC stammt
aus den Tiefen des Internet

http://www.freewebs.com/x7jay7x/

Als besonderes Extra sind da noch
Eingänge für vier Taster mit drauf!!!!!

Das Teil arbeitet mit den
"Matrix Orbital Konmmandos"
Leider reagiert die Anzeige nicht auf
CR und LF sondern ich muss den Cursor
jedesmal in der jeweiligen Zeile positionieren.
Das ist zwar kein großes Problem,
aber ich muss die Ausgabe meiner ATtiny
etwas umgestalten und ein PC kann dann
wohl nicht mehr allzuviel damit anfangen.
Die Steuerzeichen stören halt.



Das ist trotzdem ein großer Meilenstein,
aber man sollte sich nie zu früh freuen!
Aber der Weg ist schon mal nicht ganz falsch.
Es gibt noch einige Probleme zu lösen:

Welche Spannung soll ich als Fehler
melden?? 2,5V ??
Bei welcher Temperatur und bei wieviel
Strom bitteschön ???????
(ok, ich war auf Jack Rickards Seite.....
Man darf zwar nicht immer alles bedingungslos
akzeptieren,was er sagt, aber es ist immer wieder
interessant seine Meinung zu hören.
Aber unsereiner kann sich solch kostspielige
Versuche eh nicht leisten deshalb: Danke Jack!)

Alles gar nicht so einfach!

Also: Jedesmal auch Gesamtspannung
messen, Durchschnitt ausrechnen und
mit der Zellenspannung vergleichen!
Das zeigt zumindest Ausreisser bzw
defekte Zellen unabhängig von
Strom und Temperatur an
.....also weiter grübeln..........

................und nachdenken,
wie man den Energievorrat anzeigen kann.....
eine Art Energieverbrauchszähler muss her!

Das heisst Strom und Spannung messen,
und die Werte multiplizieren und aufaddieren!
....und zwar ständig! und in Abhängigkeit
von der Temperatur und sonstiger
Störgrößen usw..................
Berücksichtigung des Wirkungsgrades beim
Laden.......
Die mit dem Alter abnehmende Kapazität
sollte berücksichtigt werden....
....... und und und..........................
Da bin ich momentan etwas überfordert!

....und dann ist da noch ein Problem:
Ich hab die LCD-seriell-Umsetzung
nicht selbst programmiert,
ich hab keinen Quellcode und deshalb
kann ich da auch nichts dran verändern.
Da weder meine ATtinys noch der Pic
mit Quarz arbeiten sind 9600Baud viel
zu viel.Die internen Oszillatoren sind dafür
zu ungenau.Was bei Zimmertemperatur läuft
braucht deshalb im Winter oder Sommer
noch lange nicht zu laufen...........
für die paar Zeichen, die ich übertragen will
reicht auch eine viel niedrigere Übertragungsrate.
Der ATtiny und der PIC haben sich jedenfalls
noch nicht ganz fehlerfrei verstanden.Etwas
Kältespray auf den ATtiny, dann lief es.
Mein PC konnte beide verstehen...........
Damit habe ich aber schon gerechnet.

Da werd ich noch dran arbeiten müssen.
Zumindest muss ich da noch Tests machen
Da tendiere ich mittlerweile
mehr zum 2313. Der hat halt viel mehr Pins
als ich brauche, aber dafür hat
er auch Anschlüsse für einen echten Quarz
sowie eine echte serielle Schnittstelle.
Der kostet auch nicht mehr als der 13er.
Die Programmierung ist fast gleich,
und per Bascom lässt sich der auch ganz einfach
an ein LCD-Display hängen.

Trotzdem wird das Konzept immer klarer..

Ich tendiere mehr und mehr
zu einem zentralen Gerät mit
"Spaghettiverdrahtung". Je ein ATtiny13 für
die Balancer-Funktion pro Zelle.
ein weiterer 13er für die
Spannungsmessung.

Allerdings habe ich es mittlerweile geschafft,
sowohl die Berechnung der Einzel- als auch der
Gesamtspannung in einem 13er unterzubringen
indem ich die schon funktionierende Routine
als Unterprogramm einfach zweimal mit
unterschiedlichen Einganswerten verwende.

Man kann den 13er auch mit Quarz betreiben
bzw halt mit einem Oszillator, aber das ist
schon wieder ein zusätzlicher Aufwand der
nach Möglichkeit vermieden werden sollte.

Ich werd wohl die seriell-LCD-Umsetzung
nochmal selber programmieren müssen!

Dann versuch ichs mal mit niedriger
Baudrate (1200 ???? oder so...)

Oder:
Die Displays von ELECTRONIC ASSEMBLY
können auch SPI also synchron seriell!

Das bedeutet dass die Taktfrequenz der ATinys
"wurscht" ist, weil ja der Takt mitgeliefert wird!

Oder:
I²C ist auch so was ähnliches.............

Das ist momentan das zentrale Problem!

Und noch eine (ganz frische) Idee:
so ein ATtiny hat ja nicht nur einen
sondern vier!AD-Wandler!Warum also eigentlich
nicht gleich drei in Reihe liegende
Zellen zugleich messen????
Da brauche ich noch keine galv.Trennung
Bei 10 bit und grob gerechnet
3 x 4V und 5V Referenz ist die
Auflösung immer noch ca. 0,004V !
(12V / 1024 = 0.0039V )
das sollte doch locker reichen!
Das bisschen auseinanderrechnen der
Messwerte ist simpel, ich brauche
nur noch ein drittel an Hardware
wie ATtinys und Optokoppler etc.
und damit wäre das Spannungsproblem
ganz nebenbei auch noch gelöst!
Die ATtinys können so alle mit 5V laufen
Vielleicht sollte ich da doch Balancer und
Messung zusammenlegen????????
1 ATtiny 13 pro 3Zellen....warum nicht...?
Die Pins werden da knapp..........
Das verlangt dann immer mehr nach
zentralem Aufbau, aber das gefällt mir
mittlerweile ohnehin immer besser!
Einzelne Balancer-Module je Zelle sind für
einfachste Anlagen ok.
Hier ist das aber was anderes.

Die Idee ist noch ganz frisch, aber gut!
(glaube ich zumindest-mal fertigdenken!)
Da muss ich mich mal auf die Suche nach
dem am besten geeigneten ATtiny machen.

Bei den 8-Poligen reichen schlicht die
Pins nicht. Der 2313 hat zwar viele Pins,
ist aber nicht für ADC und PWM- Sachen
geeignet.

Die anderen kenne ich noch nicht so gut.
.....da muss ich mich schlau machen......
Der ATtiny 24 / 44 scheint da sehr !
gut geeignet zu sein! bis zu 8ADC !
Da sollten bis zu 6 Zellen + Schnittstelle
sowie Steuerpins machbar sein! ????
mit 5V Schaltregler spare ich noch Strom.
( 6 x 4,5V = 27V ; Das geht noch!)
Mal schaun! Jetzt wirds interessant!

bis bald mal wieder!
Franz

04 Februar 2010

Eine besonders einfache PWM-Steuerung mit dem ATtiny13

.....mal was ganz anderes zwischendurch........

Weil die Motorsteuerung eines E-Mofas kaputt ging
habe ich ein uraltes Projekt wieder aufgegriffen
und eine möglichst simple Ansteuerung gebastelt.

Damals hab ichs mit dem TL494 angesteuert.
Grundsätzlich geht der auch ganz gut, aber
wenn man dann noch extras wie Strombegrenzung
oder auch nur Sanftanlauf haben möchte, dann
wird auch eine einfache OP-Verstärkerschaltung
sehr schnell sehr kompliziert.....Und weil ich damals
keinen MOSFET-Treiberbaustein drin hatte,
wurde das Ganze halt doch wärmer als gewünscht.

Aber man ist ja lernfähig.........

Ich habe wieder mal einen ATtiny13 genommen.
(Ich hatte zwar eigentlich nicht vor diesen Blog
dem ATtiny zu widmen, aber ich mag den halt.
Und weil das Franzis-Lernpaket darauf basiert
ist alles besonders einfach nachzuvollziehen)

Da ist alles drauf. Zwei AD-Wandler für Eingänge
zwei Puls-Pausen-Modulatoren für PWM-Ausgänge.
Ich brauch eh nur je einen, aber da fällt mir irgendwann
auch noch was dazu ein, z.B.Strombegrenzung
und weil das Teil auch rechnen kann ist es kein
Problem, da auch noch ein paar Sicherheits-
Schaltungen reinzuzaubern.
Ein freier Pin wäre auch immer noch übrig

Ein "BASCOM-Grundprogramm"
für zwei !! PWM-Kanäle in einem ! ATtiny13:

$regfile = "attiny13.dat"
$crystal = 1200000
Config Portb.0 = Output 'Pin5 PWM0a
Config Portb.1 = Output 'Pin6 PWM0b

Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

Dim M As Byte
Dim N As Byte
Dim Ad_2 As Integer
Dim Ad_3 As Integer

Do

Ad_2 = Getadc(2) 'Pin3 ADC2
Ad_2 = Ad_2 / 4 '10Bit zu 8Bit
M = Ad_2 'Variable für Manipulationen

Ad_3 = Getadc(3) 'Pin2 ADC3
Ad_3 = Ad_3 / 4 '10Bit zu 8Bit
N = Ad_3 'Variable für Manipulationen

Pwm0a = M
Pwm0b = N

Loop

End


........das reicht schon mal als
Basis zum weitermachen!
Dieses Programm belegt ca 34% des Speichers

Ich habs wieder mal mit BASCOM programmiert.
Das geht am schnellsten und am einfachsten.
Ideal für solche kleinen Projekte die
mal eben schnell gebastelt werden......

Auch wenn die HEX-Datei deutlich größer
wird als mit Assembler, aber was solls...
Und auch, wenn manche "Profis" die Nase
rümpfen werden- Dieser Blog ist von einem
ATtiny-Anfänger für Anfänger geschrieben.
Auf Rechenleistung kommts hier nicht an,
und das ganze Programm hat nur ca 20 Zeilen.

Um den Drehwinkel des Potis zu reduzieren
hatte ich zunächst die Referenz auf 1,1V gesetzt.
Das habe ich aber wieder geändert und im
Programm entsprechend umgerechnet, bzw einfach
den Wert auf 255 begrenzt.
So bekomme ich die Möglichkeit den
Drehwinkel anzupassen und vor allem auch
eine Leitungsbruchüberwachung
einzubauen.

Der AD-Wandler ist in BASCOM standardmäßig
auf 10Bit gesetzt (0-1023) der PWM-Ausgang
arbeitet mit 8Bit (0-255)

Folglich muss man umrechnen....

Durch 4 teilen für vollen Drehbereich oder
auf 255 begrenzen (if x > 255 then x = 255)
oder beides miteinander kombinieren
bis die Empfindlichkeit passt.
Da kann man schön spielen............
Bei "größeren" Atmels kann man die
Auflösung der PWM-Ausgänge umstellen.
Vielleicht geht das auch beim ATtiny13.
Das habe ich noch nicht versucht.
Ich werds gelegentlich mal testen.

Siehe auch hierzu :
http://www.rn-wissen.de/index.php/Bascom_und_PWM

Da werden auch die Frequenzen berechnet

Ein kleines Problem ist die Tatsache,
dass der ATtiny während des Reset
auf "high" schaltet. (unabhängig davon,
wie die Ausgänge konfiguriert sind)

Da geht mindestens ein Ruck durch den Motor,
wenn man N-Kanal Mosfets direkt ansteuert.
Die Ansteuerung von N-Kanal-Mosfet muss
deshalb invertiert erfolgen.
Also muss auch der Ausgang entweder
invertiert ausgegeben werden (y=255-x)
bzw. man kann den oder die PWM-Ausgänge
auch invertierend konfigurieren.
Und zwar: clear up statt clear down
Zum Ansteuern von N-Kanal Mosfet sollte
in jedem Fall ohnehin ein invertierender
Treiberbaustein verwendet werden.
z.B. TC oder MIC4451 für große Leistungen
oder der TC4431 bei Betrieb direkt an 24V.
Der TC 4431 kostet ca 2€ , das muss drin sein.
Jeder andere Schaltungstrick dürfte eher noch
aufwendiger sein bis alles funktioniert.
Wie schon mehrmals erwähnt ist der Umgang
mit MOSFET meist mit Problemen des Timings
bzw zu wenig steilen Flanken verbunden.
Gerade beim hochfrequenten Umschalten
braucht man gute und kräftige Treiberstufen.

In Notfällen, bzw in Sonderanwendungen bei denen
es auf minimalste Baugröße ankommt kann man
mitunter aber auch alles noch viel einfacher gestalten.

Allerdings keine "feine" sondern eher
die sehr grobe Lösung!
Einen oder zwei P-Kanal Mosfet kann der ATtiny
zur Not sogar direkt ansteuern !!!!!!!!!
Für sehr einfache Antriebe (und nur da!
z.B. Spielzeuge etc. oder im Modellbau)
sollte das durchaus genügen.
Der ATtiny muss dann mit einem
negativen 5V-Spannungs Regler
an der positiven Spannung hängen.

Nachteile der Schaltung:
der Attiny hängt nicht an Masse.
Wenn man nur ein Poti als Geber hat ist das
aber kein Problem.
Für Analoge Messeingänge ist das völlig ungeeignet.
Bis man da was anpasst.....Da ist es sinnvoller gleich
einen Treiber zu nehmen, für P-Kanal nicht invertierend
P-Kanal Mosfet haben einen deutlich höheren
Innenwiderstand als N-Kanal Typen.
dafür können damit aber Motoren betrieben werden, die
fest auf Masse liegen z.B. Starke Scheibenwischermotoren,
Dynastart-Anlasser etc.

Ich hab das mal ganz provisorisch aufgebaut:

1x ATtiny13
1x 7905 Spannungsregler
2x IRF4905 P-Kanal Mosfet (ist notfalls auch bei 5V ok)
1x IRF1404 N-Kanal Mosfet (hier nur als Diode)
1x Poti 5k (Wert ist absolut unkritisch ca.1k-50k)
ein paar Stützkondensatoren
sonst nichts!

(Die LEDs dienen nur zur Kontrolle)

Die Mosfet habe ich direkt ohne Vorwiderstand
angeschlossen! (Bauteile sparen! 100R- ev500R wäre besser)
Und der IRF 1404 ist nur passiv als starke Diode drin.
Da sollte natürlich eine ordentliche schnelle Diode rein!
......siehe da! das funktioniert trotzdem! Besser als erwartet!

Das Ding kann so wie es ist locker!! 30A bei 24V regeln!
(bis ca 10A sogar ganz ohne Kühlkörper !)

Der winzige "Kühlkörper" reicht für ca 1min 30A bei 24V .
Soviel hätte ich nicht erwartet!





















Für eine ordentliche Schaltung
ist es natürlich viel besser, einen Mosfet-Treiber
zu nehmen. Der ATtiny liegt dann auf
GND und kann auch besser angesteuert werden,
aber wie gesagt, zur Not gehts so auch.
In manchen Fällen (Modellbau) hat man einfach
keinen Platz und ein Sanftanlauf einer
Modellokomotive wäre so ein typisches Beispiel
oder die gemeinsame und trotzdem manipulierbare
Ansteuerung von zwei E-Motoren eines Bootes
oder eines Kettenfahrzeugs
(ein Eingang gibt Gas,der andere lenkt )
Ein ordentlicher Treiber für Mosfets kostet oft
mehr als die Leistungstransistoren die er ansteuert,
aber nur so wirds eine wirklich gut arbeitende
Steuerung.
....Und wenn man jetzt ein ganz mutiger
Zeitgenosse ist, dann müsste es sogar möglich sein,
den 7905 Negativregler auch wegzulassen........
Der Attiny arbeitet von gut 2V bis 6V..
der Stromverbrauch ist minimal.
Die Last durch die Mosfet ist nur gering.(impulse!)
wenn der Widerstand des Poti als Lastwiderstand
genutzt würde und die Kontroll-LED als Spannungs-
begrenzer (mit Dioden in Reihe einstellen auf ca 5V)
sollte es mit passendem Widerstand nach Masse gehen!
Da das Poti direkt an der Referenzspannung hängt sind
kleine Schwankungen der Spannung egal!
Das hab ich allerdings noch nicht getestet!

eine genauere Beschreibung des Programms
kommt demnächst.

Grundfunktionen des "Mofa-Programms":

0-Stellungsüberwachung
(Wenn beim Einschalten das Poti nicht
auf 0 steht startet der Motor nicht)

Drahtbruchüberwachung:
(Sollte der Massedraht des Potis brechen,
würde der Motor "Vollgas" geben
also wird in diesem Fall abgeschaltet.
Volle Leistung liegt bereits bei ca 60°
Drehwinkel an, also viel früher bei 1,25V
am AD-Wandler.

Schaltausgang bei Vollast
Bei Vollaussteuerung der PWM-Stufe
wird ein Ausgang geschaltet.
Momentan mit LED zur Kontrolle
der Potistellung, damit könnte aber auch
ein Schütz zur Überbrückung der
Transistoren betätigt werden.

Der Wert der an den PWM-Ausgang geht
wird nicht direkt übernommen sondern
dem Ausgang des AD-Wandlers nachgeführt.
(per Größer-Kleiner-Vergleich wird
bei jedem Durchlauf 1 addiert oder subtrahiert)
So bleiben im Programm viele Möglichkeiten
in die Regelung einzugreifen.
Durch Pausen kann die Änderung gedämpft
werden.
Über den zweiten AD-Wandler könnte eine
Strombegrenzung erfolgen.
Wird eine Grenze überschritten, dann könnte man
z.B 2 oder 3 subtrahieren und schon ist der Strom begrenzt.
Das ist bisher aber noch nicht eingebaut.

Es ist wieder mal erstaunlich, mit welch einfachen
Mitteln man heute eine PWM-Steuerung
basteln kann

Die Ansteuerung durch den ATtiny funktioniert
hervorragend! Den Takt auf 9,6 MHz, dann pfeift
auch nichts. Ich hab die Frequenz nicht gemessen,
aber da die Schaltung bei 4,8 MHz deutlich pfeift
ist das wohl irgendwo bei 20khz.

und wenn man die geeigneten
Mosfet-Treiber und Mosfet wählt, dann sind
auch wirklich große Leistungen damit steuerbar.
Ich habe für die Mofa-Steuerung
einen TC4431 als Treiber und
vier IRF1404 als MOSFET verwendet.
(40V 202A 800APeak allerdings TO220 Geh.
da kann das Innenleben mehr, als die Pins!)
Damit müssten bei 24V locker 100-150A
zu schaffen sein. Für ein Mofa reichts
allemal!
Das sieht dann so aus:
Viel ist da auch nicht drauf!


















Hierzu empfehle ich, mal da nachzuschauen:

http://www.paulandsabrinasevstuff.com/index.html

Die bauen einen
"Open Source" 144V 500A Controller für Autos!
Da ist viel mehr Luxus drin, aber die
Grundschaltung ist fast gleich.

Den Takt (PWM) liefert hier ein ATMEGA,
das drumherum ist "Luxus" wie Temperatur und
Stromüberwachung etc.
Hinten kommt ein PWM-Takt raus.
TTL-Pegel wie beim ATtiny auch.
Als Mosfet-Treiber ist ein viel stärkerer eingesetzt,
der an 12V (optimal) betrieben wird und die Mosfet sind
natürlich "etwas" größer aber die grundsätzliche
Schaltung ist trotzdem nahezu identisch.
Die ganze Logik drumrum gibt es bei mir nicht.
(das ist in dieser Anwendung nicht notwendig)
Da sind also noch einige Reserven und
Optimierungsmöglichkeiten zu finden!

Noch eine Anmerkung am Schluss:
Wenn man einen MOSFET Treiberbaustein einsetzt,
dann könnte mandie Freilaufdiode auch als gesteuerten
MOSFET aufbauen (Brückenschaltung)
bzw sogar eine echte H-Brücke bauen. ( 2 Treiber )
Wozu hat der ATtiny schliesslich zwei PWM-Ausgänge!
Ein "Permanent-Feld"-Motor bremst dann
sofort ab und kann vor und zurück laufen.

Das werd ich irgendwann mal aufbauen,
vielleicht kann man das mit einem Pendel
koppeln!?????!
Hat schon irgendwer mal einen "Segway" als Modell
gebaut????
....nur so eine spontane Idee..........
wird wohl doch nicht ganz so einfach sein... ;-) ---egal....!

mfG Franz

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