Translate

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